Name Andreas Sommer
Background: I'm 24 years old and studying for my M.Sc. in Informatics at Technical University of Munich, soon entering the fourth and last semester. Before that, I did a dual Bachelor study, i.e. alternating in three month long phases between studying at DHBW Stuttgart and working in internships for Hewlett-Packard (that's a special study programme in Germany, btw). In my free time and also in my current work project, I am trying to get more into using and programming open source projects. While I started reporting bugs and solving "easy pickings" some years ago, I still would like to participate in something bigger. Own projects such as Site Deploy (includes Debian/Ubuntu packaging) or the recently created NSiege (simple benchmarking library for .NET) were/are a good start. I can imagine working in an open source flavored company later on, and also made plans to probably apply at Canonical (or honestly any company that does some cool software engineering with work from home office because I don't know where my girlfriend and me will move when she's finished her programme... see "Other summer plans").
Project title Virtual Image creation web interface
Project details: A web interface for building customized Debian images (e.g. for use in the cloud) shall be implemented, using grml-debootstrap for filesystem bootstrapping and a web framework like Django for the web application. It must be usable by persons without programming or deep technical background and allow selection of packages (or package groups as in tasksel) and other customizations (scripts, branding, patches to configuration files).
Synopsis: Web interface for creating customizable Debian images, using an image creation backend
Benefits to Debian For users: A user can create a personal template ("descriptor"), select the Debian version and then just download his personalized image. As an example, whenever I install Linux somewhere, I immediately install vim-full, change its settings to use 4 spaces instead of tabs etc., change root's shell to red, my shell to green, and so on. If implemented correctly, I can even select my old descriptor for Lenny, select the output version to Squeeze, and hit OK without (m)any changes. For companies and sysadmins: They might create a greater amount of images, e.g. for use in the cloud. Predefined package groups such as in tasksel will make it easy to create a Debian image for a specific purpose (e.g. web server or DB server appliance). VM configuration files (e.g. VirtualBox's .vbox files) can be attached to the download. Images for the same descriptor can be cached so they don't have to be recreated every time. For experimenters: It will be easy to create your own distribution, selecting different packages. For instance, wouldn't it be cool to have a minimal Debian with only XBMC running on a Raspberry Pi?
Deliverables: Backend library for creating Debian images (based on chroot and grml-debootstrap, can use Linux tools to pack chroot environment into an image), task queue running image creation, descriptor format (possibly JSON), web interface for defining descriptors (package selection, file patches, branding)
April 24 - May 13 [3 weeks] - Preparation and architecture design/discussion
- Get in touch with mentor about his view on the idea (what are his requirements? what to focus on? what use cases are imaginable? what is a must, what is nice-to-have?)
- Read up about and try SUSE Studio (what's its architecture? anything reusable?)
- Learn more about how grml-debootstrap creates images and how it can be used (CLI? language bindings?)
- Study how package information can be retrieved using apt bindings (and probably usage statistics from the "package survey" if such data should be available)
- With the detailed requirements at hand, write technical project proposal, including all technologies I want to use (e.g. Django)
- Discuss it with my mentor, change proposal accordingly
- Clarify miscellaneous questions (e.g. license to apply, project repository hosting, form of documentation such as Sphinx, relevant mailing lists to subscribe to, am I responsible for web design as well?)
- Discussion of time plan and additional deliverables (presentation?)
May 14 - May 20 [1 week] - Architecture and hands on debootstrap
- Start with the most important parts of the architecture as described in the "final" proposal
- Create projects and VCS repositories, try to reuse settings from my own projects (e.g. for Django)
- Split up components in a nice way (as applicable), in other words: Plan the fine-grained Python module architecture
Create an own Debian image and test it in VirtualBox (as mentioned, I've done this before for Xen but not with grml-*)
May 21 - May 25: My birthday, and then my girlfriend's birthday. Time to have some fun!
May 26 - June 3 [1 week, 1 day]
- Hacking begins!
- Create a very simple descriptor file for testing (e.g. only including the Debian distribution version)
- Create a parser for it
- Start implementing the creation of a minimal (non-customized) image using Python
June 4 - June 17 [2 weeks]
- Implement possibilities for customizing the image, add options to descriptor format accordingly
- Add unit tests therefore
Milestone: Image creation working with many of the defined features (i.e. customizations), report progress to mentor, clarify and misunderstandings in the implementation thus far
- Begin creating the web frontend and task queue
June 18 - July 1 [2 weeks]
- Continue implementing image customizations
- Implement backend library and web frontend as necessary
Milestone: Have at least package selection and a basic web frontend working
June 2 - July 22 [3 weeks]
- Finish backend and web frontend (no details here, this can't be planned)
July 23 - July 29 [2 weeks] - Testing
- Try on actual hardware and/or on a hypervisor
- Related bugfixing
Milestone: Backend and website working hand in hand on a server (I could run it on my VServer, for instance)
- Demo for mentor, talk about what's necessary for submission
July 30 - August 12 [2 weeks] - Finalization
- Discuss about remaining problems or bugs that turned up in the demo
- Optimizations (performance? caching?)
Milestone: Remaining bugs from last milestone fixed, documentation etc. all finished for submission
August 13 - August 20 [1 week, 1 day] - Pencils down buffer time
- If time remains
- Fix small bugs, clean up code
- Make things shiny (web design)
- Probably implement nice-to-have features
- Improve documentation
- If time remains
Exams and other commitments: No exams, finished with everything in my study programme except for the thesis. I am working on my master's thesis in the meantime, but I have always been good in planning my time and wouldn't apply if I didn't know that I can manage both without any hassle. In fact I'm already making great progress with my thesis (started in early February), and the deadline is far away in October. As I mentioned a "work project" before - I'm doing the thesis together with the company, but working independently, and apart from the thesis there won't be any time effort necessary for the company. You can contact me if you don't trust me on this
Other summer plans: "Are you getting married?" - Close enough, I'm moving to my girlfriend in Ireland at April 4th. There I will work on my thesis as mentioned above. No other big plans over the summer, as my girlfriend will be busy with exams and work.
Why Debian?: I like the way the whole OS works together. Packaging being done by a myriad of people around the world. It just works (okay, if I don't add "unstable" :D). And I'm using Debian-based distros for a long time, also for myself.
Are you applying for other projects in SoC? I did actually propose my own project idea to Ubuntu for the Bazaar VCS (mailing list thread), but unfortunately Ubuntu had some organizational issues and does not participate in GSoC this year. But I thought I would find another interesting project, and here I am. I choose this project because it caught my eye from the start - this is something I would actually use myself, and I can learn a lot from it. EDIT: Also applied for the Monkey web server project (Git protocol support).