OpenAFS Logo
Best Practices Workshop 2010
European AFS meeting 2010

OpenAFS and Google Summer of Code

OpenAFS is a 100% open source globally distributed file system derived from IBM AFS commercial offering as of 1 November 2000.  Since IBM released the source code OpenAFS has thrived adding support for new platforms while enhancing its overall performance, scalability and usability. 

OpenAFS has a large, mature codebase of over 800,000 lines of code. It is used by large enterprises, universities, and research establishments worldwide, and plays a part in fields from finance through space exploration to quantum physics. Developing code for OpenAFS gives you the opportunity to make a significant difference to a product that is in real-world large scale production use, and to learn key development skills. We have a large, supportive, community of developers who are keen to see new developers enter our project, and happy to help out as you get up to speed.

GSoC 2010

If you are considering applying to OpenAFS for a Summer of Code project and have not already read the GSoC 2010 FAQ we suggest that you do so.

OpenAFS is a challenging project to develop for. It is a large and complex project that has developed over nearly 3 decades. The code must work across a wide variety of different operating systems, and is heavily multi-threaded in places. On Unix, the OpenAFS client runs within the machine's kernel, which can significantly complicate the development process. As an enterprise product, OpenAFS relies upon significant underlying infrastructure, which a developer needs to get running before they can test any OpenAFS code. In addition, OpenAFS is primarily written in C, with all of the attendant issues of memory management and pointer manipulation.

These challenges mean that students who successfully complete a Summer of Code are likely to leave with significant new skills. Real world experience of developing for distributed systems, kernel programming, building test infrastructures and developing thread safe code are key skills to develop, and we're happy to help you to learn them. Please join us on #openafs on freenode, in the Jabber conference openafs@conference.openafs.org, or on the openafs-devel@openafs.org mailing list.

Background reading

If you are interested in working on OpenAFS this Summer (and perhaps for the rest of your life) here are some things that we recommend you do:
  1. If you are unfamiliar with programming in C, see if your University has any resources available for assisting their students who want to learn C.  If that is not possible, get yourself a good book and try your hand at it. "The "C Programming Language, 2nd edition" by Kernighan and Ritchie is widely considered to be an excellent reference text.
  2. If you have no idea what multi-threading is or what mutexes, read/write locks, or critical sections are, go to the library and find yourself a book.  Preferably one that does not specialize in Java, Win32 or Posix threads, but a good general multi-threading text book.
  3. Read the IBM AFS documentation/. We are in the process of rewriting this documentation to reflect the functionality that is now available in OpenAFS - we apologise that some of it is still out of date.
  4. Try your hand at building your own DNS, Kerberos and AFS infrastructure.  "Distributed Services with OpenAFS" is an excellent cookbook that walks though all of the steps necessary to get all of the pieces up and running.

Requirements

If you apply to OpenAFS please be aware of the following:

  1. You may not have a second job when working on OpenAFS GSoC.  We expect a minimum of 30 hours a week of dedicated work on your project.  It is likely that you will need to spend more time than that when you include the time spent communicating with your mentor(s), and on developing new skills necessary to complete your project.
  2. You must have excellent network connectivity on a regular basis.  It is extremely hard to develop for a distributed network file system without access to the Internet.  In particular, you need to be able to access source code repositories, Kerberos KDCs for authentication, and OpenAFS services.  This will require that a broad range of both tcp and udp ports be open for access to the external world.  If you are dependent upon your University's network and they firewall access to the outside world, it may be very difficult for you to work on OpenAFS.  Access to Jabber conference rooms and IRC for communication with your mentors and the community are critical.
  3. You must know how to compile a C program and use a debugger at a rudimentary level.  For Linux, gcc and gdb.  For Windows, Visual Studio 2005.
  4. The time that our mentors spend working with you on a GSoC project is extremely valuable. The majority of our mentors are undertaking that role in addition to full time employment. Please make the most of their time. If you are having a problem, tell us about it as soon as possible so that it can be addressed.  If you promise to deliver something, do so or warn your mentor as soon as you know that you will miss the promised delivery date.  If your mentor is not available, ask on the IRC channel or the Jabber conference room, and other members of the community will be happy to help.  We will do all we can to make GSoC a success for you, if you put in the effort at the work and the communication, but we will fail you if you're not putting that effort in.

Communicating with the OpenAFS Community regarding GSoC

You can speak to members of the OpenAFS Community using three forums:

  1. Jabber Conference Room: openafs@conference.openafs.org
  2. Internet Relay Chat: freenode.net #openafs channel
  3. Mailing list: openafs-devel@openafs.org

Project Ideas

The following are a list of project ideas that members of the OpenAFS community believe are not only interesting challenges that can be completed over a Summer but that will provide much needed features or functions for OpenAFS.

Userspace NFS->AFS translator

AFS has, for years, had an NFS to AFS translator which loads into the Solaris kernel. This project would build a new translator for all Unix operating systems, building on top of the existing userspace AFS cache manager. It offers the prospective student the opportunity to learn about the internals of both the AFS and NFS distributed filesystem protocols. An existing knowledge of the C programming language is required.

Encrypted storage

The AFS protocol offers encryption for data transport from client to server. However, that data is stored on the server in cleartext, where it can potentially be read by the administrators of that server. This poses a real world problem for organisations who wish to outsource the provision of their file storage, whilst keeping their data confidential. This project would augment the existing AFS client to support encrypting data blocks before sending them to the file server. Additional enhancements would manage user and data keys in such a way that a user can share encrypted files with other AFS users of their choosing, and protect the names of files, in addition to their contents. This is a challenging project, during which the student will gain an in depth knowledge of kernel programming, distributed systems, and cryptography.

An AFS search service

Desktop search clients such as Beagle are now widely available. However, they do not work well with network filesystems and the vast amount of data that may be remotely stored upon them. This project would develop an AFS search service which indexes all of the data available on an AFS fileserver, and permit clients to query that data. Files may be indexed using existing metadata, or through agents which index objects of particular types. Students will learn how to specify and extend an existing distributed system, and gain exprience with information search, indexing and retrieval toolss

Internationalization infrastructure

OpenAFS, as a globally-distributed filesystem, has users worldwide, some of whom no doubt do not speak English even as a second language. This project would build infrastructure to collect text strings to be internationalized at build time, and install any provided translations into the finished builds. Tools and libraries which might be used include xgettext (to collect strings) and the libintl internationalization suite ("dgettext"), or native platform methods such as MacOS CoreFoundation ("CFBundleCopyLocalizedString"). Students will learn how to interface with C libraries, command line tools and build systems. If you're interested in OpenAFS but find the idea of threaded and kernel programming to be overwhelming, this may be the project for you.

Persistent storage for disconnected mode

Since GSoC 2008, and based on a concept pioneered in the 1990s by UMich CITI OpenAFS has supported disconnected operations, meaning cached files can remain available and editable in the presense of no network. In order to be truly useful, components are needed to allow selections of files to be stored for offline use while still online, to cause those files to remain up-to-date while the client is connected, and to keep in-memory state of the files across a client shutdown, so reboots can be done while disconnected from the network. An especially ambitious student might also provide a graphical selection mechanism for retaining files. Skills learned will include kernel and threaded programming skills.

Cooperative caching

Clients now have large local disks available to them, and fast local bandwidth. The remaining issue, in particular in scientific applications with large datasets, is in the speed of the transport mechanism between the client and the server hosting the data. In a cluster environment, where a large number of clients are collaborating on processing the same read-only data, it shouldn't be necessary for each client to individually fetch the data from the server - instead a single client should be able to perform the data fetch, and share the results with all of the other clients in the cluster. This is a challenging project, developing a design and proof of concept for entirely new functionality. Skills learned will include the principals of peer-to-peer filesystems, developing cluster filesystems and kernel programming

Unix or Windows Cache Manager support for Apple Doublefiles (Extended / Posix Attributes)

In order to store arbitrary metadata (aka attributes) with files or directories in file systems that do not have the necessary native support Apple developed the Apple DoubleFile format.   AFS does not support arbitrary metadata and on Apple MacOS X systems, the operating system will create DoubleFiles without additional support from the AFS Cache Manager.  This project is to implement native support for Apple DoubleFiles in one or more of the AFS Cache Managers exporting Posix Attributes on Unix/Linux platforms and Extended Attributes on Microsoft Windows.  This will permit arbitrary metadata (for example, icons, thumbnail images, author, copyright info, gps tags, etc.) to be stored in AFS and shared across multiple operating systems without requiring changes to the AFS file servers.

Read/write volume replication

OpenAFS currently provides readonly replication of data, but many sites would like to be able to replicate all of the data, both read only and read/write. A proposal of how to implement this within the AFS protocol can be read here.

This project would be continuing from the work done in this area during the 2008 Summer of Code.

A student choosing this project will gain exerience in the skills necessary for developing network-distributed systems, especially with regard to file systems.

Surprise Us

Anything else that you want to submit.  Speak with members of the OpenAFS Community and brainstorm. 

Previous Years

OpenAFS previously participated in the 2008 and 2009Summers of Code.