Having worked on email-related code before, I have been morbidly fascinated by this project from one of the founders of handmade.network, which is trying to reinvigorate programming by emphasizing small teams and from-scratch performant code.
This update includes a paragraph starting “The biggest lesson is that not everyone is RFC-compliant.” about the challenges he’s faced and, from what he lists, he’s only seen the tip of the iceberg. For example, he hasn’t mentioned some of the fun problems of IMAP or talked about the woes of email encoding and attachment. Specifically, this strategy of “seeing violations led to unfortunate wrinkles and hard-coding in specific recovery points when I try to talk to some servers” is really, really not going to scale. C is a tough language for the tower of abstractions he’s going to build and rebuild in the face of unexpected inputs.
And email is a particularly hard domain because it’s old and looks simple, so there’s an incredible amount of errors you have to cope with from version 0.1. Users will never accept “Yeah, you just can’t read email from people using Outlook, it’s Microsoft’s bug.” Email was a big factor in ending my support for Postel’s maxim.
I wish him a lot of luck and there’s a tiny, windmill-tilting bit of me that hopes he’ll succeed, but I’m watching this race for the crash.
It might be another 5 months before I reach a working prototype for that [GUI], and probably another two months of polish before I consider the possibility of releasing some build publicly.
I think this is interesting from a learning perspective for the author, but I question implementing an e-mail client in C in 2016. The amount of text processing and parsing of non-trusted input is just asking for random crashes and security holes.
And many emails are HTML-only with a subset of CSS, so he’s going to have to write or drag in a browser engine. Writing one of those in C is such an unsafe difficultly that Firefox created a new programming language just to get away from it!
And many emails are HTML-only with a subset of CSS, so he’s going to
have to write or drag in a browser engine.
Not necessarily. For mail it is basically enough to remove tags, insert line
breaks and convert links to footnotes.