GSoC-2012-ideas
D1364578086
Aa
#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 5 stars (1=easy, 5=hard) 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.
#
#In addition to this ideas page, prospective students should look
#over our [GSoC Student Expectations] and be prepared to submit an
#application matching our [GSoC Student Application]. For more
#information, note our general [GSoC] page.
#
#There is a separate list of [Inferno-related project ideas |
#http://code.google.com/p/inferno-os/wiki/Project_Suggestions] on
#their site. Many may be larger than is suitable for GSoC, but they
#might prove useful ideas. The ones that seem most suitable have been
#included below.
#
# * [Graphics / UI / draw(3)-related ideas | #GRAPHICS_IDEAS]
# * [Kernel / port / low-level ideas | #KERNEL_IDEAS]
# * [Web-related ideas | #WEB_IDEAS]
# * [Compiler / dev tools / library ideas | #DEV_TOOLS_IDEAS]
# * [Application ideas | #APPLICATION_IDEAS]
# * [Other ideas | #OTHER_IDEAS]
#
#------------------------------------------------------
#GRAPHICS IDEAS
#
#Ideas related to Plan 9's graphics systems, including kernel
#devices, window systems, and supporting libraries.
#
# * Create an alternative window manager ✪✪ (John Floren, Anthony
# Sorace)
#
#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.
#
#A related but different approach would be to see how multi-touch
#capable devices could work with the Plan 9 windowing systems. From a
#previous GSoC we have a drawterm(8) implementation that runs on iOS
#devices (it could use some refreshing), and more recent work has
#given Plan9port on OS X some multi-touch recognition. Still, these
#aren't a perfect fit for rio(1) and acme(1) as they exist today.
#
#In either case, a student looking to work on these projects should
#be familiar with the existing Plan 9 windowing systems.
#
# * 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.
#
# * teach libdraw/libframe to deal with variable height fonts ✪✪✪✪
# (Erik Quanstrom)
#
#The cannonical example is accented caps, such as u+0000c2, Â.
#
#This would involve creating an analogue to stringwidth(2),
#stringheight(2), and using the result in the frame(2) library.
#
# * write a panning image viewer for plan 9. ✪✪ (Erik Quanstrom)
#
#There are a few plan 9 programs like [gmap(1) |
#http://www.quanstro.net/magic/man2html/1/gmap] and [radar(1) |
#http://www.quanstro.net/magic/man2html/1/radar] that would benefit
#from a panning viewer. The image-generating programs should provide
#the panner enough information to generate adjacent images without
#any private knowledge.
#
# * modify ttf2subf to allow font combining. ✪ (Erik Quanstrom)
#
#Almost no truetype fonts provide good Unicode coverage and good
#quality. Ttf2subf is a Plan 9 Ports program for turning ttf files
#into plan 9 fonts. Since a single subfont in plan 9 has a limited
#size, ttf2subf tries to create the minimal set of subfonts possible
#for the given ttf. This results in subfonts that cross Unicode
#[block | http://www.unicode.org/Public/UNIDATA/Blocks.txt]
#boundaries. If ttf2subf instead broke fonts at block boundaries,
#similar fonts could be mixed according to quality and coverage.
#
# * Hosted OpenGL in Inferno. ✪✪✪ (Charles Forsyth)
#
#Give hosted Inferno a basic interface to OpenGL or OpenVG on a Linux
#or MacOS host. "Basic" means a small subset of OpenGL or OpenVG, to
#test ideas and keep the project manageable. Ideally, unlike most
#OpenGL interfaces, this one would use novelties such as data
#structures. It could be either a module interface, or a name space,
#or a module interface to a name space (in the style of draw(2)). For
#GSoC, best to keep it small and basic, but enough to draw some
#interesting or amusing things.
#
#This suggestion came from the Inferno ideas page.
#
#------------------------------------------------------
#KERNEL IDEAS
#
#Project ideas related to the kernel, the various ports, or driver
#support. Note that we're always interested in ports to new hardware,
#provided you can ensure that you and your mentors have the same
#device. Pick anything and get Plan 9 working on it!
#
# * 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
#
# * 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.
#
# * pci extended configuration space ✪✪ (Erik Quanstrom)
#
#Plan 9 currently has no access to pci extended configuration space.
#[Wikipedia | http://en.wikipedia.org/wiki/PCI_configuration_space]
#has a good overview of what extended configuration space is. The
#goal would be to make extended-space access possible on as many
#machines as possible.
#
# * 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/
#
# * 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. The implementation needs to support the TCP mss hack,
#and ftp. This can be implemented in user space. If performance is an
#issue, it should be easy to move into the kernel if the student has
#completed the work.
#
#------------------------------------------------------
#WEB IDEAS
#
#Project ideas related to the web, either in Plan 9 tools providing
#web services or in ways to interact with Plan 9 systems.
#
# * 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.
#
# * 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.
#
# * Stateful Iferno httpd ✪✪✪ (Charles Forsyth)
#
#Modify one of the Inferno httpd implementations to allow a process
#(or a set of processes) to maintain state for a logical http
#session, so the server-side application is written as a (fairly)
#normal process. Write some useful applications.
#
#Originally from the Inferno Idas page.
#
# * Make Acme-sac's Charon use another acme(1) ✪✪ (Anthony Sorace)
#
#The Inferno fork [Acme-sac | http://code.google.com/p/acme-sac/] has
#a version of the web browser Charon which provides a text-only
#interface via acme(4). For users who already run acme under Plan 9
#or Plan 9 from User Space, it is frustrating to have that separate.
#Make the text-only charon interface work by importing the acme(4)
#file system from Plan 9 or Plan 9 from User Space. Some extensions
#to the target acme may be needed.
#
#------------------------------------------------------
#DEV TOOLS IDEAS
#
#Project ideas related to compilers, development tools, or supporting
#libraries.
#
# * 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.
#
# * TLS/SSL3.0 in Inferno ✪✪✪ (Charles Forsyth)
#
#From the Inferno Ideas page:
#
#/appl/lib/crypt/ssl3.b has an implementation of SSL3(TLS),
#/appl/lib/crypt/sslsession.b implements some form of SSL session
#cache, and /*/port/devtls.c has support for the record structure and
#control operations of SSL3 (but ssl3.b doesn't use it). Check ssl3.b
#etc. against the specification, and change it to suit. You might
#also need to change x509.b. (GW)
#
#------------------------------------------------------
#APPLICATION IDEAS
#
#Ideas for applications; user-mode code in an existing environment.
#
# * Implement tls 1.2 ✪✪ (Erik Quanstrom)
#
#Plan 9 currently implements an older version of tls. Bring this
#up-to-date with the current standards. This project will likely not
#require as much code as reading of standards.
#
# * Interact with Google APIs ✪✪ (Charles Forsyth)
#
#Create file servers in (Plan 9 or Inferno) or modules (in Inferno)
#to give access to some of the more interesting [Google APIs |
#http://code.google.com/more/], where "more interesting" means you
#also write a useful and/or amusing application that uses the API(s)
#just implemnted.
#
#Originally from the Inferno Ideas page, also applicable to Plan 9.
#
# * Interact with Amazon's AWS APIs ✪✪ (Charles Forsyth)
#
#Create file servers (in Plan 9 or Inferno) or modules (in Inferno)
#to give access to the [Amazon Web Services APIs |
#http://aws.amazon.com/], and write a useful and/or amusing
#application that uses them.
#
#Originally from the Inferno Ideas page, also applicable to Plan 9.
#
# * A ProtoFS. ✪✪ (Skip Tavakkolian, Anthony Sorace)
#
#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
#
# * Make a keyboard file server ✪ (Erik Quanstrom, Anthony Sorace)
#
#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.
#
#------------------------------------------------------
#OTHER IDEAS
#
#Project ideas that don't fit into - or span multiple of - the above
#catagories.
#
# * 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.
#
# * 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
#
|