Penguin
Note: You are viewing an old revision of this page. View the current version.

1. A split or divergence in the source code.

When SourceCode is forked, two or more groups, with different visions, develop the code to their own ends. The NetworkEffect is a powerful deterrent to forking, since halving the number of developers working on the source for a project more than halves the productivity of each group. In most (though not all) cases all but one of the forks eventually withers and dies, ironically leaving the remaining fork with a much more clearly defined vision.

Well-known examples include

  • GCC and egcs (egcs eventually became the new "official" gcc)
  • Mandrake and RedHat (I think Mandrake was originally RedHat with KDE?)
  • Emacs and XEmacs, both branches of which continue to thrive to this day.
  • XFree86 and XOrg, where an unpopular change to the licensing terms of the former caused a wholesale defection of developers, distributors and users to the latter.
  • More recently, the forking of cdrkit off from cdrtools, because of a licence change to the latter. It remains to be seen how this one will play out.
  • RPM and RPM5 - see http://www.linux.com/articles/114339

Some interesting analyses of the pros and cons of forking are:

See also OpenSource

2. A system call for creating a new process

see fork(2)

the fork system call is fun, it returns twice... once in each different process. it returns 0 to the child, and the pid of the child to the parent. Very funky :)