Skip to end of metadata
Go to start of metadata

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.

All-around mentors

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.

  • e^ipi
  • buffyg
  • Triskelios
  • rmustacc
  • gdamore

User-mode illumos-gate

ProjectMentorPrerequisitesDeliverables
Win. message DLL compilerTriskeliosC, some WindowsThe 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 implementationTriskeliosCNew 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 distributionTriskeliosC, interrupt scheduling, practical experience of interrupt handling and kernel internalsRearchitect 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 enhancementsgdamoreC, standards-readingUpdate some interfaces in libc to support POSIX 2008, especially adding support for thread-safe interfaces for locale handling.
localedef/libc locale featuresgdamoreClocaledef 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 SysloggdamoreC, TLS, NetBSD usefulEnhance 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.

Instrumentation

ProjectMentorPrerequisitesDeliverables
illumos performance tools C, performanceport some popular Linux performance tools to illumos, eg htop, dstat, free, netstat (who has this socket open)
userland post-mortem DTrace, C, debuggers, systems programmingWhen 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 programmingA 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 analysisNew 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 developmentReplace 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

rmustaccC, MDB, ELF/executable formats, user-level core dump mechanicsOne 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.

Platform support

ProjectMentorPrerequisitesDeliverables
Via Nano/Eden Support C, system architecture, x86Adapt 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).

Device Drivers

ProjectMentorPrerequisitesDeliverables
Limited per-zone drivers supportgdamoreC, OS internals, device driversThere 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 enhancementsgdamore, TriskeliosC, basic OS internals and/or device driversLots 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)gdamoreC, device driversNew device drivers (possibly ported from a licence-compatible implementation), tested and integrated into illumos.
Device driver porting guidegdamoreC, kernel API(both illumos & foreign), technical writingWrite a porting guide to assist developers porting one or more types of device driver from Linux, BSD, or Windows to illumos.
Broadcom WiFi drivergdamoreC, device driversThere 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 graphicsgdamoreC, device driversA 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 driversOpenBSD 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 standardsAdd 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 standardsillumos 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 stackUpdate 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

Filesystems/VFS

 

ProjectMentorPrerequisitesDeliverables
NTFS and/or exFAT support C, filesystem internalsReliable kernel-mode drivers for NTFS (v3.1) and/or exFAT filesystems, under a compatible licence.
pcfse^ipiC, filesystem internalsReplacement 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, filesystemsWrite 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.
unionfse^ipiC, filesystemskernel 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. analysisThe 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 analysisProvide tools for analyzing memory consumed by ZFS ARC.
ZFS L2ARC persistence C, filesystems (ZFS), performance analysisAllow the ZFS L2ARC to persist across reboot.
ZFS ARC multi-tenancy C, filesystems (ZFS), performance analysis, zones, virtualizationImprove ARC performance and analysis tools for contention in virtualized environments such as cloud hosting.
ZFS encryption C, filesystems (ZFS), cryptographyImport 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 internalsImplement (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 disturberrmustaccC, 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!

ProjectMentorPrerequisitesDeliverables
plugins for zone user management C, name services, security, systems programming, virtualizationPAM 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, virtualizationILB 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.
ProjectMentorPrerequisitesDeliverables
Suspend-to-disk C, kernel, system architectureWe 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 brandTriskeliosC, 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 bootgdamoreC, UEFI, BIOS, kernel bootstrapProvide alternatives to grub2 for boot process, including support of machines bootstrapping off UEFI with root on GPT disks
IDL stack replacement for CIFSbuffygC, DCE/RPC, IDL, kernel credentials, portingMigrate DCE/RPC stack, replace existing IDL infrastructure, integrate with kernel credential plumbing

Dev environment

ProjectMentorPrerequisitesDeliverables
Build system improvements Build systemsImprove 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, scriptingImplement 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 optionsBuild 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

ProjectMentorPrerequisitesDeliverables
SmartOS appliancese^ipiSoftware packaging, automationpre-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 portTake 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.
Labels: