= Google Summer of Code 2009 Ideas = '''IMPORTANT NOTE: Ubuntu is not participating in Summer Of Code 2009'''. Some general guidelines. These are ideas from several sources. In the first part you find some ideas where mentors are interested in mentoring this project, the second section is a selection of ideas from brainstorm.ubuntu.com, mostly requested by users. For the latter it is important that you find a sponsor, who can guide you through the SoC. Both students and mentors should subscribe to our SoC mailing list (https://lists.ubuntu.com/mailman/listinfo/ubuntu-soc). For each idea, please try to give the following information: * Have a mentor associated with the idea. * Give an estimate for the difficulty/complexity of the task (easy, medium, hard), so students can pick the appropriate level. Not every applicant is a cs student. * A description, plus pointers to more fine-grained information. * How does this project bring Ubuntu forward, how popular is this with users/developers? = Ideas proposed by mentors = == Foundations == === Add declarative diversions in dpkg === * '''Description''': To do diversion dpkg-divert(8) it is currently required to do them via the dpkg-divert program in the package maintainer scripts (preinst, postrm). This makes it more difficult to scan for diversions in a programmatic way (useful for e.g. automatic checking of conflicts or for applications like command-not-found). A declarative way allows tools to better extract this information and also should make diversions more robust. * '''Requirements''': Familiarity with dpkg, programming in C. * '''Mentor''': [[http://launchpad.net/~mvo|Michael Vogt]] === Split out of the aptitude resolver library === * '''Description''': The aptitude(8) package manager has its own resolver library. It would be nice to have this resolver library available outside of aptitude so that it can be used from bindings like python-apt and other package managers like update-manager, synaptic or gdebi. An interface for libapt needs to be implemented, so that it can load different resolvers (useful for people experimenting with different strategies and/or languages). * '''Requirements''': Familiarity with aptitude, apt, programming in C++. * '''Mentor''': [[http://launchpad.net/~mvo|Michael Vogt]] === Unittesting framework for libapt === * '''Description''': Add a unittest framework to libapt/python-apt to make refactoring of the codebase easier. While some tests exist for libapt it would be good to have a more complete test coverage via a unittest framework. Part of the job is to evaluate and pick a good one (e.g. cppunit) and then to implement unittest and regression tests for the classes in the code, refactoring as needed. * '''Requirements''': Familiarity with C++/unit-testing/apt * '''Mentor''': [[http://launchpad.net/~mvo|Michael Vogt]] === Implementation of Versioned Provides === * '''Description''': dpkg allows packages to provide a package/name, which is used for several things (providing of and depending on a virtual package, transitioning to a new package name). The implementation is currently lacking version information in provides. This information could be used for several things: * Versions are currently expressed by alternatives of different names (java2-runtime | java5-runtime | java6-runtime), which become cumbersome when many versions are used. It would simplify things if a dependency on a versioned provide could be specified (java-runtime (>= 5). * Upstream packaging systems start to provide their own dependency systems (mostly based on modules). These use their own names and maybe version numbers. A packaging helper could be used to map between upstream module names and Ubuntu package names. * '''Difficulty''': ambitious === Unittesting framework for installation and upgrade of packages using python packaging helpers === * '''Description''': Python packaging helpers for python related packages are used to package python software in a way that is less dependent on a specific python version, with the consequence that a package is only usable after the packaging helpers have done their work. To ensure the robustness of these tools, write a test framework which supports these kind of tests. Write a basic set of tests which allow testing of installation, upgrade and removal of single packages, package sets, installation and removal of python versions, and upgrade of the default python version. * '''Requirements''': Knowledge of dpkg/apt-get package management operations, Python, PyUnit (unit test framework for Python) * '''Mentor''': [[http://launchpad.net/~doko|Matthias Klose]] === sreadahead for non-SSD disks === * '''Description''': The sreadahead alternative to readahead works very well for SSD, but not for regular HDD disks. However given that the profiling is much better (ftrace-based, not inotify-based), and ideally we'd just like one solution, it would be ideal if it could work just as well as readahead for HDD disks. * '''Requirements''': C programming skills, interest in the kernel, good debugging skills * '''Mentor''': [[http://launchpad.net/~scott/|Scott James Remnant]] === Improve sreadahead tracing === * '''Description''': The sreadahead tracer is already pretty good, it uses ftrace to trace open system calls then identifies blocks still in the page cache on completion. There is still room for improvement though, in particular weeding out files opened for writing, and not losing information about files flushed from the page cache before the boot completes. * '''Requirements''': C programming skills, interest in the kernel, good debugging skills * '''Mentor''': [[http://launchpad.net/~scott/|Scott James Remnant]] === Improve nautilus startup time === * '''Description''': The nautilus file manager has a very long startup time (order of many seconds); we'd like to improve that. The project would be to trace the software, understand where time is being taken up (even after the main loop has been entered), and plan on fixing whatever is possible. * '''Requirements''': C programming skills, GNOME platform, strong debugging skills * '''Mentor''': [[http://launchpad.net/~scott/|Scott James Remnant]] === Improve gnome-panel startup time === * '''Description''': The GNOME Panel has a very long startup time (order of many seconds); we'd like to improve that. The project would be to trace the software, understand where time is being taken up (even after the main loop has been entered), and plan on fixing whatever is possible. * '''Requirements''': C programming skills, GNOME platform, strong debugging skills * '''Mentor''': [[http://launchpad.net/~scott/|Scott James Remnant]] === Better device manager === * '''Description''': Write a decent device manager that shows all connected devices in a hierarchial fashion, including a user-friendly summary and detailed property information. Ideally this would allow referencing to the driver being used, and even allow changes to the drivers. * '''Requirements''': C and Python programming skills, D-Bus knowledge, udev and HAL knowledge * '''Mentor''': [[http://launchpad.net/~scott/|Scott James Remnant]] == Server == === Integrating OpenNebula and Eucalyptus in Ubuntu 9.10 === * '''Description''': Both [[http://www.opennebula.org/|OpenNebula ]]and the [[http://eucalyptus.cs.ucsb.edu/ | Eucalyptus]] cloud toolkit will be [[http://warma.dk/blog/article/96/ | included in Ubuntu 9.04]]. These two software packages can complement each other to provide a complete solution for building Infrastructure-as-a-Service clouds and, in fact, the Server edition of Ubuntu 9.10 (Karmic Koala) [[https://lists.ubuntu.com/archives/ubuntu-devel-announce/2009-February/000536.html | has been announced to be a very "cloudy" release]]. An integration between !OpenNebula and Eucalyptus is already in the works, and the goal of this project would be to contribute to this integration specifically with Ubuntu 9.10 in mind (which will conveniently be released 1.5 months after GSoC ends). This project would involve (1) adding a Eucalyptus Cluster Controller WS interface to !OpenNebula (so it can be used as an optional virtual infrastructure management backend to Eucalyptus with little or no changes to the rest of Eucalyptus) and (2) creating packages (and making necessary modifications to the Eucalyptus and !OpenNebula packages) to allow users the possibility of installing either the default Eucalyptus Cluster Controller or an "!OpenNebula Cluster Controller". * '''Requirements''': Some familiarity with !OpenNebula and Eucalyptus is preferred, but not strictly necessary. Familiarity with Debian/Ubuntu packaging would be a plus. * '''Dificulty''': Medium. This project will require a fair amount of on-the-job training on how !OpenNebula and Eucalyptus work. * '''Mentors''': [[mailto:soren@ubuntu.com | Soren Hansen]] (Ubuntu) and [[mailto:rubensm@dacya.ucm.es | Ruben S. Montero]] (!OpenNebula). If you need more information, please contact both. === Integrating FreeIPA in Ubuntu 9.10 === [[http://freeipa.org/|FreeIPA]] is an integrated security information management solution combining Linux (Fedora), Fedora Directory Server, MIT Kerberos, NTP, DNS. It consists of a web interface and command-line administration tools. Several projects can be worked on to provide FreeIPA in Ubuntu: ==== Package freeipa server components ==== * '''Description''': * Add support for openldap as the directory service: FreeIPA uses the Fedora Directory Service by default. Adding support for openldap (which is the supported ldap server in Ubuntu) is necessary. There are some modules written in C that may need to be ported to openldap. * Provide a freeipa-server package: installing this package will result in a fully working FreeIPA server with openldap, MIT Kerberos, NTP and DNS working and configured to work together as a single FreeIPA environment. The ipa-server installations script (ipa-server-install) is written in python and requires some modification to make them compatible with Ubuntu. * '''Requirements''': debian packaging, python, C. * '''Difficulty''': Medium. * '''Mentor''': [[http://launchpad.net/~mathiaz|Mathias Gug]] ==== Package freeipa client components ==== * '''Description''': This project focuses on improving the workflow to join an newly installed Ubuntu system to a FreeIPA Ubuntu environment. * Provide a freeipa-client package: installing this package will configure the system to be part of the FreeIPA environment. The ipa-client installation scripts written in Python may need to be adapted to make it work for an Ubuntu system. * '''Mentor''': [[http://launchpad.net/~mathiaz|Mathias Gug]] * '''Requirements''': debian packaging, python. * '''Difficulty''': Medium. === Integrate Cobbler into Ubuntu === Cobbler is a project developed by Red Hat implementing a provisioning server. The spec describes the work needed to a) get Cobbler into Ubuntu and b) get Ubuntu support into Cobbler. For b) there has been [[https://fedorahosted.org/cobbler/wiki/DebianDeployment|some work done upstream]] that needs to be packaged and integrated into Ubuntu. Make an assessment of the work that has been done already in upstream Cobbler and complete it, this will require [[http://michaeldehaan.net/2008/09/15/calling-all-debianubuntu-hackers/|talking to upstream]]. Any work done in this area must be submitted to the Cobbler project. Package the upstream Cobbler (with Debian/Ubuntu support) in Ubuntu in a manner that is easily deployable by Ubuntu Server users. * '''Upstream Project''': https://fedorahosted.org/cobbler/ * '''Specification''': https://blueprints.edge.launchpad.net/ubuntu/+spec/cobbler * '''Requirements''': Knowledge of Debian/Ubuntu packaging * '''Dificulty''': Medium * '''Mentors''': [[mailto:soren@ubuntu.com | Soren Hansen]] === Make VMBuilder create ISO's and USB sticks === VMBuilder was originally created to build virtual machines in a snap. This involves building a complete filesystem for the guest vm and then converting it to the appropriate format. This is very close to what needs to be done to build live CD's or bootable USB disks. Implement the missing bits (different output formats and do whatever it takes to make the USB stick bootable, etc.) * '''Upstream Project''': https://launchpad.net/VMBuilder/ * '''Specification''': ? * '''Requirements''': Medium python skills, some knowledge of partitioning, and filesystems. * '''Dificulty''': Medium * '''Mentors''': [[mailto:soren@ubuntu.com | Soren Hansen]] == Desktop == == Quality == === Desktop test automation === * '''Description:''' The desktop test automation framework for Gnome is now fairly mature thanks to [[http://ldtp.freedesktop.org/wiki/|LDTP]] and the [[https://wiki.ubuntu.com/Testing/Automation/Desktop|Ubuntu]]/[[http://live.gnome.org/DesktopTesting|Gnome]] desktop testing projects, however there is still a need to greatly extend the test coverage. This project involves implementing broad automated test coverage for a single desktop application. The student would select a common application from Ubuntu main and use the [[https://edge.launchpad.net/ubuntu-desktop-testing|desktop testing framework]] to write a suite of tests. Inspiration can be taken from the [[http://testcases.qa.ubuntu.com/Applications|manual application tests in the test cases wiki]]. We have capacity to mentor two students working on one application each. * '''Requirements:''' Experience with python programming. * '''Mentors:''' [[http://ubuntutesting.wordpress.com/|Ara Pulido]] (Ubuntu) and [[http://nagappanal.blogspot.com/|Nagappan Alagappan]] (LDTP) = Ideas proposed by students = Please add your idea and contact here. Try to find a mentor for your project! == Desktop == === Restoring the bootloader by Ubuntu installation CD === * '''Origin''': http://brainstorm.ubuntu.com/idea/1242/ * '''Student''': [[https://launchpad.net/~yghannam7388|Yazen Ghannam]] * '''Mentor''': To Be Determined. Please add yourself if you would like to mentor. * '''Description''': There should be a way to restore Grub from the Ubuntu installation CD instead of having to boot into a LiveCD and doing everything from the terminal. Here's the work done so far: 1. I've tried using Super Grub Disk by adding it to the Live CD and booting it with Isolinux. Since Grub itself is a bootloader this didn't work well. 2. Since memtest86+ can be loaded by Isolinux, I thought about getting a binary version of Grub. 3. I found Grub4DOS which is almost exactly like Grub but they package it in a convenient executable. 4. I added Grub4DOS to the Live CD and created an entry for it in the menu.cfg for Isolinux. 5. I can boot into grub from the live cd now and Grub4Dos can automatically find /boot/grub/menu.lst on my Ubuntu partion. 6. I can enter the grub commandline and follow the step to reinstall grub mentioned on the Ubuntu Wiki. Things that don't work yet but should (and background info): 1. Grub4Dos cannot find the menu.lst located on the Live CD but it can find the one located on the Ubuntu partition. Grub4Dos looks for a menu.lst and starts in its local directory, but I cannot make it find the one that comes with it. When I make a CD with Grub4Dos on it only using the grldr bootloader, everything works fine. So I believe the issue to be with Isolinux. 2. Once I can get Grub4Dos to find the right menu.lst, all that is left is writing a menu with the the options and commands we want. For example, a five option menu: 1. Automatic reinstall (used if only one linux partition is found), 2. Manual reinstall (used if two or more linux partitions are found, user selects which to use), 3. Boot Partition, 4. Back to Main Menu, 5. Reboot/Shutdown. 3. One solution to Grub4Dos not finding the menu.lst is to add the commands we need to the the /boot/grub/menu.lst. We can also restructure it with submenus. For example, memtest86+ and Reinstall Grub both under an "Ubuntu Utilities" menu. === Clean up preferences and administration === * '''Origin''': http://brainstorm.ubuntu.com/idea/80/ * '''Student''': [[https://launchpad.net/~yghannam7388|Yazen Ghannam]] * '''Mentor''': To Be Determined. Please add yourself if you would like to mentor. * '''Description''': 1. Restructure Menus: Grouping some of the icons together in more specific menus (like Fedora) would be a good start. For example, Synaptic Package Manager, Software Sources, and Update Manager can all be filed under a "Software" menu within the Administration menu. Another grouping might be to put Keyboard, SCIM Input, and Mouse all under an "Input Devices" menu. 2. Merge various tools: After grouping, we could try and see if some tools may be merged together, for example Printing and Default Printer and possibly others. === Improved file/folder sharing experience === * '''Origin''': http://brainstorm.ubuntu.com/idea/403/, https://wiki.ubuntu.com/EasyFileSharing * '''Student''': [[https://launchpad.net/~yghannam7388|Yazen Ghannam]] * '''Mentor''': To Be Determined. Please add yourself if you would like to mentor. * '''Description''': 1. There is a package called "system-config-samba" that is a GUI for SAMBA shares but it is not installed by default with SAMBA and is not supported. This package, or one similar to it, should be installed by default, supported and integrated into Ubuntu's network interface. 2. There should be a central "Network Control Panel" similar to the one found in Vista that should have the ability to differentiate between a private and public network and disable shares accordingly, and other settings related to the network and file/print sharing. 3. When sharing is turned on, SAMBA and all other required packages should be downloaded automatically (similar to hardware drivers) and launch a GUI for initial configuration. = Ideas from Brainstorm = '''Also see [[https://wiki.ubuntu.com/GoogleSoC2009/Ideas/Brainstorm|these ideas]] gathered from Brainstorm.'''