U-Boot Authors

Notes

In some cases it may be interesting to have a list of all people who contributed to U-Boot. This page documents the process which was used to collect such a list, and the results.

This list is known to have deficiencies, and all help to improve it is more than welcome.

Notes on the process to collect the data:

  • I decided to collect the real names of the contributors, because these are more constant over time than for example their mail addresses.
  • Although git works nicely to provide the needed data per commit, U-Boot also has a long history where CVS was used, and often many patches were applied then before a commit was made. This is more difficult to analyze.
  • We should probably better talk about "Contributors" rather than "Authors" here, because a commit that pulls in a chunk of code or a even a number of files from other projects (say, from the Linux kernel) will here be attributed to the committer, and not to the original author(s) of that code. The efforts to go down to that level would simply be too big.
  • This list focusses on the development process, i. e. it is a historical view. One should keep in mind that this is different from the current state. While an assessment of the current state (which could for example be created based on the output of "git blame" ) should only provide names that are in this historical list, this list here may contain a number of names whose code has been removed since, so they no longer have any of their code present in the current source tree.
  • Note: the collowing shell commandsa may include control characters like CTRL-M (shown as '^M' or TAB (shown as ""); if in doubt, compare with the attached scripts.

Collection of this data was done in October 2018; the initial version covers the date from the begin of the project history (which was called PPCBoot at that time) until U-Boot release candidate v2018.11-rc2 .

Collection of data

  1. The CVS era ends around 2006-10-24 18:30 UTS; this corresponds to tag U-Boot-1_1_6 . Commit 0b666f81da is the very first commit in git repository. This is dated Sat Jun 17 20:10:14 2000 +0000 . One could reasonably argue that June 17, 2000 is the "official" birthday of U-Boot smile
  2. Attempt to filter out the needed information of the CVS era.
    Get patch information:
    $ git log 0b666f81da..U-Boot-1_1_6 | egrep -ai 'patch by |patch from ' >Authors/stage-0
         
    Filter out garbage:
    $ sed -e 's/.*[Pp]atch by //' \
          -e 's/.*[Pp]atch from //' \
          -e 's/[,:].*//' -e 's/ on / /' \
          -e 's/ [0-9][0-9][- ][A-z][A-z]*[- ]20[0-9][0-9]$//' \
          -e 's/ 11$//' \
          -e 's/ Aug 10 2005//' \
          -e 's/ 2005-02-08//' \
          -e 's/ and /^M/' \
          -e 's/[\. ]$//' \
          -e 's/^ *//' ../Authors/stage-0 | \
      tr '^M' '\012' >../Authors/stage-1.X
         
    Statistics:
    $ wc -l Authors/stage-1
    936 Authors/stage-1
         
  3. Calculate patch count (Note: This does not include myself!!)
    $ awk '{ cnt[$0]++ }
    END { for (name in cnt) { printf "%s\t%d\n", name, cnt[name] } }' Authors/stage-1 > Authors/stage-2
         
    $  wc -l Authors/stage-2
    258 Authors/stage-2
         
  4. Sort:
    $ sort -t '<TAB>' -r -n -k 2  Authors/stage-2 > Authors/stage-3
    $ head Authors/stage-3
    Stefan Roese    103
    Martin Krause   48
    Steven Scholz   32
    Yuli Barcohen   28
    Anders Larsen   20
    Kumar Gala      19
    Scott McNutt    17
    Pierre Aubert   17
    Pantelis Antoniou       15
    Jon Loeliger    15
         
  5. Process git era data: "git" is everything after '2006-10-24 18:30'; we use "gitdm" for the statistics in basically the same way we use it for all release statistics:
    $ ( cd /home/git/u-boot ; git log -p -M --since='2006-10-24 18:30' --until=v2018.11-rc2 ) | ./gitdm -u -s -a -o Authors/gitdm-results
         
    $ head Authors/gitdm-results 
    Processed 46658 csets from 1654 developers
    149 employers found
    A total of 4144305 lines added, 2895346 removed (delta 1248959)
    
    Developers with the most changesets
    Simon Glass               4171 (8.9%)
    Masahiro Yamada           1916 (4.1%)
    Marek Vasut               1517 (3.3%)
    Stefan Roese              1245 (2.7%)
    Wolfgang Denk             1107 (2.4%)
    $ wc -l Authors/gitdm-results
    6133 Authors/gitdm-results
         
    Select authors and bring into needed format
    $ sed -e '1,/Developers with the most changesets/d' \
          -e 's/ (.*//' \
          -e 's/\(   *\)\([1-9][0-0]*\)/\t\2/' \
          -e '/^$/,$d' Authors/gitdm-results > Authors/stage-4
         
  6. Combine CVS and git era data:
    awk ' BEGIN {
            FS = "\t"
    }
    {
            cnt[$1] += $2
    }
    END {
            for (name in cnt) {
                    printf "%s\t%d\n", name, cnt[name]
            }
    }' Authors/stage-3 Authors/stage-4 | \
    sort -t '<TAB>' -r -n -k 2 > Authors/stage-5
         
  7. Statistics:
    $ wc -l Authors/stage-5
    1852 Authors/stage-5
    $ head -20 Authors/stage-5
    Simon Glass     4171
    Masahiro Yamada 1916
    Marek Vasut     1517
    Stefan Roese    1348
    Wolfgang Denk   1107
    Tom Rini        981
    Michal Simek    915
    Bin Meng        899
    Fabio Estevam   814
    Mike Frysinger  809
    Stephen Warren  726
    Kumar Gala      650
    York Sun        567
    Heiko Schocher  558
    Hans de Goede   548
    Nobuhiro Iwamatsu       470
    Peng Fan        451
    Jagan Teki      384
    Stefano Babic   360
    Joe Hershberger 360
         
  • some sanity checking and results:
    compare number of commits:
    $ awk 'BEGIN { FS = "\t" } { sum += $2 } END { print sum }' Authors/stage-5 
    44775
         
    $ git log --pretty=oneline 0b666f8..v2018.11-rc2 | wc -l 
    52974
         
    Urgh frown, sad smile
  • Find number of "significant" users, i. e. who is responsible for 90%, 95% or 99% of all submitted patches?
    $ awk 'BEGIN { FS="\t"; tot=44775; percent=90; limit = tot * percent / 100; } { cnt += $2; if (cnt > limit) { nextfile; } } END { print NR }' Authors/stage-5
    389
    $ awk 'BEGIN { FS="\t"; tot=44775; percent=95; limit = tot * percent / 100; } { cnt += $2; if (cnt > limit) { nextfile; } } END { print NR }' Authors/stage-5
    641
    $ awk 'BEGIN { FS="\t"; tot=44775; percent=99; limit = tot * percent / 100; } { cnt += $2; if (cnt > limit) { nextfile; } } END { print NR }' Authors/stage-5
    1403
         
         

Scripts and Results:

Copyright © 2002-2022 by DENX Software Engineering GmbH ImprintTerms & ConditionsPrivacyFeedback
This website is using cookies. More info. That's Fine