This is a place to collect ideas for people looking for a way to help illumos, and serve as a starting point for Google Summer of Code.
Please remember, projects you suggest need to list possible mentors, who should be people with time and willingness to help new contributors. Whether you wish to base your proposal on one of the below suggestions or offer an original one, you must identify a mentor via community channels (the developer mailing list and #illumos IRC channel) and spend time with that person discussing the project before applying. Names on the below list are IRC handles.
Please note that we are still updating the list of mentors for these projects. Many projects do not yet have listed mentors for completely mundane and banal reasons. If a project interests you, the best way to find out about potential mentors is to engage the community via the mailing list and IRC.
Breadcrumbs: only a handful of these projects include references to relevant source code, but resourceful students will be able to learn important fundamentals about navigating source by looking at these. Please spend some time learning how to identify relevant source, recent changes and associated issues, and open issues. Doing that kind of background work reflects well on applicants, even at the stage of discussing project ideas.
We do not attempt to assess difficulty for projects, as this is highly dependent on skills and previous experience. Students are therefore expected to consider how well they match the listed prerequisites and to discuss their level of subject matter expertise with potential mentors in preparing applications.
The following mentors are available for all-around mentoring. If there's no name next to the project or if you have an original idea but no other point of contact, please engage contacts from this list.
|Win. message DLL compiler||Triskelios||C, some Windows||The CIFS server needs one little "message DLL", which is not a DLL in the normal sense, as it contains no machine code, only messages. We'd like a tool that can build this file from a text input.|
|Scalable libc malloc implementation||Triskelios||C||New malloc(3) implementation in libc that performs competitively in multithreaded situations with libumem, dlmalloc, and jemalloc. Must include benchmark results and integration. Talk to trisk who has ported nmalloc ( https://hg.openindiana.org/projects/illumos/nmalloc/ )|
|Rearchitect and replace interrupt distribution||Triskelios||C, interrupt scheduling, practical experience of interrupt handling and kernel internals||Rearchitect and replace intrd(1m), with an in-kernel C implementation. Have a look at the current implementation at: https://www.illumos.org/projects/illumos-gate/repository/show/usr/src/cmd/intrd (C impl. skeleton at https://hg.openindiana.org/projects/illumos/intrd/ )|
|libc POSIX 2008 enhancements||gdamore||C, standards-reading||Update some interfaces in libc to support POSIX 2008, especially adding support for thread-safe interfaces for locale handling.|
|localedef/libc locale features||gdamore||C||localedef and libc need some enhancements to support required features in certain locales, such as support for "plu "pluggable" character type names (this is required for China). This is related to a recent change:https://www.illumos.org/projects/illumos-gate/repository/revisions/13591|
|ND RDNSS support||C, IPv6, standards-reading|
Add ND RDNSS support to Illumos IPv6 stack, RFC 5006/6106 (see https://www.illumos.org/issues/2338)
|Improve Syslog||gdamore||C, TLS, NetBSD useful||Enhance our syslogd to support more modern details. See RFC 5424, 5425 for example. This was done for NetBSD back in 2008, so having the same work done for illumos would be very useful. We would like this to be a full "in-tree" replacement for our native syslogd, rather than just importing rsyslog or syslog-ng, which are less desirable both as non-integrated systems, and have licensing challenges that may make them unacceptable for some illumos downstreams.|
|illumos performance tools||C, performance||port some popular Linux performance tools to illumos, eg htop, dstat, free, netstat (who has this socket open)|
|userland post-mortem||DTrace, C, debuggers, systems programming||When you have a target process, ring buffer added to the core dump so you can run DTrace on it. Related to lastwords.d|
|IDT DTrace provider||DTrace, C, systems programming||A DTrace provider that operates by interposing on the interrupt descriptor table (IDT), not dissimilar to the mechanism used by the SPARC-based trapstat.|
|Node.js memory profiling||Node.js, MDB, performance analysis||New MDB dcmds for understanding memory usage in Node.js apps based on a core dump.|
|MDB support for new kernel lock manager + NFS||C, MDB, filesystem internals, kernel development||Replace closed MDB dcmds for NFS+KLM with a re-write for the the recently re-written lock manager, the webrev for which is available at: https://github.com/dan-kruchinin/illumos-gate/tree/lockmgr|
Embedding mdb modules in binaries
|rmustacc||C, MDB, ELF/executable formats, user-level core dump mechanics||One of the current challenges that we have is that it is hard to ensure that you have the right version of a dmod for a language runtime for example, see node.js. This project will involve developing a way to glom a dmod into a binary. Make sure that it is included inside of a dump, and that mdb can find it when it runs on said core after the fact.|
|Via Nano/Eden Support||C, system architecture, x86||Adapt our x86 support to support the latest Via processors, useful for very low power systems. For a bonus, |
provide enhanced support for Via features like PadLock (Via's security technology).
|Limited per-zone drivers support||gdamore||C, OS internals, device drivers||There are some classes of kernel mode components like certain drivers that interact with the rest of the kernel only through well defined interfaces and do not modify global kernel state on their own. It is possible for this class of drivers to service only a subset of processes (e.g. from a zone). Kernel would be read-only to this drivers so they won't affect global stability and they would be mapped only in the processes from a zone, so a panic() would only crash a zone. This would allow us to have support for branded zones (even 3rd party) that don't have system-wide effects and would also simplify writing drivers.|
|Audio subsystems enhancements||gdamore, Triskelios||C, basic OS internals and/or device drivers||Lots of ideas here... moving audio streams from one device to another, more flexible mixing options, etc. Boomer 2 deliverables that were never worked on. (Ask gdamore.)|
|Open Source version(s) of certain drivers (cadp)||gdamore||C, device drivers||New device drivers (possibly ported from a licence-compatible implementation), tested and integrated into illumos.|
|Device driver porting guide||gdamore||C, kernel API(both illumos & foreign), technical writing||Write a porting guide to assist developers porting one or more types of device driver from Linux, BSD, or Windows to illumos.|
|Broadcom WiFi driver||gdamore||C, device drivers||There is a reverse engineered bcm wifi driver on Linux, and perhaps BSD. This would open illumos up to a wider range of laptops without relying on the NDIS shim.|
|DRI with KMS support for Intel graphics||gdamore||C, device drivers||A new kernel Direct Rendering Manager driver with support for mode-setting (KMS) on Intel graphics. Newer X drivers require KMS. It already exists on Linux, and some work is in progress for BSDs. Ongoing work for illumos can be found on github https://github.com/raichoo/illumos-gate/tree/kms|
|Port OpenBSD's backported Intel graphics support to the older DRI||C, device drivers||OpenBSD has a backport of functionality from newer Intel X server drivers on top on a pre-KMS DRM. This can be leveraged to support newer chipsets without porting a completely new DRM with KMS.|
|Bluetooth support||C, device drivers, reading standards||Add Bluetooth stack and support for mouse profile, possibly based on prototype port from NetBSD. See https://www.illumos.org/issues/2267 for more info.|
|Hardware Watchdog Drivers|
C, device drivers, reading standards, porting
|Add support for hardware watchdog drivers, for advanced motherboards to be able to employ hardware reboot of hung systems. Possibly, port (or learn from) the Linux watchdog collection, and tie this in with bmc-watchdog and related FreeIPMI utilities in illumos.|
|Hardware Sensor Drivers|
C, device drivers, reading standards, porting
|Add support for monitoring of system temperatures, fan speeds and other data provided by hardware sensors on most of the motherboards sold in the past decade or more. LM-Sensors project for Linux is a good start, and a worthy upstream (to allow future resyncs in order to get new drivers).|
|Extend "radeon" video driver support to APU processors||C, device drivers, reading standards||illumos includes some support for AMD/ATI Radeon video cards as part of its driver subsystem as well as an X11 rendering driver. Some time ago new devices of this brand were released, AMD APUs, which combine a CPU and several graphics cores in one chip. These are now popular in notebooks, but are not recognized by the drivers which exist in illumos today (so the video works as generic VESA). Goal of this quest is to add at least basic support for this video hardware, including the ability to suspend it (so the notebook can go to sleep and resume – today attempts to suspend hang such system). Bonus points for 3D acceleration and other pretty video features.|
|Update net80211 stack||C, device drivers, 802.11 standards, BSD net80211 stack||Update the WiFi stack to make it easier to port drivers from BSDs. Align the basic stack with BSDs so that work is limited to lower-level interfaces. This requires a degree|
|NTFS and/or exFAT support||C, filesystem internals||Reliable kernel-mode drivers for NTFS (v3.1) and/or exFAT filesystems, under a compatible licence.|
|pcfs||e^ipi||C, filesystem internals||Replacement pcfs module for reading FAT32/vfat filesystems. Port from OSX or xBSD (or any other license compatible OS). Start with the existing implementation at:https://www.illumos.org/projects/illumos-gate/repository/show/usr/src/uts/common/fs/pcfs|
|GVFS module for smbfs||C, Gnome app. dev.||Implement a new GVFS module using smbfs. Can study the current SMB/Samba module for ideas.|
|Port ext4||C, filesystems||Write a kernel implementation (without copying GPL code!) that can be used to mount Linux ext4 filesystems in illumos, possibly based on the existing ext3 driver.|
|unionfs||e^ipi||C, filesystems||kernel module, preferably as an extension to loopback (lofs) that returns the union of the filesystem and the point it's mounted over. Much like Linux & FreeBSD deliver today through unionfs|
|ZFS ARC scalability||C, filesystems (ZFS), perf. analysis||The ZFS ARC code needs some analysis and improvements, in particular the code has scalability issues when used with a great number of small files, or small block sizes. This will require more creative problem solving skills.|
|ZFS ARC working set size||C, filesystems (ZFS), performance analysis||Provide tools for analyzing memory consumed by ZFS ARC.|
|ZFS L2ARC persistence||C, filesystems (ZFS), performance analysis||Allow the ZFS L2ARC to persist across reboot.|
|ZFS ARC multi-tenancy||C, filesystems (ZFS), performance analysis, zones, virtualization||Improve ARC performance and analysis tools for contention in virtualized environments such as cloud hosting.|
|ZFS encryption||C, filesystems (ZFS), cryptography||Import and update the work started by Darren Moffat to provide cryptographic support for ZFS.|
|Paravirtualized file system for virtualized guests||C, OS internals, basic filesystem internals||Implement (maybe port ZPL from ZFS) a thin filesystem that uses the hypercall interface to interact directly with the Transactional Object Layer and ARC of the host ZFS filesystem. Do the host-side work so that writing the guest-level filesystem on other OSes like Linux and Windows is simple. Also implement a guest-side /dev/zfs that talks to host-side /dev/zfs and hides the non-local state so that management of this file system happens exactly like ZFS.|
|fsd - file system disturber||rmustacc||C, VFS, fault injection|
This is ipd (internet packet disturber) but at the vfs layer. It's basically a pathological lofs. That means it can do things like insert delays into vfs calls, change the size of requests. eg. what you thought was a 1 MB req gets turned into 1 byte reads, etc. Inject various errors at a rate. Pretend you got so many EINTRs, etc. The sky is the limit!
|plugins for zone user management||C, name services, security, systems programming, virtualization||PAM and NSS modules for managing users and groups in a zone via a plugin mechanism running in the global zone|
|ILB load balancer outside global zone||C, networking, systems programming, virtualization||ILB is a TCP load balancer that is only accessible in the global zone. This would allow a zone to set up its own ILB rules.|
|Suspend-to-disk||C, kernel, system architecture||We have suspend-to-ram, and we have suspend-to-disk for SPARC. It would be good to get suspend-to-disk (hibernate) for x86 systems. Much of the plumbing underneath is already there, but it will take some significant effort -- this will also require work to interface with the boot loader, and possibly with ACPI. See the existing code at: https://www.illumos.org/projects/illumos-gate/repository/show/usr/src/uts/common/cpr – This would be a massive investment in time and very difficult debugging with very little payoff. You almost certainly don't want to do this unless you would personally benefit from it working, and even then it's 50/50|
|Resurrect and update lx brand||Triskelios||C, basic OS internals|
Updated lx brand for lighter-weight support (e.g. reduce maintenance overhead for Linux releases), allow modern (Linux 3.x) GNU/Linux distributions to boot in a branded zone.
|Alternate boot loaders/UEFI boot||gdamore||C, UEFI, BIOS, kernel bootstrap||Provide alternatives to grub2 for boot process, including support of machines bootstrapping off UEFI with root on GPT disks|
|IDL stack replacement for CIFS||buffyg||C, DCE/RPC, IDL, kernel credentials, porting||Migrate DCE/RPC stack, replace existing IDL infrastructure, integrate with kernel credential plumbing|
|Build system improvements||Build systems||Improve build system scalability, allow building from any directory in any state, make it easier to detect dependency problems, decrease incremental build overhead.|
|Automated test support||C, POSIX, scripting||Implement test modules for testing various subsystems of the OS in illumos, revive STF test suites beyond ZFS that are of general interest to the illumos community|
|Fix writable strings||C, compiler options||Build illumos with compiler options to put strings constants in read-only memory and fix the compile errors and any run-time breakage (problem is mostly the last bit)|
Porting and distro support
|SmartOS appliances||e^ipi||Software packaging, automation||pre-baked SmartOS-based appliance distros for things like storage (NAS box), networking (router box), others. Be creative. Bonus points for making a REST api and/or gui to manage them|
|Language, library, or application porting||Porting, expertise in project to port||Take expertise you already have with a project that has considerable barriers to illumos portability and work with both the illumos community and an upstream with which you are preferably already familiar to complete a port and make upstream commits for ongoing support. Organisations that don't otherwise participate in GSoC but are willing to partner via ad hoc umbrella arrangements are welcome.|