ok, bear with me, because i really don't feel like spending a ton of time reading what other people have had to say on this subject and digging up references. i hope this post is not something that deeply embarrasses me in the future. if it is, oh well! that's what blogs are for!
so when i initially applied to grad school, i thought i was going to do theory. after all, i was already at a company building stuff, what was the point of leaving, getting paid a lot less, and building stuff with fewer tools and fewer machines? people in industry i talked to seemed to concur. then i actually applied, and during the process realized that a candidate who hasn't done any real math in 4 years perhaps wasn't all that appealing as a theory student. but that's ok, cause i met the theory students, and though they're very nice and smart i'm pretty sure that's not who i am.
so anyway i'm here, and i'm trying to understand what it means to do research in systems. it's this weird combination of showing some novel properties, building a big system, making something run on it, and measuring the crap out of it. i don't think it makes any sense whatsoever from an industry perspective, because you have to do something new in systems and prove it (not just make code work) and it doesn't make sense from a mathy perspective because even if you came up with and proved some amazingly cool networking algorithm you actually have to build it and slap a measurement on it or no one will believe you.
i've been doing a lot of background reading on platforms lately. The paper I linked to before references Marc Andreessen's blog post on platforms, which is quite interesting. I think it's fairly clear that things are moving in the direction of what he deems the "level 3 platforms", or these big containers where developers can upload code, pay per cpu cycle/gb of storage/mbps of bandwidth and not have to worry about administering their own servers. i think it's very cool and democratic and will bring about lots of neat things on the internet.
of course, what becomes very tricky here is trust. first of all, who in their right mind would run one of these containers running all this crazy uploaded code? the code writers could wreak havoc, so first off you want controls in place to protect the container from them, but these controls probably limit what the code writers can actually do (and might make them code to weird made up standards). second, you need to have some sort of isolation between the programs running around in there so that they don't completely annihilate each other, but this is hard too and might require a lot of overhead.
one thing people don't think about enough (i think) is, well, when there are orders of magnitude more applications out there (which there will be, because it's easier to write one now), how do users discern between them? how do they know which ones they can trust? which ones are going to steal their cookie, or monitor their web usage, or spam all their friends? and given that all these apps are going to be running in one big container, they could presumably share stuff more easily (this can happen even with level 1 platforms, with level 3 you can do even more) so how do you control what gets shared and what doesn't? like on facebook, maybe i'm ok letting an app see where i live or where all my friends live and mapping that on my profile, but i don't want it to send out invites to all my friends. right now there's no way to even set that! so i only install certain apps that i think are ok, but sometimes i might get burned and end up emailing half my address book telling everyone they've been turned into a vampire.
anyway, i think this is interesting, and i think it's worth working on. but i don't know if it's useful to work on it in a research environment, because i feel like we might get stuck having to be too secure, and whatever we build isn't going to be anywhere close to what eventually gets done. i guess if we're lucky, the ideas from it will trickle into industry and some company will build something resembling it. then sometimes i think this has to be done in a research environment (or at least open source) cause this needs to span companies. either way, it's interesting, i like thinking about it, and i'm happy i have something to work on in my first week :)
unfortunately there's a massive amount of work to do and my new roommates also have a tivo, so i have to try very hard to keep from falling back into my tv addicted ways.
That's the interesting thing about doing systems research in academia. :-)
ReplyDeleteSystems security is a fascinating subject, I think. Check out Dawn Song's papers http://www.cs.berkeley.edu/~dawnsong/ for an interesting blend of theory and practicality (including real tools that analyze and patch black-box binaries!).
There is also important work to be done on system architectures that enforce trustable and predictable properties of complex systems, which seems to be the topic of the latter half of your post. The difficulty of academic research in that area is in proving that a given architecture works and is sufficiently low-overhead for designers, users, and machines.