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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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: