As a second-year undergraduate student studying Information Technology at Birkbeck, University of London, I have been doing coursework on Debian Linux for over two years and have been amazed at this operating system. It is the most tweakable Linux distribution, ideal for advanced hardcore users.
I have obtained a fair amount of knowledge on Debian packaging and basic understanding of toolchain building and cross-building, as well as strong skills in shell scripting in make, bash and perl.
I am a self-starter and fast-learner. I am studying Multiarch, and hope to get up to speed within a few days. I am also interested in learning more in-depth about how the Debian distribution is created, how cross-toolchains are built, how packaging works, how multiarch works, and how compiler build paths work, which is not covered in my coursework at school.
Being a careful, detail-oriented person, I enjoy analyzing code tidbits. I am passionate about the Debian Linux project, and would like to be part of the community.
Enable Multiarch Cross-Toolchains in the Debian Build System
With the prevalence of ARM devices, cross-toolchains have become increasingly helpful and important. Many developers want cross-compiling to work easily on Debian systems, which requires the availability of cross-toolchains and the ability to install cross-dependencies before building a package. Debian supports multiarch and cross-toolchains, but it does not yet have multiarch cross-toolchains or cross-toolchains in the main distribution.
The emdebian project provides precompiled binaries for several architectures outside the main Debian archive. For some of them, it is not possible or sensible to compile natively. Currently, it is not possible to build and distribute these toolchains within Debian itself, but having the toolchains natively in the distribution would make things a lot easier. Building these packages in the archive, with autobuilders, requires cross-architecture build dependencies to be specifiable. For cross-building packages in general, the library dependencies of the package need to be satisfied for the DEB_HOST_ARCH architecture and the tool dependencies of the package need to be satisfied for the DEB_BUILD_ARCH architecture. This recently became possible with the development of the new multiarch feature, which solves the dependencies between different architectures. Prior to multiarch, only packages for the machine architecture can be installed, so dpkg-cross is used to convert library and -dev packages to be of arch all, and move library and header files to a co-installable path under /usr/<triplet>/. Multiarch removes the need to create these -cross packages by having standard packages install to /usr/lib/<triplet> and /usr/include/<triplet>, such that they are co-installable.
The layout for libraries used by multiarch is similar to that used by dpkg-cross in converted packages, and both share the goal of making libraries for different architectures co-installable, so it makes sense to integrate both. Enabling multiarch cross-toolchains natively in Debian will significantly simplify the cross-compiling process and thus reduce developers' work, as it brings many simple pieces together to make a complex whole.
This project will consist of three parts:
1) demonstrate that this build mechanism works natively within Debian;
2) ensure that the cross-toolchain produced from this mechanism will search the new multiarch libraries and header paths by default, so that things built with it will build successfully;
3) merge this mechanism into the central Debian build system, where cross-arch dependencies still need to be resolved.
The goal of this project is to enable multiarch cross-toolchains within Debian natively, which will help simplify cross-compiling.
Benefits to Debian
Many developers want cross-compiling to work easily on Debian systems, which requires the availability of cross-toolchains and the ability to install cross-dependencies before building a package. Debian supports multiarch and cross-toolchains, but it does not yet have multiarch cross-toolchains or cross-toolchains in the main distribution. Currently, it is not possible to build and distribute these toolchains within Debian itself. In this project, I hope to add multiarch cross-toolchains natively to Debian, which will help simplify the cross-compiling process and reduce developers' work.
The final deliverables would consist of:
- Cross-toolchain packages using cross-arch dependencies, building against multiarched libraries, and defaulting to doing cross-builds using multiarch paths.
- Tools changes to support this mechanism in the Debian archive
- Documentation on changes made
I'm planning to devote 4 to 5 hours each day during the GSoC period to this project on average. I'm certainly willing to make extra efforts if the project is behind schedule.
Now - May 20 (preparation):
- Get to know the community
- Discuss the mechanism details with my mentor
- Set up a technical environment and install necessary tools
- Learn more about Debian packaging, toolchain building, cross-building, multiarch, make, bash and perl
May 21- June 12 (official coding period starts):
- Demonstrate that multiarch cross-toolchains mechanism works natively within Debian
- Create cross-toolchain packages using cross-arch dependencies, building against multiarched libraries, and defaulting to doing cross-builds using multiarch paths
- Document the details
June 13- July 9:
- Test the cross-toolchain pachages produced from this mechanism
- Make sure it will search the new multiarch libraries and header paths by default, so that things built with it will build correctly
- Document the results and changes
- Submit mid-term evaluation
July 10 - July 31:
- Further testing; fix bugs
- Research issues with cross-arch dependencies
- Change tools as necessary to support this mechanism in the Debian archive
August 1 - August 23:
- Merge the multiarch cross tool-chains into the Debian systems natively
- Test and fix bugs
- Refine documentation
- Submit final evaluation
Exams and other commitments
I will have a few exams during the GSoC period, but I don't think it will create any conflict or interruption.
Other summer plans
I will not have any other summer plans during GSoC period.
First of all, the idea itself intrigues me a lot. I believe this project would be useful towards the simplification of cross-compiling on Debian systems. Secondly, Debian is my favorite Linux distribution. I admire the open spirit of the Debian project and would be proud of be part of its community.
Are you applying for other projects in SoC?
No. No other project interests me more than this one, and I would like to make myself totally committed to this project.