[HN Gopher] Gluon, a high-performance IMAP library
       ___________________________________________________________________
        
       Gluon, a high-performance IMAP library
        
       Author : henrybear327
       Score  : 214 points
       Date   : 2023-02-23 11:25 UTC (1 days ago)
        
 (HTM) web link (proton.me)
 (TXT) w3m dump (proton.me)
        
       | cuuupid wrote:
       | I spent the better part of 5 years playing with IMAP. This is a
       | huge step in the right direction but there's a lot with email
       | this is missing:
       | 
       | - Nobody reads or interacts with emails anymore, they use
       | threads. Threading is one of the most impossibly hard challenges
       | to solve and requires a thread-first view of the inbox.
       | 
       | - IMAP represents now a small minority of servers. ProtonMail may
       | be embracing it but for actually interacting with mailservers,
       | don't expect good interoperability or fast interactions when
       | working with the two big dogs (Exchange and GSuite)
       | 
       | - Similarly most mailservers don't act in good faith, their rate
       | limits for non-internal clients are ridiculously low for modern
       | email, and the failure rate is surprisingly high for commands
       | 
       | - There is no real spec for IMAP (the article quotes 3501, but
       | 4549 and 6531 are also "standards"), it's a suggestion at best
       | and every mailserver goes its own way. For example deleting a
       | message does different things in Exchange and GSuite. GSuite has
       | "labels" which are represented as IMAP folders but don't always
       | act like them.
       | 
       | - It's unclear what the mailserver will accept. Valid MIME isn't
       | always going to get through
       | 
       | - Most email that's important is business email nowadays. These
       | are 80% Exchange. Exchange/365 tenants for the most part block
       | IMAP (found this out the hard way) and Microsoft really wants to
       | push Graph (just like they tried to push EWS). This manifests in
       | weird ways like big angry red warnings on the dashboard if you
       | try to enable IMAP, and automatically disabling it on new
       | tenants, so most IT admins will refuse to turn it on even if you
       | explain it's just as secure.
       | 
       | - Remaining 20% are mostly GSuite. Google, as usual, is trying
       | its hardest to create an email client monopoly for its users, and
       | so there's a $75000 annual fee for "security audits" by "vetted
       | firms" regardless of how many real compliance certifications you
       | have. They say this is for privacy and security but it's just a
       | gatekeeping fee and this is obvious due to the large number of
       | email data abusers out there (looking at Unroll). There are even
       | companies (Nylas) that run their whole business by speeding up
       | the certification process and providing an API that works better
       | than Google's poorly documented own SDK. If you get through all
       | of this your users are shown a consent screen where everything is
       | unchecked by default, which sounds cool but basically means many
       | of your users are going to login without knowing how to give
       | consent to your email client.
       | 
       | Overall, the space is characterized by Google trying its hardest
       | to kill any startups in the space and prevent innovation that
       | could threaten their consumer monopoly, and Microsoft trying to
       | keep people in their ecosystem by just changing their external
       | API frequently to force competitors to rewrite their codebases
       | constantly.
        
         | einpoklum wrote:
         | > Nobody reads or interacts with emails anymore, they use
         | threads.
         | 
         | Not remotely true. Perhaps you're thinking about Gmail webmail
         | users?
         | 
         | > and requires a thread-first view of the inbox.
         | 
         | Seeing how Sent messages, which aren't in the inbox, are
         | typically part of threads - even that would not be enough...
         | 
         | > IMAP represents now a small minority of servers
         | 
         | Not sure what you're counting. If you're counting email users
         | on the servers - Google and Outlook365 both support IMAP. If
         | you're counting kinds of server _software_, then maybe, I have
         | no idea.
         | 
         | > their rate limits for non-internal clients are ridiculously
         | low for modern email
         | 
         | You mean, bandwidth rates, or rates of commands/second etc.?
         | 
         | Also, if by "modern email" you mean "email where people send
         | large files" - that IMHO is a problem, and people just
         | shouldn't do that. Same for other social media BTW. The amount
         | of smartphone space wasted by dumb video clips your friends
         | shared with you by WhatsApp or whatever is stupefying :-(
         | 
         | Anyway, people who try to use email to send and receive large
         | files are kind of abusing the service. IMHO.
         | 
         | > - Most email that's important is business email nowadays.
         | 
         | I don't think so. Or rather - maybe in the country you live in,
         | and even then I doubt it.
         | 
         | > Valid MIME isn't always going to get through
         | 
         | ... and it doesn't help that so few clients can properly
         | present, let alone generate, MIME messages other than with the
         | most simple of structure. :-(
         | 
         | > Exchange/365 tenants for the most part block IMAP
         | 
         | AFAICT, most people who use MS services can use their publicly-
         | available IMAP servers.
         | 
         | > the space is characterized by Google trying its hardest to
         | kill etc.
         | 
         | (sigh) not surprising unfortunately. Monopolistic corporations
         | gonna monopolize-coroprately I suppose.
        
       | basilgohar wrote:
       | I was hoping to find at least some mention of JMAP [0] in this,
       | but sadly, this is IMAP-only. While I an happy for this product,
       | I'm disappointed at no convergence toward something more modern
       | than IMAP which I've only heard derision towards by implementors.
       | 
       | [0]
       | https://en.m.wikipedia.org/wiki/JSON_Meta_Application_Protoc...
        
         | mxuribe wrote:
         | With all this recent attention on HN around imap, smtp, mail
         | servers and the like....i also expected something more modern
         | to be announced - either JMAP or somrthing else altogether. I'm
         | not disappointed because the more, the merrier...but nowadays
         | with so much of my time in the matrix world, i somewhat xpected
         | to start hearing anouncements of alternatives to email.
        
           | ThePhysicist wrote:
           | My prediction is that e-mail will still be around in 10
           | years, and Matrix will be mostly abandoned, because e-mail is
           | mostly centered around protocols, whereas Matrix is mostly
           | centered around specific libraries and clients (in my
           | opinion). You can already see Matrix crumble under its own
           | complexity, in a few years they will have added so much
           | functionality that it will become impossible for anyone but
           | Element to provide fully-featured client software. IMAP &
           | POP3, by comparison, are so simple and haven't changed in
           | decades, which is why they are so useful.
        
             | mxuribe wrote:
             | > ...e-mail is mostly centered around protocols, whereas
             | Matrix is mostly centered around specific libraries and
             | clients (in my opinion)...
             | 
             | I disagree on this, but that's ok that we differ in
             | opinion. Also, i would disagree about the crumbling of
             | matrix - either in the protocol sense or app/client or even
             | implementation sense. Could some areas like clients, UX,
             | etc. improve? Sure, of course! Evolution of software need
             | not end if there's room to improve. I'm an admitted fanboy
             | of matrix, but even i know that its not perfect and i hope
             | for continued improvement of matrix. As great as email has
             | been for decades - warts and all - i simply have been
             | expecting (hoping?) for something else by now. It need not
             | be matrix - though again, i'm a fan - but i just meant i
             | hope for open, decentralized mechanism, protocols that
             | serve the world, and become as solid and de facto as email
             | has been (again warts and all). In 10 years, i also
             | beleieve email will still be around...Now, whether it will
             | be considered as standard and universally-accepted as a
             | means for communications, we'll see i guess.
        
             | lucideer wrote:
             | My hope is that they're both around (& actively developed &
             | used) in 10 years, but yes: email is much less likely to
             | die than Matrix.
        
               | Arathorn wrote:
               | I'm not sure you could kill Matrix now even if you wanted
               | to? Heck, given people still run gopher & WAIS & fidonet
               | servers today, so even if everyone runs away from Matrix,
               | it'll still keep burbling away somewhere :)
        
               | ThePhysicist wrote:
               | Certainly not kill it, I just don't think it will be
               | nearly as ubiquitous as e-mail.
        
               | ThePhysicist wrote:
               | My prediction is that with further advances in
               | networking, devices will be permanently online and
               | asynchronous communication will become less relevant
               | (because you can always directly reach your peer), so all
               | these fancy E2EE crypto protocols will be replaced with
               | TLS or a similar protocol.
        
           | lucideer wrote:
           | > _with so much of my time in the matrix world, i somewhat
           | xpected to start hearing anouncements of alternatives to
           | email._
           | 
           | I presume you're suggesting a _new_ alternative to email
           | rather than Matrix being itself an alternative (which isn 't
           | its intent).
           | 
           | The thing about email is it's a set of related protocols - if
           | you want a modern alternative you need to look at those
           | protocols & address legacy problems with them, replacing the
           | ones that need replacing. That's what JMAP is. What you're
           | asking for is JMAP.
           | 
           | JMAP probably isn't perfect, but nothing is & there's no
           | better alternatives I know of. And one major provider using
           | it = more adoption than any other modern alternatives.
        
             | catiopatio wrote:
             | > no better alternatives
             | 
             | IMAP. IMAP is the better alternative.
             | 
             | It's universally supported and battle-tested. We have great
             | servers and clients for it.
             | 
             | It's not perfect, but it's also not fundamentally flawed in
             | any way that might put the future of e-mail at risk.
             | 
             | Bolting HTTP and JSON onto e-mail via JMAP -- and requiring
             | that everyone implement an entirely new, larger protocol
             | stack -- is not an obvious value proposition.
        
               | lucideer wrote:
               | > _IMAP is the better alternative._
               | 
               | So the definition of the word "alternative" in this
               | instance is "something other than IMAP" - the argument
               | for JMAP is not competing with IMAP, there's a pre-
               | determined assumption that we're already unhappy with
               | IMAP, hence the search for an "alternative".
               | 
               | It sounds like you disagree fundamentally with moving on
               | from IMAP in the first place, which is fair enough.
               | That's not a debate I'm getting into here: all I'm saying
               | is _IFF_ we are moving on from IMAP, JMAP looks like the
               | best alternative.
        
               | einpoklum wrote:
               | > We have great servers and clients for it.
               | 
               | I don't know about servers, but I'm still waiting to see
               | a great email client. (For now I get by with Thunderbird,
               | and it's actually going downhill.)
        
               | tjoff wrote:
               | Disagree, the dominance of IMAP makes email much worse
               | than it needs to be. To the very point of putting email
               | at risk in the long run.
        
             | mxuribe wrote:
             | > I presume you're suggesting a new alternative to email
             | rather than Matrix being itself an alternative (which isn't
             | its intent)...
             | 
             | Yes, the intent of my statement was hoping for an
             | alternative to email, and i did not mean to imply that
             | matrix would be the thing that would replace email. Both
             | things seek to achieve different things. and even in some
             | rare overlappiny use-cases, i would say that at this time
             | matrix does not universally replace email.
             | 
             | What i should have stated was that with such attention and
             | (at least in some circles) excitement around newer areas
             | like matrix...That maybe traditional email software devs
             | might have - by now - looked into newer alternatives to
             | email. With apologies to email software devs.
             | 
             | And, yep, I had heard of JMAP some time ago....and i
             | figured by now that it would be far more popular than it
             | is, and that it would have been implemented by many more
             | entities by now. Oh well.
        
               | lucideer wrote:
               | > _i figured by now that it would be far more popular
               | than it is, and that it would have been implemented by
               | many more entities by now. Oh well._
               | 
               | Well IMAP is 37 years old and Google still haven't gotten
               | around to implementing it properly. Email as a technology
               | moves pretty slowly.
        
               | mxuribe wrote:
               | Lol! You are so right on all points there!!! :-D
        
               | Avamander wrote:
               | To be fair here, IMAP has some terrible ideas that have
               | only been remedied with later standards.
               | 
               | For example the (in)famous label thing, _why_ should a
               | letter belong in a single folder. Pointless restriction.
        
               | lucideer wrote:
               | What's the infamous label thing? Are you talking about
               | IMAP or Gmail's broken implementation?
               | 
               | I was under the impression the first public IMAP spec had
               | support for "flags"... did it need later fixing?
        
         | mikl wrote:
         | Yeah, it's a shame. IMAP is not a great protocol (to say the
         | least), but jmap is nowhere near critical mass. At present, its
         | not worth the effort to implement for pretty much anyone, so
         | it's only idealists like Fastmail who've done so anyway.
        
           | the_duke wrote:
           | Wasn't JMAP initiated by Fastmail and initially mostly based
           | on their internal implementation.
        
             | Mailtemi wrote:
             | Initially, the proposition relied on Fastmail protocol,
             | which was/is superior to IMAP. It was pleasing that
             | standardization began, as MS Activesync charged a few
             | dollars per user just for the protocol. Even the Apache
             | James mail server supported it as a draft. Despite becoming
             | a standard make it better , but lost momentum.
             | 
             | Still hope at least both will add push notification to 3th
             | party apps. And a BIG hope for https://stalw.art/
        
               | NetOpWibby wrote:
               | +1 for Stalwart
        
           | lucideer wrote:
           | > _its not worth the effort to implement for pretty much
           | anyone, so it's only idealists like Fastmail who've done so
           | anyway._
           | 
           | Worth mentioning that Fastmail use an open source backend:
           | Cyrus[0] - which started adding JMAP support in 2015 (though
           | I suspect that was Fastmail devs contributing the feature).
           | 
           | [0] http://www.cyrusimap.org/
        
         | elric wrote:
         | At this point, JMAP is like Duke Nukem Forever or Winds of
         | Winter. Why does email need JSON over HTTP? IMAP might not be
         | the sexiest protocol, but it serves hundreds of millions of
         | users just fine.
         | 
         | JMAP, on the other hand, is hardly used, and it doesn't seem to
         | solve any issues that users face, which means demand is never
         | likely to reach critical mass.
        
           | tracker1 wrote:
           | Well, if _using_ the system... it makes serialization far
           | less complex in terms of normalization. You can serialize
           | /deserialize through what have become relatively standard
           | libraries for pretty much every language under the sun. This
           | can be utilized in/out of class/record based representations
           | of the data in your language of choice, and acted upon
           | directly. The use of HTTP is as sensible as anything else, as
           | the HTTP actions and paths align relatively well to resource
           | endpoints as well as a text based protocol.
           | 
           | The abstractions and libraries available make this easier...
           | if you look at IMAP it's byzantine by comparison.
        
           | epilys wrote:
           | Because it was designed for webmail frontends, which can
           | communicate with servers from the client side.
        
           | kitsunesoba wrote:
           | The biggest issue with IMAP is that writing a quality client
           | for it that works on all possible permutations of the spec
           | (especially with the botched Gmail IMAP implementation in the
           | mix) is a huge, huge pain in the rear which is why there's a
           | dearth of high quality FOSS mail clients... you've got the
           | old standbys like Thunderbird and Claws and that's about it.
           | Newer clients like Geary either die on the vine or get stuck
           | in a somewhat spartan state because making it more full-
           | featured takes knowhow, time, and manpower that's not
           | generally available.
           | 
           | On the other hand lots of devs know how to work with JSON-
           | over-HTTP APIs and a lot of modern languages even come with
           | JSON serialization/deserialization out of the box, with makes
           | writing quality clients a lot more accessible to a lot more
           | people.
        
         | Thaxll wrote:
         | Who is actually using JMAP? I never heard of that, what's the
         | point of implementing something that is not used at all.
        
           | aloisdg wrote:
           | This is an chicken-egg problem.
        
           | StalwartLabs wrote:
           | Mostly Fastmail but there are also a few open-source projects
           | that support it https://jmap.io/software.html
        
           | erk__ wrote:
           | It is used by Fastmail (who was also developers of the
           | standard)
           | 
           | I think it is not a great idea to say that it is not a good
           | idea to not implement things that no one uses, because that
           | is a certain way to not make more people use it.
           | 
           | There are some servers that support it such as Stalwart [0],
           | though I don't know about any older servers and/or clients
           | that support it well.
           | 
           | [0]: https://github.com/stalwartlabs/jmap-server
        
             | tankerkiller125 wrote:
             | Until Dovecot and systems like it support JMAP, I don't see
             | it gaining the critical mass it needs to succeed.
        
               | lucideer wrote:
               | Well I can't see Dovecot devs deciding to implement it if
               | they keep reading comments like this dissuading the
               | effort...
        
               | catiopatio wrote:
               | What advantage would they gain by implementing it?
        
               | lucideer wrote:
               | There's three considerations
               | 
               | (a) is IMAP good / sufficient / fit for purpose
               | 
               | (b) if not, is there a better alternative available
               | 
               | (c) if there is, is it worth the development effort to
               | support it.
               | 
               | If we assume the answers to (a) & (b) are NO & JMAP, then
               | the benefits are included in those answers & only
               | question remaining is (c). The person I was replying to
               | seemed to be only arguing that the answer to (c) is NO.
        
               | tracker1 wrote:
               | (a) No (b) JMAP (c) Long term, probably.
        
           | lucideer wrote:
           | > _what 's the point of implementing something that is not
           | used at all_
           | 
           | If this question made any sense we would never make anything
           | new at all. How do you think new things get started?
        
         | catiopatio wrote:
         | There's no clear value proposition for a JSON-over-HTTP
         | replacement for IMAP-over-TCP, especially for clients and
         | servers that have already implemented IMAP.
         | 
         | Why would dovecot want to add an entire HTTP server just to
         | reproduce what they already have, with more layers of poorly
         | fit abstraction, despite there being no significant mail
         | clients that require it?
        
           | Mailtemi wrote:
           | Each JMAP server should include IMAP QRESYNC like
           | functionality at least. Plus the ability to batch JMAP calls.
           | For instance, if you have five folders with IMAP, it might
           | take at least five hops to access them. With JMAP, it could
           | be accomplished in just one call, returning the location of
           | each new email in each folder.
        
             | alerighi wrote:
             | This really benefits when you first connect a client to a
             | server that has to sync all the mail locally, and partially
             | each time the client starts that has to check all the
             | folders for new messages. But realistically when a client
             | is opened (that is when you turn on the computer till you
             | turn it off, if you turn it off and don't put it to sleep).
             | Also most people has only a few folders, say less than 10.
        
           | calvinmorrison wrote:
           | JSON happens to be over JSON and HTTP, IMAP is over TCP and
           | the IMAP protocol. both of those pieces are a relatively
           | small amount of code to parse messages from rather than what
           | to do with said messages. You can transport jmap over
           | whatever you want theoretically.
        
       | didip wrote:
       | Written in Go? Awesome!
        
       | elashri wrote:
       | Proton, Gloun, "<Proton Mail Bridge> is 1000% faster, far more
       | reliable". A typical usage of language for people in High energy
       | physics. Not surprise that the ProtonMail was founded at CERN
       | [1].
       | 
       | [1] https://en.wikipedia.org/wiki/Proton_AG
        
       | rdevsrex wrote:
       | This is pretty cool. Just the other day there was a thread about
       | https://poste.io.
       | 
       | I definitely want to play around with it.
        
       | sagangpuluh wrote:
       | Pragmatick
        
       | beepbooptheory wrote:
       | Really hoping the name is inspired by the Graham Priest book...
       | 
       | https://global.oup.com/academic/product/one-9780199688258?cc...
        
       | ushakov wrote:
       | Their website and branding looks so different, I had to double
       | check that it's the Proton I was thinking about
        
       | jawadch93 wrote:
       | [dead]
        
       | photochemsyn wrote:
       | See this recent HN discussion on an email overview with a good
       | IMAP explainer:
       | 
       | https://explained-from-first-principles.com/email/#internet-...
       | 
       | https://news.ycombinator.com/item?id=34846606
       | 
       | Proton Mail Bridge (for use with something like a desktop
       | Thunderbird on Linux setup) does require the paid tier of Proton,
       | which isn't immediately clear. Unlike Google they're not making
       | money of harvesting and selling personal data, so I don't really
       | mind.
       | 
       | addendum: The IMAP state diagram is a finite state machine,
       | interestingly enough:
       | 
       | https://www.researchgate.net/figure/Finite-state-machine-of-...
        
         | hummus_bae wrote:
         | [dead]
        
       | superkuh wrote:
       | Too bad that most megacorp email providers no longer allow you to
       | use just IMAP. Instead there's a bastardized OAuth2.0 (not good
       | like Oauth1 was) toolkit they use for requiring HTTP(s) mediated
       | authorization. Just IMAP will not work. And every megacorp's
       | implementation of this is different so they have to be handled by
       | slightly different plugins/etc.
       | 
       | The megacorps are trying real hard to kill off open protocols and
       | switch everyone over to their in house "versions" of a public
       | protocol for making proprietary protocols.
        
         | merb wrote:
         | actually that has nothing to do with imap. Imap supports even
         | OAuth2 Authentication trough sasl and the oauth2 authentication
         | for imap will be more and more of an standard, it just sucks
         | that most providers don't support a few things that makes it
         | easier, like dynamic clients, etc.
        
           | Tijdreiziger wrote:
           | I don't even want to use 'plain' IMAP authentication, because
           | it doesn't support 2FA.
        
             | Avamander wrote:
             | This amongst other similar reasons is why large providers
             | also don't want to allow plain IMAP authentication. Too
             | easy to abuse and too disruptive to curtail.
        
         | sir wrote:
         | If you use this proxy of mine then any IMAP (or POP/SMTP)
         | client can be used with a "modern" email provider, regardless
         | of whether it supports OAuth 2.0 natively:
         | https://github.com/simonrob/email-oauth2-proxy. No need for
         | your client to know about OAuth at all.
        
           | tpoacher wrote:
           | This looks great! Does it work in a way that would make it
           | need to be "authorized" by the organization?
           | 
           | Recently I wanted to use the alpine terminal email client,
           | which does support OAuth2, but I was thwarted by a notice
           | saying "application alpine requesting access; write to your
           | admin to authorise". Several months later, apparently whether
           | to add alpine or not to the list of approved software is
           | still "being discussed". Not exactly holding my breath for it
           | ...
        
             | sir wrote:
             | You do still need details for an authorised client, but
             | it's possible to use those of one that's already approved.
             | See the readme section that explains this aspect:
             | https://github.com/simonrob/email-
             | oauth2-proxy#oauth-20-clie...
        
       | meghan_rain wrote:
       | > IMAP clients typically refer to messages by their "sequence
       | number", the message's position in a mailbox. The first message
       | has the sequence number "1", the second "2", and so on. If a
       | client wants to mark a message as "read", it will send a command
       | to the server such as "mark message 5 as read". But what if
       | another client deleted the fourth message in the mailbox? The
       | sequence numbers of all messages after the deleted message will
       | be shifted down by one; the client that sent the "mark message 5
       | as read" command now refers to a different message than it
       | intended.
       | 
       | > IMAP servers (which include applications such as the Proton
       | Mail Bridge) need to be able to handle this situation. When one
       | client moves messages into or out of a mailbox, the server needs
       | to notify all other clients of the changes so that they can
       | update their own view of the mailbox. And until the clients have
       | received the update, the server needs to remember what each
       | client thinks the mailbox looks like to correctly interpret the
       | client's commands.
       | 
       | Holy F what a clusterfuck
        
         | throw0101c wrote:
         | >> _IMAP clients typically refer to messages by their "sequence
         | number"_ [...]
         | 
         | > _Holy F what a clusterfuck_
         | 
         | Or you could use the unique identifier of the message (UID)
         | instead of the sequence number:
         | 
         | > _Messages in IMAP4rev1 are accessed by one of two numbers;
         | the unique identifier or the message sequence number._
         | 
         | * https://www.rfc-editor.org/rfc/rfc3501#section-2.3.1
         | 
         | > _A 32-bit value assigned to each message, which when used
         | with the unique identifier validity value (see below) forms a
         | 64-bit value that MUST NOT refer to any other message in the
         | mailbox or any subsequent mailbox with the same name forever._
         | 
         | * https://www.rfc-editor.org/rfc/rfc3501#section-2.3.1.1
         | 
         | The designers of the IMAP protocol aren't as dumb as the above
         | quotation would have you to believe and multi-client operations
         | were thought of.
        
           | meghan_rain wrote:
           | The UID capability is a newer, hail-mary attempt to fix the
           | issue, and thus it's optional, not all IMAP servers support
           | it
        
             | tedivm wrote:
             | I wrote a popular open source IMAP library in 2009 and even
             | then the UID capability was there and widely adopted. My
             | library relied on it 100%, completely ignoring sequence
             | numbers, and I haven't received a single issue related to
             | this.
             | 
             | It's not that new, it's not a hail mary, and it is very
             | well supported.
             | 
             | * https://packagist.org/packages/tedivm/fetch
             | 
             | * https://github.com/tedious/Fetch
        
             | vidarh wrote:
             | UID was introduced in IMAPv4 in RFC 1730 in _1994_ , and
             | it's not optional for IMAPv4 or IMAPv4.1
             | 
             | I last wrote IMAP server-side software in 2000. Even then,
             | I was not aware of any IMAP servers that didn't support
             | UID. It was essential, as most clients expected it to be
             | there.
             | 
             | There _might_ still have been some at that point, but I 'd
             | be shocked if anyone is still running any IMAP2 or IMAP3
             | servers.
        
             | [deleted]
        
             | citrin_ru wrote:
             | Newer as in only ~30 years old? It is likely some obscure
             | IMAP servers doesn't support them but AFAIK all popular
             | ones do.
        
         | globular-toast wrote:
         | It's easy to take things like REST for granted. Until you learn
         | about the stuff that came before it, like this!
        
         | rglover wrote:
         | Stuff like this makes the idea of an "Email 2" protocol being
         | worthwhile. Shocking how over-complicated it is to send
         | text/html between two parties.
        
           | Avamander wrote:
           | People have called things email killers several times. An
           | intelligent approach would be to gradually rebuild parts on
           | top of better foundations and push towards that.
           | 
           | The amount of deadlocks in adopting things like JMAP, IMAP
           | NOTIFY, OAuth2 (+ Dynamic Client Registration) and so on and
           | on is immense. Won't because others don't, too few do, we see
           | no benefit yet etc. it's really hindering.
        
         | evmar wrote:
         | A long time ago I wrote a toy IMAP client, and ran into
         | similarly confusing issues about how the protocol is supposed
         | to work:
         | 
         | https://github.com/evmar/go-imap/blob/master/imap/doc.go
        
         | calvinmorrison wrote:
         | > Holy F what a clusterfuck
         | 
         | And that's why when people say "JMAP is pointless", just go
         | back and read some of the email specs!
        
           | Avamander wrote:
           | Until things like Thunderbird support it, its adoption is
           | unfortunately going to remain at the level it is currently
           | at.
        
             | tracker1 wrote:
             | Which sucks as it's a massive chicken/egg problem... more
             | clients and hosts need to support it.
             | 
             | Of course, from what I understand is there are JMAP/IMAP
             | gateway options, that should ease availability... assuming
             | these things actually gain any traction ever.
        
         | ketralnis wrote:
         | Pretty much no client or server uses it that way though. The
         | UID extension is more or less required these days.
         | 
         | But IMAP is pretty twisted in other ways too. IMAP is _not_ a
         | request-response protocol like you might think from other
         | protocols. It looks like it at first because you can say things
         | like (from memory, not the real protocol):                   >
         | cmd1 LIST (here cmd1 is a request/response identifier chosen by
         | the client; the server sends responses prefixed by this
         | identifier)              < cmd1 LIST RESPONSE...
         | 
         | But you can also multiplex many simultaneous commands like
         | > cmd1 LIST folder1         > cmd2 LIST folder2         > cmd3
         | LIST folder3              < cmd3 LIST folder3 RESPONSE...
         | < cmd1 LIST folder1 RESPONSE...         < cmd2 LIST folder2
         | RESPONSE...
         | 
         | (note that they can come out of order)
         | 
         | But it gets weirder because you can receive _unsolicited_
         | responses. Sometimes you want that like                   >
         | cmd1 WATCH folder1 (starts a watch which may have responses but
         | not immediately)         > (do other stuff)              < *
         | NEW MESSAGE folder1 DATA... (some time later)         < * FLAGS
         | CHANGE folder1 DATA... (much more time later)
         | 
         | (the * means that you didn't ask for this so it's not prefixed
         | by an ID that you gave) Here it's sort of solicited or at least
         | something you did on purpose, but there are other more
         | complicated cases where you'll receive data that you never
         | asked for. Again from loose memory but an example might be
         | > cmd1 OPEN folder1         > (do stuff with folder1)
         | (much later)         < * CLOSING folder1 WAS DELETED
         | 
         | That means that your client needs to always be listening for
         | data on the socket and reading it out even if the client is
         | sitting in the background, and that if you send a command you
         | might receive responses to other previous or unsolicited
         | commands before the response to the command you just sent.
         | 
         | It's a cool way to do what it wants to do for GUI clients in
         | particular because IMAP and GUIs have the same event-oriented
         | model. But it makes implementing IMAP as a library a little
         | more difficult because you need bidirectional hooks into the
         | containing application. And you can't easily just have a `if
         | POP3 then... else if IMAP4 then...` abstraction layer without
         | some work to make it happen. Heck even just having a function
         | that returns the list of messages requires a background thread
         | and a little bit of lying about what's happening underneath.
         | Leaving data on the socket unconsumed can get you disconnected
         | by keepalive checks so the background task is required if you
         | want to avoid that (which by observing mail.app it seems to
         | just accept the disconnection and reconnect when it happens).
         | Python has an imap library in the stdlib which "avoids" this by
         | being so low-level that it sidesteps some of the issues by
         | making you implement request/response on top of it, and its
         | model also makes perfect IDLE implementation difficult (maybe
         | impossible? but I didn't put enough time into it to prove
         | this).
         | 
         | Because of the complication many GUI clients don't actually
         | support the liveness built in to the protocol. They just ignore
         | any reponses they didn't ask for, don't use WATCH/IDLE, and do
         | the 15 minute polling cycle as if they were POP3. The protocol
         | has all of the tools to have the liveness of Google Docs but
         | I'm not aware of any GUIs that use it right.
        
           | alerighi wrote:
           | What is difficult about that? Every protocol works this way,
           | nothing new.
           | 
           | The fact that the server may send you messages even they are
           | not responses... of course, otherwise how do you think
           | notifications can work? The only other options is the client
           | to poll the server periodically (how it was done by older
           | clients, and iPhone client...), that is inefficient, consumes
           | resources and you don't get immediate notifications. With an
           | open socket the software stays in the background and gets
           | woken up by the OS when a byte arrives, how is it complex?
           | 
           | > The protocol has all of the tools to have the liveness of
           | Google Docs but I'm not aware of any GUIs that use it right
           | 
           | Never had any problem with Thunderbird. If you have
           | Thunderbird open in the background and the GMail web
           | interface both open at the same time most of the time you see
           | first the notification from Thunderbird than the email in the
           | GMail web interface. It's really fast, to the point that if I
           | send myself a mail from my phone it seems to arrive
           | immediately, and it's quite impressive.
        
             | ketralnis wrote:
             | > What is difficult about that?
             | 
             | It's not independently difficult per se, it's just
             | mismatched to the way that other protocols often work in a
             | way that, in practise, few clients implement well. Most
             | clients and libraries implement it _as if it were_ request-
             | response and as a result either produce wrong answers or
             | are notably less efficient as you note.
             | 
             | > Every protocol works this way, nothing new.
             | 
             | No? POP3 and HTTP as easy examples are simple blocking
             | request-response. Some do either pipelining or multiplexing
             | with the command-tagging, but don't have unsolicited
             | messages. I can think of only a few other comparable
             | protocols with this paradigm but "every" is just not true.
             | 
             | > of course, otherwise how do you think notifications can
             | work?
             | 
             | Yes? This is indeed _why_ it works this way. I don't know
             | what you're correcting me about. It does this to implement
             | notifications and liveness. We're agreeing.
             | 
             | > Never had any problem with Thunderbird
             | 
             | Thunderbird is one of the better implementers, yes. There
             | are messages that it ignores like "folder deleted" but
             | according to Dovecot https://www.dovecot.org/clients/ it
             | implements IDLE correctly which is uncommon among clients.
             | See https://wiki2.dovecot.org/Clients for more client
             | quirks. The dovecot config file
             | https://dovecot.org/doc/dovecot-example.conf has a
             | imap_client_workarounds setting for many of these common
             | bugs including "delay-newmail" which disables several of
             | the unsolicited message types until the server is confident
             | that the client is actually expecting to receive something.
             | 
             | In practise, in real life, clients get this wrong. That's
             | all I'm trying to say.
             | 
             | Hacker News always has the well-actuallies but I'm pretty
             | familiar with this and have implemented both an IMAP server
             | and client. I'm not sure what you're trying to "correct" me
             | about.
        
               | alerighi wrote:
               | > HTTP as easy examples are simple blocking request-
               | response
               | 
               | Well HTTP/1.1, HTTP/2 (and HTTP/3) surely not. You can
               | make more request on a single channel and also the server
               | can send you data you didn't requested (PUSH). Otherwise
               | a modern site with a ton of resources would either take a
               | minute to load or have to open 100 connections to the
               | server.
               | 
               | MQTT is another example of protocol that works this way.
               | 
               | > "every" is just not true
               | 
               | Every protocol that was born after the 90s, let's
               | rephrase it like that.
        
               | vidarh wrote:
               | The issue was not making multiple requests on a single
               | connection, but that IMAP can interleave and reorder
               | responses. It's still not _that_ hard, but it 's a
               | change.
               | 
               | HTTP/1.1 does _not_ allow data you didn 't request in
               | random places. You need to specifically request a feed of
               | server sent events. In every other instance you know that
               | the response that come back will be replies to a request
               | (in the case of SSE's, the reply will just keep coming as
               | long as the server sends events), and in the same order
               | as the requests. That means that a "dumb" client can just
               | synchronously send requests and read the reply in a
               | string request/response manner without worrying about
               | getting something else back. Neither of those constraints
               | hold for IMAP.
        
             | vidarh wrote:
             | No, every protocol does not work that way. A whole lot of
             | protocols has no concept of multiplexing a connection or
             | server initiated events. Since we're talking about e-mail,
             | neither SMTP or POP3 has either of these complexities (SMTP
             | allows client-initiated _pipelining_ if the client sends
             | the right greeting), but doesn 't allow the _server_ to
             | multiplex responses or initiate anything, POP3 allows none
             | of it at all). It 's not new now, but it _is_ moderately
             | more complex if you 're implementing a client.
             | 
             | I don't think it's quite as complex as suggested above,
             | though. You just want to provide access to the socket in
             | case the client wants to select() etc., and offer an API to
             | send a request, a queue to read responses from that allows
             | you to filter by request, and maybe a wrapper that sends a
             | request and waits for a reply matching that request (while
             | putting everything else onto the queue). Then the client
             | can decide if it wants to pretend the protocol is mostly
             | request/response or take proper advantage.
        
         | amelius wrote:
         | I'm wondering why they don't give every mail a UUID. Probably
         | because someone wanted to save a few bytes.
        
           | c0l0 wrote:
           | They do, on a per-session basis - but it's an optional
           | feature (that's supported by ~100% of all imap server
           | implementations).
        
             | KRAKRISMOTT wrote:
             | What's the name of this extension?
        
               | epilys wrote:
               | It's actually in the original IMAP4rev1 RFC:
               | https://www.rfc-editor.org/rfc/rfc3501#section-2.3.1.1
               | 
               | Using UIDs is opt-in, by prefixing `UID ` in front of
               | some commands. There are indeed extensions that add more
               | `UID ` commands to the protocol. I've implemented IMAP
               | clients and never used sequence numbers at all.
        
               | vidarh wrote:
               | UID was present already in RFC 1730 (IMAPv4):
               | 
               | https://www.rfc-editor.org/rfc/rfc1730#section-6.4.9
        
           | Mailtemi wrote:
           | Yep, just a few bites :) Especially if you're on vacation.
           | IMAP IDs can change, requiring the email client to re-
           | download all emails.
        
           | jcranmer wrote:
           | One of the extensions to IMAP is the UID extension, which
           | gives every email something akin to a UUID. It's technically
           | not mandatory, but virtually every email client is going to
           | try to use it if possible, and likely some email clients
           | don't even attempt to use message sequence numbers.
           | 
           | So you don't need to maintain message sequence numbers,
           | except for the few places in the protocol where only the
           | message sequence number is reported (e.g., the unsolicited
           | message deleted alerts). In practice, I would actually expect
           | that trying to use message sequence numbers would be buggier
           | than not using them. But servers still have to support them!
        
       | ihateolives wrote:
       | So basically no one does Google search anymore before naming
       | their product? https://gluonhq.com/
        
         | codetrotter wrote:
         | All the good names are taken.
         | 
         | As long as the product is different it's fine. IMAP library vs
         | some Java thing.
        
           | zitterbewegung wrote:
           | Moving to emojis is the next step. See huggingface.co
        
             | magicalhippo wrote:
             | Oh, it's the emoji? I've just seen the domain name out and
             | about so assumed it was Alien reference.
        
               | layer8 wrote:
               | Same here, though now that I think about it, a facehugger
               | is kinda the opposite.
        
               | codetrotter wrote:
               | Maybe. But if a hugging face hugs you, it probably hugs
               | your face. This would make the hugging face a face
               | hugger. (But it would not necessarily make it a
               | facehugger.)
        
               | codetrotter wrote:
               | Same, never made the connection to the emoji myself
               | either.
               | 
               | Then again, I don't use the "hugging face" emoji almost
               | ever. But even if I did use it, I would probably think of
               | it visually or just as the word "hug". That's how I think
               | of and use other emojis -- either visually or as a simple
               | word.
               | 
               | Either way, I will intentionally continue to think of
               | huggingface.co as being a reference to Alien facehuggers.
        
               | zitterbewegung wrote:
               | The joke would be facehugger but maybe it could be added
               | to Unicode.
        
         | maxnoe wrote:
         | Gluons are what holds protons together
        
         | HeckFeck wrote:
         | Someone might confuse it with the Gluon Gun as well:
         | https://half-life.fandom.com/wiki/Gluon_Gun
        
           | tylersmith wrote:
           | It's not very easy to confuse a software library with a
           | fictional gun. You have to try pretty hard.
        
             | HeckFeck wrote:
             | I was being a little sarcastic with my comment's parent,
             | but maybe this isn't the forum for it.
        
           | sporedro wrote:
           | Somewhat related but every time I see the AWS lambda I
           | immediately think half life.
        
         | cozzyd wrote:
         | More like https://pdg.lbl.gov
        
         | robin_reala wrote:
         | We live in a world where Cisco had both an iPhone[1] and iOS[2]
         | before Apple did.
         | 
         | [1] https://en.wikipedia.org/wiki/Linksys_iPhone
         | 
         | [2] https://en.wikipedia.org/wiki/Cisco_IOS
        
         | chomp wrote:
         | If people wanted unique project names, they wouldn't choose
         | dictionary nouns/verbs. By your rules, gluonhq shoulda chose a
         | different name because The Real Gluon is an OpenWRT project.
         | Come on, just let people name stuff.
        
       | cozzyd wrote:
       | gluon is a terrible name for an e-mail library due to asymptotic
       | freedom.
       | 
       | As soon as your e-mail leaves your server, it will spawn pions
       | and be screened.
        
       ___________________________________________________________________
       (page generated 2023-02-24 23:00 UTC)