BuildProcess

Differences between revisions 1 and 2
Revision 1 as of 2008-01-14 16:44:01
Size: 5228
Editor: pD95888B3
Comment:
Revision 2 as of 2008-01-14 16:58:40
Size: 5244
Editor: pD95888B3
Comment:
Deletions are marked like this. Additions are marked like this.
Line 15: Line 15:
  The author argues to switch from a recursive build process to a plain master makefile that ''includes'' sub-projects makefiles, rather than to call 'make' recursive in sub-directories. He clearly proves that   The author argues to switch from a recursive build process to a plain master makefile that ''includes'' sub-projects makefiles, rather than to ''call 'make' recursive'' in sub-directories. He clearly proves that
Line 23: Line 23:
 * Eliminated bugs '''introduced''' by the common practice to use "recursive make".  * Eliminated bugs introduced by the common practice to use "recursive make".
Line 28: Line 28:
Right now (I'm using Ubuntu release gutsy), I suspect many packages are build in a "recursive make" style. This includes some very essential packages, e.g. APT, DPKG, and probably many others.[[BR]]
Once you know "recursive make" in the root of many bugs, you start wondering why your system doesn't crash twice as much.
Right now (I'm using Ubuntu release gutsy), I suspect many packages are build in a "recursive make"-style. This includes some very essential packages, e.g. APT, DPKG, and probably many others.[[BR]]
Once you know "recursive make" is the root of many bugs, you start wondering why your system doesn't crash twice as much.
Line 48: Line 48:
Right now, I'm having trouble with broken dependencies. APT is great if its database is clean, but once things go wrong you're off. Noone wants to remove hundreds of essential packages without the proposal of installing an upgraded version of these packages. Something is fundamentaly broken, not necessarily in APT itself, but in the whole distro. After reading the abovementioned paper and catch a glimpse of the makefiles of APT and DPKG, I suspect (among other reasons) one root of evil is the use of "recursive make". At the time of this writing, I'm having trouble with broken dependencies. APT is great if its database is clean, but once things go wrong you're off. Noone wants to remove hundreds of essential packages without the proposal of installing an upgraded version of these packages. Something is fundamentaly broken, not necessarily in APT itself, but in the whole distro. After reading the abovementioned paper and catch a glimpse of the makefiles of APT and DPKG, I suspect (among other reasons) one root of evil is the use of "recursive make".

Please check the status of this specification in Launchpad before editing it. If it is Approved, contact the Assignee or another knowledgeable person before making changes.BR If you are a native english speaker, please correct my pidgin english.

Proposal for inclusion in a common guideline for the software build process in Ubuntu and derivatives

Summary

Get rid of many hidden bugs. Enhance software maintainability. Let's rewrite all makefiles of the whole distro!BR Summary of [http://aegis.sourceforge.net/auug97.pdf Recursive Make Considered Harmful]:

  • The author argues to switch from a recursive build process to a plain master makefile that includes sub-projects makefiles, rather than to call 'make' recursive in sub-directories. He clearly proves that

  • many bugs are caused or hidden by the common (wrong) practice of using recursive makefiles.
  • software module dependencies are commonly tweaked, artificially left out, or falsely introduced, to fix what essentially comes from using 'make' recursively. The result is wrong software.

  • Using flat makefiles enhances maintainability, because dependencies will be correct.

Release Note

  • Many formerly hidden bugs found during the software build process.
  • Eliminated bugs introduced by the common practice to use "recursive make".
  • Corrected many dependencies, enhanced maintainability of source code.

Rationale

Right now (I'm using Ubuntu release gutsy), I suspect many packages are build in a "recursive make"-style. This includes some very essential packages, e.g. APT, DPKG, and probably many others.BR Once you know "recursive make" is the root of many bugs, you start wondering why your system doesn't crash twice as much.

Use Cases

Assumptions

  • "Recursive make"-style is common practice in software that make up Ubuntu and derivatives (I assume).
  • This assumption has to be approved by s/o who is more envolved.
  • As the paper mentioned above is only 10 years young, and usually things need about 20 years from academia to production, I assume this holds true for Ubuntu distros.
  • The paper was updated not long ago, about 10 years after it's first release. Why? Because "recursive make" is still common practice (This I know for sure).
  • Many of the software in the distros is much older than the paper.

Examples

The first two lines of the makefile of APT - this tool is essential for the consistency of the whole system - let me conclude APT is build in a "recursive make"-style:

# This is the top level make file for APT, it recurses to each lower
# level make file and runs it with the proper target

At the time of this writing, I'm having trouble with broken dependencies. APT is great if its database is clean, but once things go wrong you're off. Noone wants to remove hundreds of essential packages without the proposal of installing an upgraded version of these packages. Something is fundamentaly broken, not necessarily in APT itself, but in the whole distro. After reading the abovementioned paper and catch a glimpse of the makefiles of APT and DPKG, I suspect (among other reasons) one root of evil is the use of "recursive make".

Design

You can have subsections that better describe specific parts of the issue.

Implementation

This section should describe a plan of action (the "how") to implement the changes discussed. Could include subsections like:

UI Changes

No changes to the UI are required, except occasionally in developer build automation tools.

Code Changes

Code changes should include an overview of what needs to change, and in some cases even the specific details.

  • Makefiles
  • Interface defining files (for C/C++: header files)
  • Interface references in source files
  • Code changes resulting from bugs found by changing the build process
  • Code changes resulting from corrected dependencies

Migration

Include:

  • data migration, if any
  • redirects from old URLs to new ones, if any
  • how users will be pointed to the new way of doing things, if necessary.

Test/Demo Plan

It's important that we are able to test new features, and demonstrate them to users. Use this section to describe a short plan that anybody can follow that demonstrates the feature is working. This can then be used during CD testing, and to show off after release.

This need not be added or completed until the specification is nearing beta.

* Change a package sources build style and see if it reveals a bug.

Outstanding Issues

This should highlight any issues that should be addressed in further specifications, and not problems with the specification itself; since any specification with problems cannot be approved.

BoF agenda and discussion

Use this section to take notes during the BoF; if you keep it in the approved spec, use it for summarising what was discussed and note any options that were rejected.


CategorySpec

IdeaPool/Undecided/BuildProcess (last edited 2008-08-06 16:31:20 by localhost)