Швейцарская компания Proton AG, развивающая сервисы Proton Mail и Proton VPN, представила IMAP-библиотеку Gluon, предназначенную для создания собственных IMAP-серверов. Библиотека поддерживает протокол IMAP4rev1 (RFC-3501) и задействована в новой версии сервиса Proton Bridge. При разработке основное внимание уделяется корректности реализации, стабильности, надёжности, удобству для разработчиков и высокой производительности. Код библиотеки написан на языке Go и распространяется под лицензией MIT.
В качестве причины создания новой реализации протокола IMAP упоминается желание получить одновременно надёжное и высокопроизводительное решение, способное работать с большими почтовыми ящиками. По оценке разработчиков Proton Mail существующие открытые IMAP-библиотеки либо испытывали проблемы с сопровождением, либо не масштабировались.
В Gluon также обеспечена корректная работа одновременно с несколькими клиентами, например, когда пользователь одновременно просматривает почту через Web-интерфейс и при помощи отдельного почтового клиента. Сложность организации подобной работы связана с тем, что в IMAP для идентификации почтовых сообщений используются порядковые номера сообщений в mailbox, но когда один клиент удаляет сообщение, порядковые номера сдвигаются и другой клиент должен учитывать этот сдвиг. При подобной ситуации сервер отправляет клиентам уведомление об изменении, но до подтверждения приёма уведомления сервер должен обеспечить корректную интерпретацию номеров сообщений в передаваемых командах.
Для решения подобной проблемы, а также для организации обработки нескольких параллельных соединений от одного клиента, в Gluon реализован механизм снапшотов. Суть данного механизма в том, что Gluon закрепляет за каждым клиентом свой снапшот почтового ящика (mailbox). В каждом снапшоте отражается связанное с клиентом уникальное представление mailbox, сохраняющее своё состояние и гарантирующее неизменность порядковых номеров, независимо от действий, выполненных другими клиентами.
Gluon отслеживает два состояния почтового ящика – постоянное и сессионное. Постоянное состояние отражает реальное положение сообщений в выбранном почтовом ящике, а сессионное состояние отражает представление каждого клиента о содержимом почтового ящика. Состояние IMAP хранится в СУБД, поддерживающей SQL. Бета-тестирование сервиса Proton Mail Bridge, переведённого на Gluon, показало значительное (1000%) увеличение скорости работы с IMAP.