Student Application Template
Name Tyler Stachecki
Contact/Email: tstache1@cs.binghamton.edu
Background: I'm currently a 22 year old Ph D. candidate at Binghamton University, State University of New York (home to one of the official Debian mirrors)! My primary research focus is distributed computing, with my current work focusing on reducing energy consumption of Hadoop clusters. Outside of research, my most recent accomplishment was extending the Marss86 cycle-accurate simulator to support dynamic voltage and frequency scaling (DVFS).
- My interest in this particular project extends from one of my odd, yet interesting, "hobbies": working on a source-based distribution that I've been developing on the side for the past few years. What initially started as a small RPM-based Linux from Scratch (LFS) "fork" has now evolved into a relatively stable, minimalistic source-based distribution that would make even the most aggressive CFLAG-applying Gentoo ricer drool with jealousy. Unfortunately, due a lack of both time and sanity (but mostly sanity), I doubt the project will never see the light of day in terms of complete stability or usability. Nevertheless, having single-handily architected a Linux distribution from the ground up, as hacky as it is, I became quite familiar with package mangers, chroot-ed build environments, and every compiler and linker error known to man.
- Thus, when I saw the project idea to include clang support for build services on Debian's SoC wiki, I knew it was the project for me. Having suffered severe head trauma as a result of banging my head on the keyboard due to an quirky build environment for quite some time now, I'm confident in my ability to hurdle over any roadblocks may arise over the course of this project. Furthermore, I'm very familiar with "the Debian way" of doing things, as I've been using Debian for my (stable) work environment ever since I began my undergraduate degree. Lastly, I have had prior exposure to clang and LLVM and I'm aware of their weaknesses (i.e., the linker, LLVM's static analysis and register allocation, etc.).
Project title: clang support for build services
Project details: Allow the (entire) Debian archive to be built with compilers other than gcc, thereby improving the robustness of Debian's package scripts. In particular, this project focuses on building the archive with clang/LLVM, which aims to have the added effect of increasing binary and library performance across the entire Debian archive.
Synopsis: Build the Debian archive with a compiler other than gcc.
Benefits to Debian:
- clang is much faster and consumes less memory than gcc.
- clang generates much more informative warning and error messages.
- clang is licensed under BSD, which is much less restrictive than GPL.
- clang conforms to the C++ standard better than gcc does.
- clang is extremely well documented (especially the APIs), and has an overall much cleaner design than gcc. Why does this matter? For new contributors, gcc's "rotted" code base has a much steeper learning curve than LLVM. For developers wishing to extend LLVM, it's interfaces are much more reusable and documented than gcc's. For Debian, it means less of a reliance on GNU.
But, most important of all (in my opinion), clang in catching up to gcc in terms of the performance of generated code (it's not quite there yet, however)! In other words, allowing Debian to be compiled successfully with clang might soon result an additional performance boost for the entire Debian operating system. Why? Because of the rotted codebase, gcc developers have had a much more difficult time implementing features such as link-time optimization, whereas the LLVM developers has planned for link-time optimization support from the beginning. The fact that the LLVM code base is so much cleaner allows the developers to be more productive and create optimization passes that result in better generated code. Currently, LLVM lags behind gcc in terms of static optimization and register allocation, and thus the generated code tends to be slower, but I expect the tables to turn in the near future.
Deliverables:
- A flexible interface that allows the user to select a compiler (not limited to clang/gcc) to be used with Debian build services.
- Integration of clang (and generic support for other compilers?) into Debian build services in a manner that is as seamless and unobstrusive as possible
- And last, but not least, the ability to build a large majority, if not all, of the Debian archive with clang/LLVM.
Project schedule: It's hard to put a timeline on this as really unexpected and quirky things are the norm with this kind of project, but I've put some consideration into it and would like to adhere to this schedule as tightly as possible (advancing forward where possible). My plan is to finish compiler selection/build integration as early as possible (perhaps leaving too little room for myself!) so I can spend most of the time on getting the entire Debian archive to compile with clang. I'd also like to have some tangible, positive results before the midterm period.
- May 12-May 18: Still somewhat busy externally, but I will use the time to divulge in the gory details of the build services. Become familiar with what I will be playing with for the next couple months!
- May 19-May 20: Research how to best implement the clang/generic compiler selection interface for Debian and come up with a proposal. If time permits, begin working on a rough implementation.
- May 21-23: [GSoC START]: Propose implementation to Sylvestre. Modify or continue working on it as necessary.
- May 24-June 1: Modify Debian build services so that at least a few (previously problematic) packages compile. Study Sylvestre's previous work/results/logs. Determine common problems and devise solutions. Work on tackling the biggest/most common build problems.
- June 2-June 8: Have a more concrete strategy as to how to best proceed with the summer. Continually build packages with clang and attempt to increase success rates as much as possible before the interm date. Get package compilation success rates in presentable form.
- June 9: [MIDTERM]: Deliver tangible package compilation results to Sylvestre, discuss, and take suggestions as to how to proceed.
- June 9-30: Continue to improve rebuild results. Experiment with other architectures (x86, ...?) once x86_64 has a high success rate.
- August 1-14: Slack time. Either continue improving rebuild results, or invest the extra time into extras. Extras may include experimenting with upcoming versions of clang/LLVM to determine future problems, adding a column to the buildd pages, or something else that comes up over the course of the summer.
Exams and other commitments: None to speak of.
Other summer plans: Plans? What plans?
Why Debian?: As I've said before, Debian has been my stable work environment for quite some time now. Not only that, but it is also the distribution of choice for my university. It would be a very rewarding experience to spend my summer enhancing the quality of not only the package build scripts, but the binaries and libraries that form every Debian installation.
Are you applying for other projects in SoC?: As of now, I do not plan to apply to any other projects in SoC. I may decide to apply to other projects at a later time, in which case I will update this wiki page.