[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Not-Forking: automation to avoid vendoring and whole-project forks

Not-Forking (https://lumosql.org/src/not-forking ) avoids duplicating the source code of one project
within another project, where the projects are external to each other. Not-forking avoids project-level
forking by automating change management in ways that version control systems such as Fossil, Git, or 
GitHub cannot. Not-Forking can track multiple upstreams, each with a different release schedule, 
VCS and human-readable version numbering/lettering system.

This could be relevant to Debian because:

1. Not-Forking may help address the Debian small-scale vendoring problem (https://lwn.net/Articles/836911/ )
2. Not-Forking may be useful to anyone creating Makefiles that assemble disparate codebases

There is no Debian package for Not-Forking yet, although there is an ebuild in the current release 0.3.1. 

Examples of the sorts of actions Not-Forking can take:

* check for new versions of all upstreams, doing comparisons of the human-readable release numbers
  rather than repo checkins or tags, where human-readable version numbers vary widely in their construction
* replace foo.c with bar.c in all cases (perhaps because we want to replace a library that has an identical
  API with a safer implementation)
* apply this patch to main.c of Upstream 0, but only in the case where we are also pulling in upstream1.c,
  but not if we are also using upstream2.c
* apply these non-patch changes to Upstream 0 main.c in the style of sed rather than patch, making it
  possible to merge trees that a VCS says are unmergable
* build with upstream1.c version 2, and upstream3.c version 3, both of which are ported to
  upstream 0's main.c version 5
* track changes in all upstreams, which may use arbitrary release mechanisms (Git, tarball, Fossil, other)
* cache all versions of all upstreams, so that a build system can step through a large matrix of versions
  of code quickly, perhaps for test/benchmark

Not-Forking was developed for the LumoSQL project, https://lumosql.org/src/lumosql .

Dan Shearer

Reply to: