GSoC-2011-ideas D1301955553 Afst #Plan 9 and related technologies cover a huge range of topics. Below #we've put together a list of some ideas which we think would be good #candidates for stundents looking for summer-sized projects with us. #Each idea includes at least a brief description and a list of #"sponsors" for the idea (people who've suggested it or volunteered #to work with folks on it). Ideas are rated for estimated difficulty #from 1 to 3 stars (1=easy) and may contain links to further #information or discussion. # #Note! Every year Plan 9 has participated in GSoC we've accepted #student-submitted projects not from our list, and that's awesome. #You are highly encourage to think about how the ideas and #capabilities of Plan 9 (or its cousins) could be used to solve some #problem you care about and submit a project for that. We are #especially fond of things that present their solution in the form of #a 9p/styx file server. # # * Replace html generation in wikifs(4) ✪ (Anthony Sorace) # #The wikifs(4) in both Plan 9 and Inferno understand a very small set #of cues when generating HTML. That set can be limiting. Replace it #with something better, like Markdown. Markdown engines in C already #exist, so the Plan 9 part of this shouldn't be too hard. I'd suggest #doing the Inferno version as well, to make it a good summer sized #project. Use any remaining time to convert any existing wiki docs #that need it. # # * Make wikifs(4) authenticate against an auth server ✪ (Anthony # Sorace) # #Our wikifs(4) doesn't currently do any authentication. Our web #server and supporting libraries have support for http #authentication, but using data stored in the file system directly. #It would be nice if web applications could authenticate against a #real Plan 9 authentication server. A student submitting a proposal #for this should also investigate what's involved in getting wikifs #working over https (it shouldn't be much) to ensure passwords are #submitted securely. # # * Port BSD NDISulator ✪✪ (Dave Eckhardt) # #The NDISulator is a FreeBSD utility which facilitates using device #drivers for Windows network cards in FreeBSD. Plan 9 faces the same #problems that led the FreeBSD folks to this, most especially vendors #who don't release decent information on their parts. Port the #NDISulator so that we can use drivers written for Windows within #Plan 9. #http://people.freebsd.org/~murray/presentations/20050429-msu-freebsd/img36.html http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/config-network-setup.html # # * Get kencc to generate Windows object files ✪✪✪ (Steve Simon) # #Plan 9's C compiler has generated other types of object files in the #past; it would be useful if it could generate things Windows #understands. This is a major undertaking as windows has a variety of #calling conventions and very different register use. However mingw #has tools to generate gcc compatible .a libraries which are very #similar to 8l ones. linking could initially be done with gld as. #It's noteworthy that the Go toolchain, which is derived from kencc #(by Ken!), can already do this. # # * Native asn.1 DER encode/decode library ✪ (Steve Simon) # #Write a native (non-APE) library for encoding and decoding ASN.1 DER #data. This is a useful step towards future LDAP work. This shouldn't #be too hard (and there's lots of reference code), but it will #involve reading lots of RFCs and testing. # # * NAT ✪✪ (Erik Quanstrom) # #In Plan 9 (and Inferno) networks, you don't need NAT: just import #the gateway's network. Sadly, we don't live in a Plan 9-only world. #Write what's needed to allow Plan 9 to act as a NAT gateway for #other systems. This should be at least mostly (and perhaps entirely) #doable in user space. # # * teach libdraw/libframe to deal with variable height fonts ✪✪✪ # (Erik Quanstrom) # #The cannonical example is accented caps, such as u+0000c2, Â. # # * x2apic ✪✪ (Erik Quanstrom) # #Erik has working xapic code that does cluster, flat and physical #mode and can handle 1 < n < 255 apics. It's not clear that x2apic is #worth it, but most of the fun would be in working out that problem #on 24-core machines driving 10gbe. It's also not a very hard #problem, since it's mostly a matter of organization. # # * msi interrupts ✪✪✪ (Erik Quanstrom) # #Similar. Evaluating msi requires doing some careful timing and #working out how msi relates to the rest of the system. Can you ditch #apic if you go straight for msi interrupts? Is the performance and #configuration pain worth it? This is more difficult than x2apic, but #promises better payoff. # #three projects aimed toward a 64-bit kernel that seem right-sized #for a summer. unfortunately, these may be a bit unsatisfying, as #they're a small part of a whole. # # * work out the assembly for /sys/src/libc/amd64 ✪✪ (Erik Quanstrom) # #This work has been done before, but is unavailable. Erik has a #draft. This project would be in service of longer-term goals for #amd64 support. # # * teach 9load-e820 to jump to the loaded image in 64-bit mode, if # requested. ✪✪ (Erik Quanstrom) # # * A simple draw server for HTML5 browsers. ✪✪ (Skip Tavakkolian) # #Adapt an existing Javascript implementation of Styx/9P to use HTML5 #WebSockets -- or implement one from scratch -- and create a 9P file #server that provides a simple draw device using keyboard, mouse #event handling and either an SVG or a Canvas element for display. #Develop a Plan 9 or Inferno client to interact with it. # # * Make a keyboard file server ✪ (Erik Quanstrom) # #There are several cases where it would be useful to have a #stand-alone software console. The in-kernel console (rightly) #doesn't handle interrupts and does only the most basic keyboard #processing. Other software, like telnet, implements its own console #handling, as does rio. It would be nice to refactor this into a #stand-alone file server that handles these functions and could be #used by all these functions, or directly on the cga console. # # * Create an alternative window manager ✪ (John Floren) # #For some, rio represents a barrier to entry--complaints that it is #hard to use or ugly have frequently appeared. It would be nice to #have an alternative window manager for those people who don't like #rio, perhaps something with more traditional title bars, #minimize/maximize/close buttons, etc. Rio could serve as a base for #this effort if desired, since it already handles the necessary #multiplexing and drawing operations. # # * Make a widget library ✪✪ (John Floren) # #Libpanel is old and unmaintained, libcontrol doesn't include e.g. a #multi-line text entry area, and both look rather outdated. It would #be nice to have a widget library including buttons, drop-down menus, #multiple-line text entry, radio buttons, scrollbars, etc. The tk #library in Inferno does pretty much everything desired. # # * Kernel.org for Plan 9 ✪✪✪ (Ron Minnich) # #The Linux kernel.org provides a very rich environment for #prototyping linux enhancements. It also uses a well-known SCM (git) #which removes one barrier to entry for new users. This project would #set up a kernel.org-like entity that uses mercurial, supports forks, #and has a well-defined path for inclusion into the base "kernel.org" #repo. It would also support a process for regular updates from #sources. Finally, all contrib packages would be included, but not #integrated into /sys/src (to make pulls from sources viable); #rather, they would live in a seperate tree called /contrib (both #source and binary). Learning the lessons from kernel.org is strongly #encouraged, but implementing this system in a Plan 9-friendly manner #is essential. # # * Finishing up ratrace ✪✪ (Ron Minnich) # #Ratrace (Plan 9 version of strace) needs a few fixes: allowing users #to get both binary and pretty output from programs; allowing users #to set the amount of data dumped for read and write; fixing a #remaining few races when children fork; and allowing ratrace to #trace itself. This is a pretty straightforward project that would #allow students to make minimal changes to the kernel and still learn #a lot. # # * KVM/Virtio Drivers ✪✪ (Eric Van Hensbergen) # #One of the environments many people run Plan 9 under is Qemu/KVM -- #but the virtio drivers (which are required for high-performance disk #or network access) aren't currently supported in mainline Plan 9. #The student(s) would get virtio drivers for first the network and #then the block device (or perhaps one student for each) working and #in a form suitable for acceptance in the mainline Plan 9 kernel #against either the tip Qemu or a recent Qemu/KVM distribution (say #Ubuntu 10.10). I believe this task is relatively straightforward and #requires no special hardware outside of a PC capable of running #Qemu. If there was sufficient time the student could work on other #virtio drivers (native 9P, console, etc) The student will also be #responsible for doing a base-level performance evaluation of virtio #drivers versus emulated drivers for some standard operations (disk #access, fossil access, venti access, network stream, etc.) The cool #thing is, it'd be honest kernel work, and have tangible results we #could all use within a month or so of effort. # #Look in /n/sources/contrib/rminnich/lguest for some starting points # #It is important that the student have Plan 9 experience for this #project and know how to compile and run their own kernels. # #See also http://bender.eugenics-research.org/doc/plan_9/GSoC/ # # * Clean up eqn(1) output ✪ (Jeff Sickel) # #Eqn has problems generating clean output for brackets and sqrt. This #is prevalent especially when using ps2pdf. Track down and fix the #errors so eqn | troff output is clean for publishing pdf papers. # # * 9P servers (Jeff Sickel (after reading an email from Charles)) # #Write a 9P server and supporting clients for relevant systems. #Suggested areas are: # # * Atmel, Arduino # * dsPIC projects # * motor control systems # * Jtag # * Modbus # # * A ProtoFS. ✪ or ✪✪ (Skip Tavakkolian) # #Write a 9P file server that can be instructed to create a file tree #and associate each node with external directories, files or #processes. Very roughly, the prototype file tree instructions might #look something like: # #! / #! fst/ = /usr/fst/www/ #! edit/ #! snarf > /dev/snarf #! paste < /dev/snarf #! mouse | fd0rw /dev/mouse #! #