the all-thing | 2010-09-09 18:39:48 -0400 ========================================== Rethinking Sup -------------- Date: June 24, 2008 8:37pm Author: William Morgan Labels: sup URL: http://all-thing.net/old25.txt It's been clear to me for a while now that Sup has been trying to be two very different things at once, thus pleasing no one and irritating everyone. There's Sup the _email client_, which is kind of the standard view of things. And then there's Sup the _service_: a threaded, fielded, searchable, labelable view into your email. Sup the email client is lacking in many ways, as many people have been very quick to point out to me. The most obvious of these is that it refuses to actually, you know, actually write back any state to your mailstore. Specifically, read/unread state is never written anywhere except its internal index. Furthermore, mailstore rescans of most any type are incredibly slow. These two features make using it in conjunction with other clients near impossible, which pretty much breaks one of the primary principles of tool design: don't break other tools. (Then there's also the problem of IMAP connections being terrifically slow and prone to crashes, but I lay most of that blame on IMAP being a crappy protocol and the Ruby IMAP libraries leaving a lot to be desired.) Sup the service, on the other hand, suffers from the rather obvious flaw of not being exposed in any manner other than through Sup itself (and irb, I suppose). I think the reason for this bizarre situation stems from my goal of fusing two very different things together: mutt and Gmail. Mutt is a client; Gmail is a service; Sup cherry-picks functionality, and lack of functionality, from both. Examples: I refused to have Sup write back to mailstores because Gmail didn't have to export to your local Maildir or mbox file, so why should I? (Well technically, I said I would accept patches that did that, but that I wouldn't be working on that feature myself. A fine distinction!) At the same time, I pooh-poohed the notion of a Sup server because mutt didn't have a server, and so why should Sup? And so on. For Sup to evolve into something more useful than it is, and that appeals to a broader audience than it currently does, I believe it has to go down one of these routes completely. And I believe I know which one, and I believe this can be done without compromising the basic user experience, which I would be very reluctant to do because it has been lovingly tweaked over the years to be William's Ideal Email Experience. The first option is to make Sup more of a client. In order to be a real email client, Sup must be able to interoperate with other clients. This means it has to write back all its state to the mailstores: read/unread status in whatever manner the mailstore supports, and probably something like all labels in a special header. It must also be able to do a full rescan in a fast manner, so that changes by other clients are reflected. Right off the bat, that seems impossible, redundant with other software, and not that interesting. As I wrote in a sup-talk thread from a few months ago [1] "Sup is never going to be able to compete with programs like Mutt in terms of operations like "open up a mailstore of some format X, and mark a bunch of messages as read, and move a bunch of messages to this other mailstore." That's a tremendous amount of work to get right, get safe and get fast, and Mutt's already done it well, and I sure don't want to have to reimplement it. Competing with mutt on grounds of speed, stability, and breadth of Mailstore usage is a recipe for fail. Ruby sure as shit ain't gonna come close to C for speed (at least until Rubinius gets LLVM working), and mutt's already hammered out all the quirkinesses with Exchange, etc." But not only would it be impossible, it wouldn't be interesting. The things that make Sup valuable are the UI, the indexing and the flags, and those simple don't translate to external mailstores. Furthermore, Sup is aimed at the mailstores of the future (my present mailstores), which are so big that mutt can't handle them anyways. So that leaves Sup as a service. And that's where things get interesting. But I'll save that for a later post. [1] http://rubyforge.org/pipermail/sup-talk/2008-April/001456.html: This delicious text version served up by Whisper .