Debian by its numbers, as seen by keyring-maint

At keyring-maint, we got a request by our DPL, querying for the evolution of the number of keys per keyring – This can be almost-mapped to the number of Debian Developers, Debian Maintainers, retired and deleted accounts over time since the keyrings are maintained over version control.

Stefano insisted this was more out of curiosity than anything else, but given the task seemed easy enough, I came up with the following dirty thingy. I'm sure there are better ways than cruising through the whole Bazaar history, but anyway - In case you want to play, you can clone an almost-up-to-date copy of the tree: bzr clone http://bzr.debian.org/keyring/debian-keyring/

  1. #!/bin/perl
  2. use strict;
  3. my ($lastrev, @keyrings, %revs, $fh);
  4. open $fh, '>growth_stats.txt' or die $!;
  5.  
  6. @keyrings = sort qw(debian-keyring-gpg debian-keyring-pgp
  7. debian-maintainers-gpg
  8. emeritus-keyring-gpg emeritus-keyring-pgp
  9. removed-keys-gpg removed-keys-pgp);
  10.  
  11. system('bzr unbind'); # Huge speed difference :-P
  12. $lastrev = `bzr revno`;
  13.  
  14. for my $entry (split /^---+$/m, `bzr log`) {
  15. my ($rev, $stamp);
  16. for my $line (split(/\n/, $entry)) {
  17. next unless $line =~ /^(revno|timestamp): (.*)/;
  18. $rev = $2 if $1 eq 'revno';
  19. $stamp = $2 if $1 eq 'timestamp';
  20. }
  21. $revs{$rev} = { stamp => $stamp };
  22. }
  23.  
  24. spew('Revision', 'Date', @keyrings);
  25. system('bzr bind')
  26.  
  27. for my $rev (sort {$a=>$b} keys %revs) {
  28. system("bzr update -r $rev");
  29. spew($rev, $revs{$rev}{stamp},
  30. map {my @keys=$_/*>;scalar(@keys)} @keyrings);
  31. }
  32.  
  33. sub spew {
  34. print $fh join('|', @_),"\n"
  35. }

And as a result... Yes, I fired up OpenOffice instead of graphing from within Perl, which could even have been less painful ;-) I had intended to leave graphing the data raw (also attached here) as an excercise to the [rl]eader... But anyway, the result is here (click to view it in full resolution, I don't want to mess your reading experience with a >1000px wide image):

A couple of notes:

  • Debian Developers are close to the sum of debian-keyrings-pgp and debian-keyrings-gpg
  • After a long time pestering developers (and you can see how far down the tail we were!), as of today, debian-keyrings-pgp will cease to exist. That means, no more old, v3, vulnerable keys. Yay! All the credit goes to Jonathan. Some last DDs using it are still migrating, but we will get them hopefully soon.
  • To be fair... No, the correct number is not the sum. Some people had more than one key (i.e. when we had ~200 keys in debian-keyring-pgp). The trend is stabilizing.
  • Of course, the {removed-keys,emeritus-keyring}-{pgp,gpg} will continue to grow. Most removed keys are a result of tons of people migrating over from 1024D to stronger 4096R keys
  • You can easily see the points where we have removed inactive developers (i.e. the main WAT lack-of-response, as seen at about ¾ of the graph)
  • keyring-maint handles the Debian Maintainers keyring since late 2009. There is a sensible increase (~10% in six months), although I expected to see that line grow more. I think it's safe to say the rate of influx of DMs is similar to the rate of influx of DDs - Of course, many DMs become DDs, so the amount of new blood might be (almost) the sum of the two positive slopes?

Anyway, have fun with this. Graphics are always fun!

Attachment Size
Debian by its numbers, as seen by keyring-maint 62.79 KB
Raw data 31.78 KB