WEBVTT captioned by mohsen

NOTE Introduction

00:00:00.000 --> 00:00:09.719
Greetings. Salaam. This is Mohsen Banan. محسن بنان.

00:00:09.720 --> 00:00:12.559
I am a software and internet engineer.

00:00:12.560 --> 00:00:14.519
I have been interested in email and

00:00:14.520 --> 00:00:17.199
Emacs for a very long  time.

00:00:17.200 --> 00:00:21.159
My interest in email started with X.400

00:00:21.160 --> 00:00:27.599
and the Red and Blue CCITT books -- circa 1988.

00:00:27.600 --> 00:00:31.999
Early  on, in the very early 1990s, I jumped ship

00:00:32.000 --> 00:00:35.279
and joined the Internet email movement.

00:00:35.280 --> 00:00:38.399
I am the primary author of two mobile email

00:00:38.400 --> 00:00:45.839
related Internet RFCs, RFC-2188 and RFC-2524.

00:00:45.840 --> 00:00:49.919
My interest in Emacs started in 1986 --

00:00:49.920 --> 00:00:54.959
It was Emacs version 17 then. By around 1988

00:00:54.960 --> 00:00:58.479
when Emacs version 18 was well in place,

00:00:58.480 --> 00:01:01.799
I started living inside of Emacs.

00:01:01.800 --> 00:01:06.479
My primary digital environment has been Emacs ever since.

00:01:06.480 --> 00:01:11.319
It has been a good life.

00:01:11.320 --> 00:01:16.999
It turns out that Emacs and email mix up really well.

00:01:17.000 --> 00:01:21.519
Here, in this presentation and in the context of

00:01:21.520 --> 00:01:26.799
Revisiting The Anatomy of Emacs Mail User Agents,

00:01:26.800 --> 00:01:30.319
With MARMEE (Multi-Account Resident

00:01:30.320 --> 00:01:33.399
Message Exchange Environment)

00:01:33.400 --> 00:01:35.559
I am offering my thoughts on this topic

00:01:35.560 --> 00:01:41.079
in this Emacs Conference 2022.

NOTE Mail and the digital ecosystem

00:01:41.080 --> 00:01:43.359
Long ago, I asked myself:

00:01:43.360 --> 00:01:49.119
"What should my ultimate mail environment be?"

00:01:49.120 --> 00:01:52.140
Over the past 20+ years, I have been exploring

00:01:52.141 --> 00:01:58.519
the concept of the "Ultimate Mail User Agent (MUA)".

00:01:58.520 --> 00:02:01.439
We do care about privacy, autonomy,

00:02:01.440 --> 00:02:05.039
morality, ethics, society and philosophy,

00:02:05.040 --> 00:02:10.679
so from the get go, proprietary (Haraam) environments

00:02:10.680 --> 00:02:14.199
such as Microsoft Office's Outlook

00:02:14.200 --> 00:02:20.159
and Google Office's Gmail were non-starters for me.

00:02:20.160 --> 00:02:23.159
But these are significant realities

00:02:23.160 --> 00:02:27.879
and we need to deal with these realities.

00:02:27.880 --> 00:02:30.199
Notice how Microsoft and Google

00:02:30.200 --> 00:02:36.079
have both framed their MUAs in the context of "office".

00:02:36.080 --> 00:02:38.719
That type of framing is correct.

00:02:38.720 --> 00:02:41.719
an MUA must be fully integrated

00:02:41.720 --> 00:02:46.559
in the totality of one's digital ecosystem.

00:02:46.560 --> 00:02:49.759
So, the Ultimate Mail User Agent

00:02:49.760 --> 00:02:53.399
must be part of the Ultimate Usage Environment

00:02:53.400 --> 00:02:57.599
of the Ultimate Digital Ecosystem.

00:02:57.600 --> 00:03:02.799
In the non-proprietary (Halaal) universe, clearly

00:03:02.800 --> 00:03:07.199
the ultimate usage environment is Emacs.

00:03:07.200 --> 00:03:10.879
Emacs is today's most potent and convivial

00:03:10.880 --> 00:03:15.159
non-proprietary usage environment.

00:03:15.160 --> 00:03:19.399
So, clearly, the ultimate Mail User Agent

00:03:19.400 --> 00:03:22.879
must be an integral part of Emacs.

NOTE Emacs and mail

00:03:22.880 --> 00:03:24.157
Having reached that conclusion,

00:03:24.158 --> 00:03:28.124
we then need to determine the specifics

00:03:28.125 --> 00:03:33.599
of the shape and the anatomy of Emacs' MUAs.

00:03:33.600 --> 00:03:36.039
We could have arrived at this conclusion

00:03:36.040 --> 00:03:38.239
from the reverse direction as well.

00:03:38.240 --> 00:03:41.599
Zawinski's Law states:

00:03:41.600 --> 00:03:46.479
Every program attempts to expand until it can read mail.

00:03:46.480 --> 00:03:49.119
Those programs which cannot so expand

00:03:49.120 --> 00:03:52.679
are replaced by ones which can.

00:03:52.680 --> 00:03:56.719
Jamie's point is very simple and obvious.

00:03:56.720 --> 00:03:59.759
The "App" that you "live in" all day

00:03:59.760 --> 00:04:05.439
should be your MUA and mail environment.

00:04:05.440 --> 00:04:09.559
I ask those who jumped ship, who abandoned Emacs

00:04:09.560 --> 00:04:15.879
in favor of VS Code: What about mail?

00:04:15.880 --> 00:04:21.279
Long ago, Emacs expanded to including MUAs.

00:04:21.280 --> 00:04:27.039
In fact there are many Emacs MUAs that you can choose from.

00:04:27.040 --> 00:04:30.599
If you are already hip with Emacs And Linux,

00:04:30.600 --> 00:04:34.639
you should definitely consider doing email in Emacs.

00:04:34.640 --> 00:04:39.079
But if you are not already hip with Emacs,

00:04:39.080 --> 00:04:43.359
I mean for new Emacs users, unfortunately,

00:04:43.360 --> 00:04:48.599
setting up and using email is not straight forward.

00:04:48.600 --> 00:04:54.519
We (I mean, Emacs developers) should work on that!

00:04:54.520 --> 00:04:57.359
Emacs offers a good number of MUAs with

00:04:57.360 --> 00:05:01.959
different characteristics to suit differing tastes.

00:05:01.960 --> 00:05:06.119
As of 2022, you can choose from the following MUAs:

00:05:06.120 --> 00:05:15.079
Gnus, VM, WanderLust, Mew, mu4e, notmuch.el, mh-e and Rmail.

00:05:15.080 --> 00:05:17.719
Over the years I have tried several of these

00:05:17.720 --> 00:05:20.119
and eventually landed on Gnus.

00:05:20.120 --> 00:05:25.519
The relevance column in this table simply and only

00:05:25.520 --> 00:05:28.079
reflects my taste.

00:05:28.080 --> 00:05:32.399
Throughout the rest of this presentation, I focus on Gnus.

NOTE The audience for this presentation

00:05:32.400 --> 00:05:36.199
I have 3 types of audiences in mind for this presentation.

00:05:36.200 --> 00:05:39.959
First, if you are already using Emacs

00:05:39.960 --> 00:05:42.439
as more than an editor,

00:05:42.440 --> 00:05:47.399
it makes good sense for you to also use Emacs as your MUA.

00:05:47.400 --> 00:05:50.759
There may well be some relevant information here for you

00:05:50.760 --> 00:05:52.319
in that situation.

00:05:52.320 --> 00:05:57.599
Second, for those interested in philosophy of Emacs,

00:05:57.600 --> 00:06:00.759
I go on some bigger picture tangents

00:06:00.760 --> 00:06:02.839
that may be of value to you.

00:06:02.840 --> 00:06:08.839
Third, I address some Emacs developers with some feedback,

00:06:08.840 --> 00:06:11.319
some suggestions, and some requests.

00:06:11.320 --> 00:06:14.599
The general model here is that

00:06:14.600 --> 00:06:17.079
we would collectively work towards

00:06:17.080 --> 00:06:19.799
improving what is on the table.

NOTE Monolithic mail user agents

00:06:19.800 --> 00:06:22.719
When a Mail User Agent is self-contained

00:06:22.720 --> 00:06:26.519
and includes implementation of mail protocols,

00:06:26.520 --> 00:06:29.079
we call it a Monolithic-MUA.

00:06:29.080 --> 00:06:33.879
Just as it is with the physical mail postal service,

00:06:33.880 --> 00:06:36.919
sending mail and receiving mail

00:06:36.920 --> 00:06:40.639
are fundamentally separate activities.

00:06:40.640 --> 00:06:42.839
And then there is mail processing.

00:06:42.840 --> 00:06:45.959
Based on these categorizations,

00:06:45.960 --> 00:06:49.679
Emacs has a set of mature libraries

00:06:49.680 --> 00:06:53.359
for composing mail, sending mail, and receiving mail.

00:06:53.360 --> 00:06:58.119
These are all independently well-documented

00:06:58.120 --> 00:07:02.479
and are part of the basic emacs Distribution.

00:07:02.480 --> 00:07:06.239
Emacs MUAs then use these common libraries

00:07:06.240 --> 00:07:09.519
to process mail (each somewhat differently).

00:07:09.520 --> 00:07:15.399
The primary benefit of the Monolithic-MUA approach

00:07:15.400 --> 00:07:19.599
is that Emacs MUAs then become self-contained

00:07:19.600 --> 00:07:22.959
and therefore multi-platform.

NOTE Split mail user agents

00:07:22.960 --> 00:07:25.559
But, when it comes to the question of merits of

00:07:25.560 --> 00:07:30.559
implementation of mail protocols in Elisp inside of Emacs,

00:07:30.560 --> 00:07:33.959
there is also another approach:

00:07:33.960 --> 00:07:36.159
that of a Split-MUA.

00:07:36.160 --> 00:07:40.559
Concept of a split-MUA is that of

00:07:40.560 --> 00:07:44.959
splitting the MUA into two different parts:

00:07:44.960 --> 00:07:47.159
One being the usage environment,

00:07:47.160 --> 00:07:50.319
and the other being mail protocols processing.

00:07:50.320 --> 00:07:54.719
The interface between these can be either

00:07:54.720 --> 00:07:57.839
direct (the upper box)

00:07:57.840 --> 00:08:00.279
or through protocols (the lower box).

00:08:00.280 --> 00:08:05.159
With Gnus, we primarily use the direct interface.

00:08:05.160 --> 00:08:09.639
The split-MUA model has many advantages

00:08:09.640 --> 00:08:12.599
over the monolithic-MUA model.

00:08:12.600 --> 00:08:17.279
With Split-MUAs, your messages are local,

00:08:17.280 --> 00:08:19.839
you can search them privately

00:08:19.840 --> 00:08:22.319
and access to your email is faster.

NOTE Gnus can be both

00:08:22.320 --> 00:08:28.119
Gnus can be used as both a Monolithic-MUA

00:08:28.120 --> 00:08:30.599
and also as a Split-MUA.

00:08:30.600 --> 00:08:35.399
Gnus and other Emacs MUAs are flexible enough

00:08:35.400 --> 00:08:39.119
to allow you to create your own split-MUA.

00:08:39.120 --> 00:08:42.519
For outgoing mail, Gnus can

00:08:42.520 --> 00:08:45.119
invoke a sendmail-like interface program.

00:08:45.120 --> 00:08:50.007
For incoming mail, Gnus can access Maildirs directly

00:08:50.008 --> 00:08:53.724
and let other programs imap-retrieve

00:08:53.725 --> 00:08:56.439
and update into maildirs.

00:08:56.440 --> 00:08:59.719
You can then search through your maildirs

00:08:59.720 --> 00:09:01.374
locally and privately

00:09:01.375 --> 00:09:04.559
with various mail-oriented search engines,

00:09:04.560 --> 00:09:07.319
and many have done so.

00:09:07.320 --> 00:09:11.399
For example, what we are seeing on this slide

00:09:11.400 --> 00:09:15.879
is from a 2014 Do It Yourself (DIY) recipe

00:09:15.880 --> 00:09:20.319
that one of our fellow Emacs conference participants,

00:09:20.320 --> 00:09:24.879
Adolfo, had published at the mentioned URL.

00:09:24.880 --> 00:09:29.719
The recipe in that slide is based on the following tools:

00:09:29.720 --> 00:09:35.079
mbsync, mu, mu4e, and msmtp.

00:09:35.080 --> 00:09:38.279
All our choices are different.

00:09:38.280 --> 00:09:42.399
There are many such recipes out there on the web.

NOTE Proprietary universes

00:09:42.400 --> 00:09:46.199
So, here, I don't want to provide

00:09:46.200 --> 00:09:50.439
yet another Emacs Split-MUA recipe.

00:09:50.440 --> 00:09:51.559
I want to do more.

00:09:51.560 --> 00:09:56.679
Instead, I want to target the contours of the ultimate MUA

00:09:56.680 --> 00:10:01.319
in the non-proprietary universe of digital ecosystems.

00:10:01.320 --> 00:10:05.439
But, first, let's take a look at what is

00:10:05.440 --> 00:10:07.479
happening in the proprietary universe.

00:10:07.480 --> 00:10:11.439
The 5 big American proprietary tech companies

00:10:11.440 --> 00:10:14.399
(Google, Microsoft, Apple, Facebook and Amazon)

00:10:14.400 --> 00:10:20.439
have created 5 competing enclaves as mostly separate

00:10:20.440 --> 00:10:22.999
and isolated digital ecosystem.

00:10:23.000 --> 00:10:27.839
In this slide, I am focusing on the first 3

00:10:27.840 --> 00:10:31.439
and each of their office and email environments.

00:10:31.440 --> 00:10:36.319
Let's clearly recognize that the economic model

00:10:36.320 --> 00:10:40.159
of these proprietary digital ecosystems is:

00:10:40.160 --> 00:10:42.159
"Surveillance Capitalism".

00:10:42.160 --> 00:10:45.799
So, when any of us goes there to get

00:10:45.800 --> 00:10:47.959
a free-of-charge email account,

00:10:47.960 --> 00:10:53.039
he has chosen to voluntarily forgo much of his privacy.

00:10:53.040 --> 00:10:55.799
And many have done so.

00:10:55.800 --> 00:10:59.919
Sadly, the rest of the world is becoming

00:10:59.920 --> 00:11:02.719
Americanized through the American Internet.

00:11:02.720 --> 00:11:08.439
As of 2022, almost %90 of Facebook's

00:11:08.440 --> 00:11:11.959
daily active users come from outside of the US.

00:11:11.960 --> 00:11:17.159
Also, with respect to email, each of the enclaves

00:11:17.160 --> 00:11:20.039
have MUAs that are fully integrated

00:11:20.040 --> 00:11:22.439
in their digital ecosystems

00:11:22.440 --> 00:11:24.599
in the form of an office environment

00:11:24.600 --> 00:11:29.839
comprising of address book, calendar, time management

00:11:29.840 --> 00:11:33.199
and planning tools and multi-lingual authoring

00:11:33.200 --> 00:11:36.239
and various other integrated tools.

NOTE Non-proprietary universes

00:11:36.240 --> 00:11:40.839
Now, let's focus on the right side of this picture.

00:11:40.840 --> 00:11:43.519
On the non-proprietary side,

00:11:43.520 --> 00:11:46.239
based on the Western FLOSS model,

00:11:46.240 --> 00:11:49.479
we have ended up with lots of components.

00:11:49.480 --> 00:11:52.239
We have Debian as a platform,

00:11:52.240 --> 00:11:58.919
we have Emacs as an editor-centered office environment

00:11:58.920 --> 00:12:03.439
and we have Gnus as an incredibly powerful MUA.

00:12:03.440 --> 00:12:07.839
But on the non-proprietary side we don't have anything

00:12:07.840 --> 00:12:12.079
that can reasonably be considered a digital ecosystem.

00:12:12.080 --> 00:12:16.439
I mean, the services aspect is missing.

NOTE By*

00:12:16.440 --> 00:12:20.799
Over the past two decades I have created

00:12:20.800 --> 00:12:24.399
quite an elaborate digital ecosystem for myself.

00:12:24.400 --> 00:12:26.759
It is called: By*.

00:12:26.760 --> 00:12:30.839
The Libre-Halaal ByStar Digital Ecosystem

00:12:30.840 --> 00:12:35.439
is being built to provide autonomy-oriented services

00:12:35.440 --> 00:12:37.359
on internet scale.

00:12:37.360 --> 00:12:42.919
The * in ByStar stands for Unix's globbing symbol,

00:12:42.920 --> 00:12:46.919
signifying that our scope is everything.

00:12:46.920 --> 00:12:52.039
Notice in this bigger picture that in the red box,

00:12:52.040 --> 00:12:58.439
our focus remains to be Emacs, Gnus and the ultimate MUA.

00:12:58.440 --> 00:13:03.439
I am not here to sell you ByStar, but perhaps

00:13:03.440 --> 00:13:06.239
you should be in the market for something like that.

00:13:06.240 --> 00:13:10.879
We need non-proprietary digital ecosystems.

00:13:10.880 --> 00:13:13.359
Very briefly, I'll give you

00:13:13.360 --> 00:13:16.319
some pointers to the full ByStar story.

00:13:16.320 --> 00:13:23.239
The full ByStar story is a 250 plus pages book titled:

00:13:23.240 --> 00:13:26.079
Nature Of Polyexistentials,

00:13:26.080 --> 00:13:28.399
Basis For Abolishment Of

00:13:28.400 --> 00:13:31.319
The Western Intellectual Property Rights Regime,

00:13:31.320 --> 00:13:33.479
And Introduction Of

00:13:33.480 --> 00:13:36.359
The Libre-Halaal ByStar Digital Ecosystem.

00:13:36.360 --> 00:13:42.039
I have it self-published on my own ByName public web page.

00:13:42.040 --> 00:13:46.639
The ByStar story starts with understanding of the

00:13:46.640 --> 00:13:48.959
Nature Of Polyexistentials.

00:13:48.960 --> 00:13:53.839
Polyexistentials inherently exist in multiples.

00:13:53.840 --> 00:13:56.959
Software is a polyexistential.

00:13:56.960 --> 00:14:01.919
Polyexistentials are naturally non-scarce,

00:14:01.920 --> 00:14:06.279
and making polyexistential artificially scarce,

00:14:06.280 --> 00:14:08.599
which is what the Western

00:14:08.600 --> 00:14:11.119
intellectual property rights regime does,

00:14:11.120 --> 00:14:13.599
is counter to nature.

00:14:13.600 --> 00:14:17.639
Polyexistentials are unownable

00:14:17.640 --> 00:14:20.039
and should not be considered property.

00:14:20.040 --> 00:14:25.079
The Western IPR regime is in conflict with nature.

00:14:25.080 --> 00:14:29.039
But, the book is more than just philosophy.

00:14:29.040 --> 00:14:32.359
In that book I also cover

00:14:32.360 --> 00:14:35.799
the bigger picture of healthy digital ecosystems

00:14:35.800 --> 00:14:39.359
which also includes the topic of this presentation.

00:14:39.360 --> 00:14:43.399
I'd be interested in your thoughts and your feedback,

00:14:43.400 --> 00:14:45.679
if you choose to dig deeper.

00:14:45.680 --> 00:14:50.999
And if you want to dig deeper, here are some links.

00:14:51.000 --> 00:14:55.079
By* is about re-decentralization

00:14:55.080 --> 00:14:57.159
of Internet application services.

00:14:57.160 --> 00:15:00.759
Among other things, ByStar provides

00:15:00.760 --> 00:15:05.159
complete own-your-email services. I mean,

00:15:05.160 --> 00:15:10.319
private Hillary-Clinton-Style mail servers for everyone.

00:15:10.320 --> 00:15:16.519
There is an overview of ByStar at by-star.net.

NOTE Libre-Halaal

00:15:16.520 --> 00:15:21.199
You may have noticed that I consistently use

00:15:21.200 --> 00:15:25.479
the "Libre-Halaal" label with ByStar.

00:15:25.480 --> 00:15:28.919
Halaal is a very sensitive word.

00:15:28.920 --> 00:15:30.719
I am a Moslem.

00:15:30.720 --> 00:15:35.919
But my use of Halaal is not in a religious context.

00:15:35.920 --> 00:15:39.079
It is in a philosphical context.

00:15:39.080 --> 00:15:42.759
And the scope of the "Libre-Halaal" label

00:15:42.760 --> 00:15:46.439
is manner-of-existence of Software and Services.

00:15:46.440 --> 00:15:50.599
It is not about Halaal-ness with respect to

00:15:50.600 --> 00:15:54.959
function and use of Software and Services.

00:15:54.960 --> 00:15:58.239
Unfortunately, the word Halaal

00:15:58.240 --> 00:16:02.319
and the concept of Halaal does not exist in English.

00:16:02.320 --> 00:16:06.759
So, first I introduce it into Globish.

00:16:06.760 --> 00:16:12.799
I have done so in PLPC-120039.

00:16:12.800 --> 00:16:18.199
Further, I explain as to why labels

00:16:18.200 --> 00:16:22.639
of Open Source and Free Software are both ill-directed.

00:16:22.640 --> 00:16:25.839
We then carefully define

00:16:25.840 --> 00:16:29.999
"Libre-Halaal Software" and "Libre-Halaal Services".

00:16:30.000 --> 00:16:33.919
Notice that last link.

00:16:33.920 --> 00:16:36.199
I bet, this is the first time

00:16:36.200 --> 00:16:40.679
that anyone includes a link to his "Open Business Plan"

00:16:40.680 --> 00:16:43.159
in an Emacs Conference.

00:16:43.160 --> 00:16:46.559
I hope others would do this as well.

00:16:46.560 --> 00:16:49.679
There is appetite out there

00:16:49.680 --> 00:16:53.639
for privacy- and autonomy-oriented digital ecosystems,

00:16:53.640 --> 00:16:57.759
and there is no conflict between honest business,

00:16:57.760 --> 00:17:01.039
honest profit, and Libre-Halaal Software

00:17:01.040 --> 00:17:02.919
and Libre-Halaal Services.

00:17:02.920 --> 00:17:08.039
The sub-title of our open business plan is:

00:17:08.040 --> 00:17:12.879
"An Inversion to the Proprietary Internet Services Model".

00:17:12.880 --> 00:17:20.879
And here are the same links as a native Reveal slide.

00:17:20.880 --> 00:17:24.679
If instead of a video, you are viewing

00:17:24.680 --> 00:17:27.399
this presentation as a Reveal web page,

00:17:27.400 --> 00:17:31.319
you can just click on the pointers and URLs.

NOTE The BISOS integration framework

00:17:31.320 --> 00:17:36.879
So, what was the point of bringing ByStar

00:17:36.880 --> 00:17:38.119
into this presentation?

00:17:38.120 --> 00:17:42.319
In tangible terms, what have we gotten out of

00:17:42.320 --> 00:17:45.639
the tangent we took on the ByStar bigger picture?

00:17:45.640 --> 00:17:50.839
Of course we have the ByStar Digital Ecosystem itself.

00:17:50.840 --> 00:17:54.879
But that is not immediately relevant to this presentation.

00:17:54.880 --> 00:17:59.959
Here, through BISOS we now have

00:17:59.960 --> 00:18:04.359
an integration framework, which we definitely needed.

00:18:04.360 --> 00:18:07.879
We now have BISOS-MARMEE,

00:18:07.880 --> 00:18:11.519
Multi-Account Resident Mail Exchange Environment,

00:18:11.520 --> 00:18:13.679
which is a consistent set

00:18:13.680 --> 00:18:17.639
of MUA-related software components --- which we need.

00:18:17.640 --> 00:18:23.159
We also needed to augment Emacs in our own terms,

00:18:23.160 --> 00:18:25.919
so we have Blee for that,

00:18:25.920 --> 00:18:29.959
ByStar Libre-Halaal Emacs Environment,

00:18:29.960 --> 00:18:32.919
is ByStar ecosystemized Emacs.

00:18:32.920 --> 00:18:37.679
And finally Blee-Gnus, which is

00:18:37.680 --> 00:18:40.639
Gnus and MARMEE integrated with Blee.

00:18:40.640 --> 00:18:46.479
With these in place, we can now dive deeper into MARMEE.

00:18:46.480 --> 00:18:53.119
The idea of MARMEE, is that of packaging together

00:18:53.120 --> 00:18:56.079
the mail protocols parts of the Split-MUA.

00:18:56.080 --> 00:19:00.799
MARMEE (which is of course in the context of BISOS)

00:19:00.800 --> 00:19:03.679
is the green box in this slide.

00:19:03.680 --> 00:19:08.519
For outgoing mail, we use an altered qmail.

00:19:08.520 --> 00:19:12.679
We will be looking deeper into qmail a bit later.

00:19:12.680 --> 00:19:17.559
For incoming mail, we are using offlineimap

00:19:17.560 --> 00:19:20.119
which is oauth2 aware.

NOTE BISOS-MARMEE

00:19:20.120 --> 00:19:23.439
Before going into more details,

00:19:23.440 --> 00:19:26.519
let's take a look at the parts lists for

00:19:26.520 --> 00:19:29.359
BISOS-MARMEE and Blee-Gnus.

00:19:29.360 --> 00:19:33.719
MARMEE is a collection of Python-based libraries

00:19:33.720 --> 00:19:37.479
and Debian packages that provide for rich sending

00:19:37.480 --> 00:19:40.279
and receiving of email outside of Emacs.

00:19:40.280 --> 00:19:44.239
Here is our BISOS-MARMEE parts list.

00:19:44.240 --> 00:19:48.599
MARMEE features include tracked mail Sending

00:19:48.600 --> 00:19:51.919
for confirmed mail communications

00:19:51.920 --> 00:19:54.599
and email distribution facilities

00:19:54.600 --> 00:19:57.559
(say, similar to Constant Contact).

00:19:57.560 --> 00:20:02.079
For Delivery Status Notification (DSN),

00:20:02.080 --> 00:20:06.039
we have adopted flufl.bounce.

00:20:06.040 --> 00:20:10.879
I'll be touching on everything that is qmail-related,

00:20:10.880 --> 00:20:17.319
namely qmail-remote.cs and mailfront, in a separate slide.

00:20:17.320 --> 00:20:21.759
notmuch is our choice of mail search engine.

NOTE Blee-Gnus

00:20:21.760 --> 00:20:27.319
Similarly, here is our Blee-Gnus Parts List.

00:20:27.320 --> 00:20:33.439
Blee-Gnus is Gnus and MARMEE integrated with BISOS and Blee.

00:20:33.440 --> 00:20:38.599
Notice mentions of org-msg and polymode here.

00:20:38.600 --> 00:20:42.879
Later, I'll expand on these in the context of

00:20:42.880 --> 00:20:47.679
transitioning from Message-Mode to Message-Polymode.

NOTE In combination

00:20:47.680 --> 00:20:52.199
With these parts in place,

00:20:52.200 --> 00:20:55.279
now let's see how they will all come together.

00:20:55.280 --> 00:20:59.999
Gnus is very flexible, and in combination with MARMEE,

00:21:00.000 --> 00:21:03.639
it can create an incredibly powerful MUA.

00:21:03.640 --> 00:21:07.279
On this slide, note the boxes

00:21:07.280 --> 00:21:10.319
that include the FPs label.

00:21:10.320 --> 00:21:14.839
FP stand for File Parameters.

00:21:14.840 --> 00:21:18.519
It is the basis of BISOS's configuration

00:21:18.520 --> 00:21:20.039
and secrets management.

00:21:20.040 --> 00:21:24.319
Notice that it has consistent agents

00:21:24.320 --> 00:21:27.839
inside of Emacs and on the OS.

00:21:27.840 --> 00:21:29.919
This is a big deal

00:21:29.920 --> 00:21:34.719
in that it can reduce user visible configuration complexity.

NOTE X822-Bus

00:21:34.720 --> 00:21:39.759
Also, notice the X822-Bus here.

00:21:39.760 --> 00:21:43.999
The idea of X822-Bus is that of

00:21:44.000 --> 00:21:49.839
allowing for communication among user's preferences, Gnus

00:21:49.840 --> 00:21:53.599
and MARMEE-qmail through addition of X- fields

00:21:53.600 --> 00:21:57.959
in RFC-822 message headers.

00:21:57.960 --> 00:22:03.599
X822-Bus is used for selection of mail sending agents

00:22:03.600 --> 00:22:08.839
and specification of delivery status parameters.

NOTE bystar-qmail

00:22:08.840 --> 00:22:12.279
Of key significance in this picture

00:22:12.280 --> 00:22:15.479
is our choice of qmail for outgoing mail.

00:22:15.480 --> 00:22:22.519
Compared to sendmail, postfix, exim,

00:22:22.520 --> 00:22:25.399
and other conventional MTAs;

00:22:25.400 --> 00:22:31.719
the qmail ecosystem is far more flexible and potent.

00:22:31.720 --> 00:22:34.599
We are not using qmail as is.

00:22:34.600 --> 00:22:37.999
Ours is called bystar-qmail.

00:22:38.000 --> 00:22:41.799
When we use it as a traditional MTA,

00:22:41.800 --> 00:22:45.439
we refer to it as PALS-qmail.

00:22:45.440 --> 00:22:52.599
And when we use it on the MUA side, we call it MARMEE-qmail.

00:22:52.600 --> 00:22:56.599
Just like Emacs, qmail has

00:22:56.600 --> 00:22:59.959
a solid core and a flexible periphery.

00:22:59.960 --> 00:23:04.479
All our alterations have been on the periphery.

00:23:04.480 --> 00:23:07.890
We have replaced qmail-remote

00:23:07.891 --> 00:23:14.479
with our own Python implementation called qmail-remote.cs.

00:23:14.480 --> 00:23:20.919
By being in Python, it can do a lot more a lot more easily.

00:23:20.920 --> 00:23:26.540
For example, qmail-remote.cs interacts with

00:23:26.541 --> 00:23:33.079
Google Oauth2 APIs and allows you to send through Gmail.

00:23:33.080 --> 00:23:36.399
This is shown with the red circle.

00:23:36.400 --> 00:23:43.639
We have also replaced qmail-smtpd with mailfront,

00:23:43.640 --> 00:23:46.159
shown with a blue circle.

00:23:46.160 --> 00:23:51.359
This allows us to use MARMEE Split-MUA

00:23:51.360 --> 00:23:53.999
through protocol interfaces.

00:23:54.000 --> 00:23:56.559
Let's take a look at that.

NOTE Using MARMEE with other MUAs outside Emacs

00:23:56.560 --> 00:24:02.719
Previously we looked at the "Direct Interface" of MARMEE,

00:24:02.720 --> 00:24:08.479
specifically, qmail-inject and Maildir for Gnus.

00:24:08.480 --> 00:24:11.479
But what if we wanted to use

00:24:11.480 --> 00:24:15.159
MARMEE with other MUAs outside of Emacs?

00:24:15.160 --> 00:24:18.799
That can be done through the "Protocol Interface".

00:24:18.800 --> 00:24:22.039
MARMEE also includes "mailfront"

00:24:22.040 --> 00:24:27.439
which can function as an SMTP submit server for localhost.

00:24:27.440 --> 00:24:30.599
This way, we can configure

00:24:30.600 --> 00:24:36.239
the outgoing mail part of any MUA to point to the localhost

00:24:36.240 --> 00:24:41.399
and have MARMEE-qmail function as an outgoing proxy.

NOTE Incoming mail

00:24:41.400 --> 00:24:47.919
For incoming mail, MARMEE-Split-MUA-Protocol-Interface

00:24:47.920 --> 00:24:51.359
includes "Courier", which can function

00:24:51.360 --> 00:24:54.079
as an IMAP server for localhost.

00:24:54.080 --> 00:24:58.519
This way, we can configure the incoming mail part

00:24:58.520 --> 00:25:02.319
of any MUA to point to the localhost

00:25:02.320 --> 00:25:06.519
and have MARMEE function as an incoming proxy

00:25:06.520 --> 00:25:10.759
by serving the local Maildir to the MUA.

NOTE Licensing and project status

00:25:10.760 --> 00:25:18.079
All sources for all of ByStar, BISOS,

00:25:18.080 --> 00:25:23.439
Blee and MARMEE are subject to Affero GPL.

00:25:23.440 --> 00:25:28.319
The sources and documentation are all republished

00:25:28.320 --> 00:25:30.559
under various "Organizations"

00:25:30.560 --> 00:25:35.439
under github.com/mohsenBanan

00:25:35.440 --> 00:25:40.679
All of ByStar, BISOS, Blee and MARMEE

00:25:40.680 --> 00:25:42.839
reflect work in progress,

00:25:42.840 --> 00:25:46.319
and we are NOT recruiting users at this time.

00:25:46.320 --> 00:25:49.279
For more than two decades,

00:25:49.280 --> 00:25:53.159
I have been using these all in that bigger context.

00:25:53.160 --> 00:25:56.239
They are mostly real,

00:25:56.240 --> 00:26:01.399
but so far, just for myself and a few other engineers.

00:26:01.400 --> 00:26:06.519
Our model is similar to God's early days.

00:26:06.520 --> 00:26:08.319
You may ask:

00:26:08.320 --> 00:26:12.119
"How did God create all of this in just 7 days?"

00:26:12.120 --> 00:26:17.199
Well, easy, He did not have an installed base to deal with.

NOTE Installing MARMEE

00:26:17.200 --> 00:26:24.519
You can obtain and install MARMEE in two ways. As is:

00:26:24.520 --> 00:26:29.439
as standalone-MARMEE, you can just

00:26:29.440 --> 00:26:31.919
pip install bisos.marmee.

00:26:31.920 --> 00:26:35.879
For the Gnus part you are completely on your own.

00:26:35.880 --> 00:26:40.279
Or on a Debian-11, you can just run

00:26:40.280 --> 00:26:43.399
the bisos bootstrap script.

00:26:43.400 --> 00:26:48.359
That way you will have all of BISOS, which includes MARMEE

00:26:48.360 --> 00:26:52.159
and you will have Blee, which includes Blee-Gnus.

00:26:52.160 --> 00:26:54.719
If you plan to do so,

00:26:54.720 --> 00:26:58.839
I suggest that you first try it in a disposable VM.

00:26:58.840 --> 00:27:02.159
BISOS and Blee are large.

00:27:02.160 --> 00:27:06.359
Many apt and pip packages will be installed!

00:27:06.360 --> 00:27:11.839
And here are the same links as a native Reveal slide.

00:27:11.840 --> 00:27:17.519
If you are viewing this presentation as Reveal.js web page,

00:27:17.520 --> 00:27:20.479
you can just click on the pointers and URLs.

NOTE MARMEE as an Emacs "Common Agent"

00:27:20.480 --> 00:27:25.359
Let's consider MARMEE as an Emacs "Common Agent".

00:27:25.360 --> 00:27:28.919
By "Common-Agent" I mean a capability

00:27:28.920 --> 00:27:30.959
which Emacs builds on

00:27:30.960 --> 00:27:33.759
and which other Apps can also use.

00:27:33.760 --> 00:27:38.479
Emacs has a very rich applications development framework

00:27:38.480 --> 00:27:41.119
for absorbing common-agents.

00:27:41.120 --> 00:27:45.474
Consider how magit has absorbed git,

00:27:45.475 --> 00:27:49.774
or how flycheck has absorbed mypy

00:27:49.775 --> 00:27:54.199
or how EAF does its work outside of Emacs ---

00:27:54.200 --> 00:27:57.919
that too can be considered a common-agent.

00:27:57.920 --> 00:28:02.039
The common-agent model permits us

00:28:02.040 --> 00:28:04.599
to do more outside of Emacs.

00:28:04.600 --> 00:28:08.639
Common-agents maximize social benefits

00:28:08.640 --> 00:28:10.559
and are more convivial.

00:28:10.560 --> 00:28:15.479
For example, any MUA can profit from MARMEE.

00:28:15.480 --> 00:28:18.439
But we don't have good ways of

00:28:18.440 --> 00:28:21.399
packaging Emacs and its packages

00:28:21.400 --> 00:28:23.639
with their common-agents.

00:28:23.640 --> 00:28:28.359
Instead, we usually end up with DIY recipes.

00:28:28.360 --> 00:28:32.479
This is why I am contextualizing

00:28:32.480 --> 00:28:35.439
Emacs inside of Blee and BISOS.

00:28:35.440 --> 00:28:37.999
That is what they are for.

00:28:38.000 --> 00:28:40.424
And that is why I consider them

00:28:40.425 --> 00:28:43.199
immediately relevant to this presentation.

00:28:43.200 --> 00:28:47.719
With an incredibly powerful Display Engine,

00:28:47.720 --> 00:28:51.279
and an incredibly powerful Elisp Engine,

00:28:51.280 --> 00:28:55.039
and an incredibly powerful Input Methods Engine,

00:28:55.040 --> 00:28:59.559
and an incredibly powerful Common-Agents paradigm,

00:28:59.560 --> 00:29:02.707
Emacs has the potential of being

00:29:02.708 --> 00:29:06.407
any non-proprietary digital ecosystem's

00:29:06.408 --> 00:29:08.879
preferred usage environment.

00:29:08.880 --> 00:29:14.090
I am in favor of putting more around Emacs

00:29:14.091 --> 00:29:17.440
and strengthening integration of Emacs

00:29:17.441 --> 00:29:19.719
with Debian, explicitly,

00:29:19.720 --> 00:29:22.839
perhaps even at the cost of

00:29:22.840 --> 00:29:26.599
de-emphasizing its multi-platform attribute.

00:29:26.600 --> 00:29:30.319
A smaller Emacs is a better Emacs.

00:29:30.320 --> 00:29:33.719
Notice that in this slide,

00:29:33.720 --> 00:29:37.279
I have used many arrows in many colors.

00:29:37.280 --> 00:29:45.599
Much of Emacs's power comes from its ability

00:29:45.600 --> 00:29:47.759
to absorb and to integrate.

00:29:47.760 --> 00:29:51.919
Tomohiro is right on the mark when he says,

00:29:51.920 --> 00:29:55.359
"The reason why Emacs platform is good

00:29:55.360 --> 00:29:58.119
is that it cooperates with OS,

00:29:58.120 --> 00:30:00.919
not because it is good by itself."

00:30:00.920 --> 00:30:03.999
I am suggesting that we should

00:30:04.000 --> 00:30:06.519
raise the bar from the OS

00:30:06.520 --> 00:30:09.839
to the entirety of our digital ecosystem.

00:30:09.840 --> 00:30:13.039
There are many models

00:30:13.040 --> 00:30:15.839
for Emacs to cooperate with the OS

00:30:15.840 --> 00:30:19.319
and with applications and with services.

00:30:19.320 --> 00:30:25.439
The colors of arrows in the previous slide correspond to

00:30:25.440 --> 00:30:28.879
the model of interface of the common-agent:

00:30:28.880 --> 00:30:33.999
for example, sub-process invocation, pipe-based

00:30:34.000 --> 00:30:39.359
asynchronous interface, or file-based interactions.

NOTE Consistent configuration

00:30:39.360 --> 00:30:44.759
One important aspect of common-agent paradigm is that

00:30:44.760 --> 00:30:50.399
both the common-agent and its Emacs App

00:30:50.400 --> 00:30:53.039
need to be configured consistently.

00:30:53.040 --> 00:30:57.959
In MARMEE and Blee-Gnus,

00:30:57.960 --> 00:31:01.919
we use File-Params to accomplish this.

00:31:01.920 --> 00:31:06.959
In BISOS, there is a Python interface to File-Params,

00:31:06.960 --> 00:31:10.239
there is a Bash interface to File-Params,

00:31:10.240 --> 00:31:15.719
and in Blee, there is an Elisp interface to File-Params.

00:31:15.720 --> 00:31:18.919
So, configurations are extended.

00:31:18.920 --> 00:31:23.279
Furthermore, File-Params can be encrypted,

00:31:23.280 --> 00:31:26.959
and credentials can be protected and shared.

00:31:26.960 --> 00:31:33.919
This is a significant improvement over .authinfo

00:31:33.920 --> 00:31:36.959
and its more recent incarnations.

NOTE Feedback and requests

00:31:36.960 --> 00:31:41.199
EmacsConf could be a great place

00:31:41.200 --> 00:31:44.374
for users to provide feedback to developers

00:31:44.375 --> 00:31:47.879
and for developers to suggest to developers.

00:31:47.880 --> 00:31:52.759
In that spirit, my primary audience in this part

00:31:52.760 --> 00:31:54.839
are fellow Emacs developers.

00:31:54.840 --> 00:32:00.039
BISOS-MARMEE and Blee-Gnus are starting points.

00:32:00.040 --> 00:32:02.439
We can collectively work

00:32:02.440 --> 00:32:04.679
towards improving what is in place.

00:32:04.680 --> 00:32:07.919
Some such improvements involve

00:32:07.920 --> 00:32:11.919
collaboration among various Emacs developers.

00:32:11.920 --> 00:32:16.599
Here, I am making some explicit requests

00:32:16.600 --> 00:32:19.559
from some of the relevant emacs developers.

00:32:19.560 --> 00:32:24.159
At most, these are requests and invitations.

00:32:24.160 --> 00:32:28.519
For each of these requests, I am providing links

00:32:28.520 --> 00:32:30.119
for additional details.

00:32:30.120 --> 00:32:33.039
In due course, I'll follow up

00:32:33.040 --> 00:32:35.279
in the Emacs developers mailing list.

NOTE X-Message-SMTP-Method: qmail

00:32:35.280 --> 00:32:41.879
Gnus uses X-Message-SMTP-Method

00:32:41.880 --> 00:32:45.119
for selection of Mail-Sending-Agent.

00:32:45.120 --> 00:32:50.519
Even though all the qmail injection code is still in Gnus,

00:32:50.520 --> 00:32:58.279
support for "X-Message-SMTP-Method: qmail" is missing.

00:32:58.280 --> 00:33:02.759
It takes 2 lines of code to revive it.

00:33:02.760 --> 00:33:07.399
With regards to (1), qmail was previously supported in Gnus.

00:33:07.400 --> 00:33:11.319
Lars, can you please reactivate it? Thanks.

NOTE X-Message-Send-Method

00:33:11.320 --> 00:33:16.439
(2) is a terminology suggestion.

00:33:16.440 --> 00:33:21.559
The term X-Message-SMTP-Method violates conceptual layering.

00:33:21.560 --> 00:33:27.079
Please consider changing it to X-Message-Send-Method.

00:33:27.080 --> 00:33:33.719
In a Split-MUA setup, Gnus need not know about SMTP at all.

00:33:33.720 --> 00:33:36.599
We just need to pass information

00:33:36.600 --> 00:33:39.319
to a Mail-Sending-Agent selector.

NOTE Sharing config info and secrets with common agents

00:33:39.320 --> 00:33:44.439
(3) is simply a design suggestion for

00:33:44.440 --> 00:33:46.759
which I prepared the context.

00:33:46.760 --> 00:33:51.839
.authinfo and Emacs auth-source library

00:33:51.840 --> 00:33:54.199
are too Emacs-centric.

00:33:54.200 --> 00:33:57.839
We need to share config info and secrets

00:33:57.840 --> 00:34:00.799
between common-agents and Emacs.

00:34:00.800 --> 00:34:03.639
The File Parameters approach

00:34:03.640 --> 00:34:05.799
can be a general-purpose solution.

00:34:05.800 --> 00:34:10.839
Is it reasonable to extend auth-source library to

00:34:10.840 --> 00:34:12.719
support File Params?

00:34:12.720 --> 00:34:16.519
I'll cover (4) in the next slide.

00:34:16.520 --> 00:34:21.159
(5) is a philosophical common suggestion

00:34:21.160 --> 00:34:26.439
to all Emacs developers. We need to better cultivate

00:34:26.440 --> 00:34:30.879
the model of Common-Agents integration with Emacs.

00:34:30.880 --> 00:34:39.599
And here are the same links as a native Reveal slide.

NOTE message-polymode

00:34:39.600 --> 00:34:42.799
A mail message comprises of

00:34:42.800 --> 00:34:45.599
Envelope, Header and BodyParts.

00:34:45.600 --> 00:34:49.439
Each of these have their own syntax (their own mode).

00:34:49.440 --> 00:34:53.639
Conceivably Each BodyPart has its own mode.

00:34:53.640 --> 00:34:59.439
So, we need to evolve Message-Mode into Message-Polymode.

00:34:59.440 --> 00:35:03.719
More or less by default, org-mode has become

00:35:03.720 --> 00:35:08.999
the beginnings of "Emacs Native Markup Language -- ENML".

00:35:09.000 --> 00:35:14.399
With org-msg you can write your emails in org-mode ---

00:35:14.400 --> 00:35:16.559
destined as html.

00:35:16.560 --> 00:35:19.559
org-msg needs to become

00:35:19.560 --> 00:35:22.239
an integral part of Message-Polymode.

00:35:22.240 --> 00:35:25.119
It would be heavenly

00:35:25.120 --> 00:35:29.959
if Lars, Jérémy and Vitalie could collaborate

00:35:29.960 --> 00:35:34.079
and give us the needed Message-Polymode. Thank you.

NOTE Vertical slice use cases

00:35:34.080 --> 00:35:38.119
One way to verify that we have not gone astray

00:35:38.120 --> 00:35:42.759
in our horizontal bigger pictures is to verify them

00:35:42.760 --> 00:35:46.919
through the concept of "Vertical Slice Use Cases".

00:35:46.920 --> 00:35:50.799
Let one use case be reading and writing

00:35:50.800 --> 00:35:54.639
of mail on multiple gmail accounts with Gnus.

00:35:54.640 --> 00:35:59.319
Google now requires use of oauth2 tokens

00:35:59.320 --> 00:36:02.439
which MARMEE can do outside of emacs.

00:36:02.440 --> 00:36:05.679
There is a recent email thread

00:36:05.680 --> 00:36:09.119
on that in the emacs-devel mailing list.

00:36:09.120 --> 00:36:14.279
Let another use case be that of tracking delivery

00:36:14.280 --> 00:36:18.679
and non-delivery reports for custom envelope addresses

00:36:18.680 --> 00:36:26.039
of byname.net (part of ByStar) autonomous mail services.

00:36:26.040 --> 00:36:30.319
I would have loved to walk you through these

00:36:30.320 --> 00:36:32.959
vertical slice use cases

00:36:32.960 --> 00:36:36.439
as screen captures of my Blee environment.

00:36:36.440 --> 00:36:40.639
For that, I need at least another 20 minutes.

00:36:40.640 --> 00:36:43.079
But my time is up.

00:36:43.080 --> 00:36:46.719
So, let's consider this as the first

00:36:46.720 --> 00:36:48.919
in a series of presentations

00:36:48.920 --> 00:36:51.799
where next in this series could be

00:36:51.800 --> 00:36:55.479
the mentioned two vertical slice use cases.

00:36:55.480 --> 00:36:59.279
Perhaps there could be another presentation

00:36:59.280 --> 00:37:02.879
on this topic in EmacsConf 2023.

00:37:02.880 --> 00:37:06.759
This document was produced entirely with

00:37:06.760 --> 00:37:10.799
Libre-Halaal Software, and is published using

00:37:10.800 --> 00:37:13.079
Libre-Halaal Internet Services.

00:37:13.080 --> 00:37:17.959
I want to thank all the EmacsConf Organizers

00:37:17.960 --> 00:37:19.519
for their great work,

00:37:19.520 --> 00:37:30.960
and Sacha, Leo, and Amin in particular.