I am having trouble evaluating how I'm doing, because it's a matter of "compared to what?"
I have a masters degree in CS and 30 years of experience. For that background, what I have accomplished is pathetic, and painful to observe. For comparison, I could not have done this project, at all, when I first finished school - three years out, I would have found it a cake-walk.
On the other hand, I have not worked regularly since 2003, due to health problems. In 2011, I began working, with the intention of coming up to speed in web technologies, and the latest tools, environments, etc. That was when I suffered a head injury.
So my goals for this outreach internship were as follows (in this priority):
Do something useful
Come up to speed in some area of CS, with the shortest learning curve - i.e. so I can be useful in the future
Learn where I still have cognitive deficits, and learn to compensate for them.
Learn what my limitations are, so I don't oversell myself (I don't work as well if someone expects something of me that I can't deliver.)
Since this internship began, I have discovered two goals/outcomes, that I didn't expect:
Rediscover the joy in software development
Stretching my brain, so that the work is gradually becoming easier. (too slowly by half but...)
What I’ve done:
Set up a Linux box and built kernel and xen from source
Wrote a requirements document for project
Wrote a combination low level requirements doc and partial design document for the 9P portion of the project.
Determined that there is no 9P server code for my back-end to talk to, but that there is a server embedded in virtio’s 9p back end.
Agreed with mentors that simplest approach is to port virtio, and use as much of their server code as possible.
Coded, compiled a simple frontend that writes an integer to a ring, and a backend that reads the int.
What I’ve learned.
9p file system requirements for client and transport.
Much about how virtio implemented the 9p fs transport and server.
The xen communication model between front and back ends, including xenbus/xenstore (finally (!) got it that they were the same), ring buffer, grant tables, and how to access each of these.
Relearned many Linux commands: Find, grep, makefiles, cat, cd man, scp etc.
How to track down and solve errors with google
Different versions of Qemu, and which one to use
What it takes to build in Qemu, and add modules to it
How to set up linux kernel configuration file.
How to build and run a kernel module in debian
Many tools (emacs, vi, pastebin, github, blog, etc.
The biggest hold-up is that I have taken a number of false paths, and, more importantly, taken too long to recognize them as such, in chronological order:
Trying to get Network manager to work with bridges (this was 4 days)
Misreading something and thinking v9fs was a 9p server, not a client. (3 days)
Road maps that did not match mentor’s expectations (?)
Trying to set up VMbox for testing. (2 days)
Spending too much time trying to understand blkback.c (2 days)
Tried to compile my backend stand-alone – bad idea (a few hours)Others I’ve forgotten
It's possible that it's taking less time for me to recognize these false paths, but it's too soon to tell. But it's not like all that time was wasted, since I did learn things in the process.
As far as where I'm going - the small modules I've written will provide a secure scaffolding to develop the main project in. I've provided a communication between front and back end, learned to build them, and (very soon) will know how to test them.
The next steps are to modify my modules to handle multiple requests, from multiple sources. And then add 9p transport code. This last step would be impossible in the time allotted if I had to write the server side from scratch (as virtio did). Using what they've done on the front and back end (making this project a port), it is still possible to finish this, by late August.