Name

Patrick "P. J." McDermott

Contact Information

Background

I am a 21-year-old undergraduate computer science student at the New Jersey Institute of Technology (New Jersey, United States) with plans to graduate in May. At the university, I have led a special interest group for GNU/Linux; organized events related to free software; and given workshops and tutorials on GNU/Linux, UNIX [1], Debian, and Git.

I use Debian GNU/Linux on my desktop, laptop, and server. My technical and theoretical interests include operating systems and distributions, package management, toolchains, hardware interfaces, embedded systems, networking, and graph theory.

Technical Skills

I am proficient or knowledgeable in numerous programming, markup, and formatting languages, including ISO C 89 and 99, groff (with the "man" macro set), POSIX make, Markdown, and UNIX shell. [2] I have about six years of experience in programming and over eight years of experience in Web design. Common design goals for my software projects include modularity, portability, and efficiency.

I am proficient with the use of Debian GNU/Linux and its tools. I have about one year of experience using Git, and I use it almost daily for software projects, coursework, etc.

I have some experience with Debian packaging, however I do not yet maintain any packages in the Debian archive. I am comfortable using mailing lists, IRC, and the Debian BTS.

Projects

Currently I am leading the development of a new multipurpose embedded operating system distribution. Notable software packages include Linux-libre, BusyBox, GCC, EGLIBC, and opkg (a lightweight package manager and frontend similar to dpkg and APT). For the project I designed a source package format [3], wrote a set of package building tools [4] (similar to dpkg and debhelper), and designed ways to configure and build the distribution for specific hardware and applications. We are now packaging software and building a cross toolchain [5] to port the system to its first target (an ARM Cortex-A8 CPU). In preparation for the port, I've identified circular build dependencies [6] and worked on methods to bootstrap the building (using package status overrides and simplified builds) and installation of packages for an architecture.

Previous projects on which I've worked include an implementation of Conway's Game of Life in C using curses [7], a peer-to-peer chat client written in C with a curses interface, and a small C library to read and write run control files [8].

Project Title

Bootstrappable Debian

Project Details

In Debian there are a number of build dependency cycles – sets of one or more source packages in which the building of each requires at least one binary package built from a member of the same set. Below are three examples of build dependency cycles:

When building a Debian system from scratch – e.g. to build a new Debian port, to update an older architecture, or to build packages for non-native architectures – these build dependency cycles must be broken. This is commonly done by building some packages in a "staged" form with minimal dependencies, e.g. by disabling links against some libraries or by providing information manually. With the staged binary package(s) built and installed, depending packages can be built and installed. Finally, the staged packages can be built normally.

The first part of this project is analyze build dependency cycles in Debian to determine how they can best be broken and to modify certain packages involved in such cycles to support staged bootstrap builds. New control fields Build-Depends-StageN will be added to the packages' debian/control files, and the debian/rules files will be modified to produce reduced/staged builds of packages depending on the value of the DEB_BUILD_OPTIONS environment variable.

Staged binary packages should be marked as such and not uploaded to the Debian archive. A marking solution is not yet finalized, but a new control field seems the obvious one. Also useful (especially for humans) could be a version string suffix or a new file extension (like "udeb" and "tdeb").

Individual packages can be tested using patched versions of Debian package management and building tools. To build a complete Debian system from scratch, however, requires cross-building at least the initial core set of packages.

...

Synopsis

This is a project to break build dependency cycles in Debian by modifying packages to support staged bootstrap builds.

Benefits to Debian

Building a Debian system from scratch – e.g. to port Debian to a new architecture – is currently very difficult due to cyclic build dependencies and the need to cross-build at least an initial set of packages. This project would make it easier to bootstrap new Debian ports, update older architectures, and build packages for non-native architectures (especially those for which packages might not natively buildable).

Deliverables

Project Schedule

TODO

Exams and Other Commitments

I have no exams or courses this summer. I graduate on May 15.

Other Summer Plans

I have no other plans (jobs, vacations, or the like) for the summer except to spend some time working on other free software. I can work full-time on this project.

Why Debian?

I am a proud user of Debian GNU/Linux, and I admire the Debian Project's infrastructure, commitment to quality, and attention to legal issues and user freedom.

Applications to Other Organizations

I am planning to apply to the GNU Project.

References

  1. http://www.pehjota.net/guides/shell-workshop/

  2. http://www.pehjota.net/resume.html

  3. http://specs.os.pehjota.net/source-package-format-1.0.html

  4. http://www.pehjota.net/projects/opkhelper/

  5. http://git.os.pehjota.net/notes/free-embedded-os.git/tree/temporary-bootstrap-builder-setup-cortexa8.txt

  6. http://git.os.pehjota.net/notes/free-embedded-os.git/tree/depgraphs/Build-Depends_system_simplified.png

  7. http://www.pehjota.net/projects/cgol/

  8. https://gitorious.org/librcio/librcio