329 lines
		
	
	
		
			No EOL
		
	
	
		
			18 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			329 lines
		
	
	
		
			No EOL
		
	
	
		
			18 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
 | 
						|
         
 | 
						|
         <p>Raw link: <a href="https://www.youtube.com/watch?v=FmOYj0SyKfg">https://www.youtube.com/watch?v=FmOYj0SyKfg</a></p>
 | 
						|
         
 | 
						|
         <p>This was a live stream that got recorded.  It started on 2021-09-26
 | 
						|
13:00 +0300 and lasted for about two hours.</p>
 | 
						|
 | 
						|
<p>I talked about the persistent question of how Emacs conforms with the
 | 
						|
Unix philosophy, what it means for a set of views to constitute a
 | 
						|
philosophy, whether those tenets are generalisable, and what lessons may
 | 
						|
be learnt from them for our day-to-day computing.</p>
 | 
						|
 | 
						|
<p>After the presentation was concluded, I joined the live chat for further
 | 
						|
comments on a variety of issues.</p>
 | 
						|
 | 
						|
<p>The text of my talk is copied below.  It is written in Org notation:</p>
 | 
						|
 | 
						|
<pre><code class="language-org">#+TITLE: Live: Emacs and the Unix philosophy
 | 
						|
#+AUTHOR: Protesilaos Stavrou (https://protesilaos.com)
 | 
						|
#+DATE: 2021-09-26
 | 
						|
 | 
						|
* How I approach the Emacs VS Unix problématique
 | 
						|
 | 
						|
Hello everyone!  My name is Protesilaos, also known as "Prot".  In this
 | 
						|
live stream, which is being recorded as well, I will talk to you about
 | 
						|
the Unix philosophy and how Emacs conforms with it while addressing its
 | 
						|
main usability flaw.  The show notes are available on my website:
 | 
						|
https://protesilaos.com/codelog/2021-09-22-live-stream-emacs-unix/
 | 
						|
 | 
						|
My approach to today's topic is informed by my experience as someone who
 | 
						|
had used a combination of a tilling window manager, Tmux, Vim, various
 | 
						|
ncurses-based programs (e.g. Mutt), and command-line utilities for years
 | 
						|
before consolidating around GNU Emacs.  My perspective is further
 | 
						|
informed by my background as a social scientist and, ultimately, a
 | 
						|
philosopher.  Not as a programmer, though these days I do code a lot for
 | 
						|
recreational or educational purposes.
 | 
						|
 | 
						|
In this presentation I will make arguments against dogmatism; against
 | 
						|
misunderstandings in what Unix stands for and how it must work in the
 | 
						|
real world.  I will also critically assess the vaunted notions of
 | 
						|
minimalism and so-called "bloat" as they pertain to software and discuss
 | 
						|
what the appropriate attitude should be when thinking about this and
 | 
						|
concomitant issues.  The key word is "attitude": the disposition we
 | 
						|
ought to have in order to avoid becoming dogmatic.
 | 
						|
 | 
						|
This is my second video on the topic.  I did one a couple of years ago,
 | 
						|
shortly after I switched to Emacs.  I have also published an article:
 | 
						|
 | 
						|
+ Emacs mindset and Unix philosophy:
 | 
						|
  https://protesilaos.com/codelog/2019-08-09-vlog-emacs-unix/
 | 
						|
+ Comment on Unix versus Emacs:
 | 
						|
  https://protesilaos.com/codelog/2020-12-28-comment-unix-vs-emacs/
 | 
						|
 | 
						|
The reason I am doing this again is because I keep getting questions
 | 
						|
about my experience with Emacs; questions which typically reveal
 | 
						|
deep-seated assumptions that are either outright untrue or ill
 | 
						|
considered.
 | 
						|
 | 
						|
In short, much of this talk will be about theoretical issues.  While I
 | 
						|
understand that coding is a technical endeavour, I still believe there
 | 
						|
are important insights to be drawn from theoretical work; insights which
 | 
						|
will eventually find their application in everyday scenaria.  Besides,
 | 
						|
we cannot afford to assume the Unix philosophy as a technical constant
 | 
						|
when it clearly is formulated as a /philosophy/.
 | 
						|
 | 
						|
Finally, note that I will participate in the live chat after I conclude
 | 
						|
this presentation.  If you have any questions related to today's topic
 | 
						|
or any other subject I cover on my website (https://protesilaos.com),
 | 
						|
please let me know.
 | 
						|
 | 
						|
* Unix minimalism is not a dogma
 | 
						|
 | 
						|
The Unix philosophy consists of teachings that are based on decades of
 | 
						|
experience with systems programming.  Those are encapsulated in the KISS
 | 
						|
principle of engineering: Keep It Simple Stupid (or variants).
 | 
						|
 | 
						|
Unix values specialised tools that can interface with each other to
 | 
						|
contribute to emergent workflows.  Its brand of minimalism rests on the
 | 
						|
practical consideration of maintainability: both with regard to fixing
 | 
						|
bugs and conserving programmer time.  The Unix philosophy prioritises
 | 
						|
modularity and composability over monolith-like implementations.  Simple
 | 
						|
designs can adapt to evolving circumstances while those that make all
 | 
						|
sorts of assumptions and have lots of explicit or implicit dependencies
 | 
						|
are unsustainable over the long-term.
 | 
						|
 | 
						|
Unix programmers did not invent all the concepts associated with their
 | 
						|
philosophy.  Humanity had discovered them through aeons of continuous
 | 
						|
experimentation and practical reasonableness.  And what better teacher
 | 
						|
than the vastness of life all around us?  Natural systems consist of
 | 
						|
subsystems, just like our body, forests, oceans, and so on.  In nature
 | 
						|
we find division of labour or else the separation of concerns,
 | 
						|
specialisation and compartmentalisation, composition of localised
 | 
						|
patterns into emergent phenomena...  Everything.
 | 
						|
 | 
						|
This is not to discount the contributions of Unix, but rather to couch
 | 
						|
them in terms of the wider milieu in which we operate.  By framing it
 | 
						|
this way, we are better prepared to let go of views that are ultimately
 | 
						|
detrimental to our life.  Such as the dogmatic belief that the Unix
 | 
						|
philosophy is impeccable and must not be criticised.
 | 
						|
 | 
						|
Dogma is the misrepresentation of a context-dependent insight as a
 | 
						|
universal truth.  In practical terms: when you find yourself not
 | 
						|
listening to a counterpoint, consider whether you are giving the other
 | 
						|
side a fair chance.  If not, you are most likely being dogmatic.
 | 
						|
 | 
						|
The Unix philosophy is not the undisputed source of truth.  As with
 | 
						|
every corpus of thought, what we learn from Unix remains open to
 | 
						|
interpretation.  This means that its followers must assume a sceptical
 | 
						|
disposition.  They have to remain open-minded about cases where the
 | 
						|
principles of their tradition should not be followed to the letter.  The
 | 
						|
practitioner has to exercise judgement and use their discretion to find
 | 
						|
the right answer for the task at hand.  Dogma is the enemy of every
 | 
						|
school of thought.
 | 
						|
 | 
						|
Consider the difference between the disciple and the grandmaster.  The
 | 
						|
student knows how to faithfully abide by all the precepts of their
 | 
						|
tradition.  Whereas the grandmaster not only applies the rules but
 | 
						|
understands their underpinnings and thus knows when to suspend their
 | 
						|
application and why.  In other words, the student is prone to dogmatism
 | 
						|
because of their enthusiasm coupled with their lack of perspective.
 | 
						|
 | 
						|
* Emacs conforms with the Unix philosophy
 | 
						|
 | 
						|
In analytical terms, Emacs has two facets to its being:
 | 
						|
 | 
						|
+ The Lisp interpreter :: We must think of it as the equivalent of a
 | 
						|
  POSIX shell like =#!/bin/sh= or whatever environment we use to execute
 | 
						|
  scripts.  With Emacs we run or "evaluate" Emacs Lisp code (Elisp).
 | 
						|
  That is all we can do with it.
 | 
						|
+ The interactive environment :: This is the counterpart of command-line
 | 
						|
  shells like =bash=, with the difference being that its event loop, which
 | 
						|
  is its interactivity, is more pronounced.  Simply put, Emacs is like a
 | 
						|
  shell with superpowers, which looks a text editor upon first sight.
 | 
						|
  And this is possible because it is built on top of the interpreter.
 | 
						|
 | 
						|
Those two aspects of Emacs are woven together into the same application,
 | 
						|
making it a /computing environment/ rather than yet another text editor or
 | 
						|
IDE.  Still, the analytical distinction is important in light of the
 | 
						|
Unix philosophy.  As I already noted, Unix is all about sharp and
 | 
						|
specialised tools that can be combined with one another: modularity and
 | 
						|
composability.  Emacs is such a tool through its Lisp interpreter.
 | 
						|
 | 
						|
Just as it is perfectly fine to have a shell interpreter with which to
 | 
						|
run arbitrary scripts, it is acceptable to have a Lisp machine for the
 | 
						|
purposes of evaluating Lisp.  Similarly, it is customary to run an
 | 
						|
interactive shell inside of a terminal emulator.  By the same token, it
 | 
						|
is perfectly reasonable to use Emacs' own interactive environment to
 | 
						|
interface with the Lisp interpreter.
 | 
						|
 | 
						|
Emacs should not be compared to Desktop Environments like GNOME or KDE,
 | 
						|
or to tilling window managers such as i3, BSPWM, etc.  The reason is
 | 
						|
that those are wrappers of otherwise disparate programs.  They basically
 | 
						|
bundle different processes inside of a main session, where the joint
 | 
						|
presence of distinct applications is a mere coincidence.
 | 
						|
 | 
						|
In contradistinction, Emacs only runs Elisp and what happens inside of
 | 
						|
Emacs participates in the same environment.  This is best understood by
 | 
						|
means of an example: if I want to change the font size in my current
 | 
						|
BSPWM session, I have to edit the configuration file of my terminal
 | 
						|
emulator, my settings daemon for GTK apps, Firefox, and so on.  In other
 | 
						|
words, those applications do not know that they are all subprocesses of
 | 
						|
the BSPWM session.  Whereas in Emacs, if I change the font size, the
 | 
						|
effect is propagated across the entire Emacs environment.
 | 
						|
 | 
						|
This means that not only does Emacs conform with the Unix philosophy,
 | 
						|
but it also has the potential to address its main flaw.  By following
 | 
						|
Unix precepts we often find ourselves in scenaria where there is no
 | 
						|
integration between the programs we use.  While Emacs ensures that we
 | 
						|
get a singular experience /without hacks/: the same commands, the same
 | 
						|
fonts and colours, the same paradigms of interaction, and so on.  This
 | 
						|
makes Emacs an /integrated computing environment/.
 | 
						|
 | 
						|
* The integration that Emacs offers is not "bloat"
 | 
						|
 | 
						|
Which brings us to the dubious notion of bloat in software.  You will
 | 
						|
find self-professed proponents of the Unix philosophy dismissing the
 | 
						|
value proposition of Emacs on the premise that it is just doing too much
 | 
						|
and thus does not abide by the tenets of the Unix faith.  This stems
 | 
						|
from the misunderstanding of treating Emacs as a text editor.  Which
 | 
						|
naturally raises questions, such as "why should Emacs ever be my Git
 | 
						|
front-end, when I already have the command-line?" or "why use Emacs'
 | 
						|
windows when Tmux is specialised in multiplexing?".
 | 
						|
 | 
						|
This is why I stressed that Emacs is a Lisp interpreter that only does
 | 
						|
one thing: evaluate Lisp.  And so it is capable of all those wonderful
 | 
						|
workflows like editing code, handling your agenda, doing presentations
 | 
						|
with plain text like this one, and so on.  If you cavalierly talk about
 | 
						|
bloat in Emacs, you are effectively making the argument that =#!/bin/sh=
 | 
						|
is at fault because of what shell scripts the user may be running.
 | 
						|
 | 
						|
Then we have another problem with those who criticise Emacs from a
 | 
						|
position of, dare I say, ignorance or based on rumours and hearsay.  And
 | 
						|
that is that they themselves do not follow the simulacrum of the Unix
 | 
						|
philosophy that is their dogma.  What I mean by that is that you will
 | 
						|
often find them using Vim as their text editor.  Last time I checked,
 | 
						|
Vim can do multiplexing, it has a concept of workspaces or tabs, it can
 | 
						|
spawn a terminal with the =:term= command, and so on.  If you think that
 | 
						|
Emacs violates the Unix tradition because it too can do the things that
 | 
						|
Vim does, then why do you use Vim?  Why aren't you doing everything with
 | 
						|
=ed= or perhaps =sed=?  Or, at the very least, why are you not switching to
 | 
						|
=vi=, which is closer to what you claim to stand for.
 | 
						|
 | 
						|
Maybe then the problem is that you have misunderstood Unix altogether
 | 
						|
and are being dogmatic.  Take a pause and think how your totalising
 | 
						|
claims are detrimental to your own computing experience: if you follow
 | 
						|
them to the letter, you will be missing out on quality-of-life advances
 | 
						|
in software.  For what?  Plus you will be tacitly holding that the Unix
 | 
						|
tradition is flawless, which is nonsense.
 | 
						|
 | 
						|
Make no mistake: Vim, Tmux, Mutt, Newsboat, tilling window managers are
 | 
						|
all excellent programs in their own right.  But what about their
 | 
						|
combination?  What about the /gestalt/?  They lack integration.  To
 | 
						|
configure Vim you use Vimscript, Tmux has something like a shell syntax,
 | 
						|
Mutt and Newsboat use something else, your window manager may
 | 
						|
communicate with shell commands or might require editing a C header
 | 
						|
file, and so on.  It is a bit of everything.  And their joint operation
 | 
						|
is a mere coincidence, as I already explained: they do not share a
 | 
						|
common basis.  Whereas Emacs only knows how to interpret Elisp and all
 | 
						|
you do inside of it is an extension of that basic principle, to the
 | 
						|
effect that you get what every GNU/Linux power user actually wants: a
 | 
						|
singular computing experience that minimises the distance between their
 | 
						|
mind and what the machine is doing.  What better minimalism than that?
 | 
						|
 | 
						|
* Understanding minimalism in context
 | 
						|
 | 
						|
Let's now consider minimalism as such.  I define minimalism as the
 | 
						|
attitude of achieving minimum viable sufficiency for a given task.
 | 
						|
 | 
						|
To test whether something is minimalist, we must know what it is
 | 
						|
designed to do.  Design, however, has two sides to it.  The first is
 | 
						|
what the designer thinks is the telos.  The second is what the user
 | 
						|
considers as the end goal of the design.
 | 
						|
 | 
						|
As an example, imagine a sword.  The smith who forged it fathomed a
 | 
						|
telos where the sword is fit as a weapon or, at the very least, that it
 | 
						|
has a cutting edge.  Now suppose that some collector buys this item and
 | 
						|
installs it on their wall for decorative purposes, perhaps to show their
 | 
						|
wealth and social status.  To understand the utility and end goal of
 | 
						|
this sword, we have to account for the context or, as I say, for the
 | 
						|
constitution of the case.  And that is because nothing has a standalone
 | 
						|
presence: it always exists in a given context which contributes to its
 | 
						|
actuality.
 | 
						|
 | 
						|
[ Read (among others): On role and actuality
 | 
						|
  (https://protesilaos.com/books/2021-04-15-role-actuality/) ]
 | 
						|
 | 
						|
The same goes for minimalism, whether it is about software or not.  When
 | 
						|
we assess the minimum viable sufficiency for a given task, we have to
 | 
						|
consider the foresight of the designer or developer but also try to
 | 
						|
anticipate the expectations of users.  In other words, there is no
 | 
						|
innate minimalism; minimalism that is intrinsic to an otherwise
 | 
						|
decontextualised thing.  We must always look at the context.
 | 
						|
 | 
						|
Allow me to tell you a personal experience with markdown editors from
 | 
						|
the days I first switched to GNU/Linux in mid-2016.  I wanted something
 | 
						|
that could centre text on the screen like how I am doing it in this
 | 
						|
presentation.  It should also have spell checking for English and Greek.
 | 
						|
And it should let me configure the colours on display and the size of
 | 
						|
the fonts.  So I found several self-styled minimalist apps which would
 | 
						|
lack at least one of those basic features.  Now you may think that
 | 
						|
changing colours is "bloat", but to me it is a key usability feature,
 | 
						|
especially when the designer has not considered applying good colour
 | 
						|
contrast for legibility, else accessibility (by the way, I am the author
 | 
						|
of the =modus-themes= which are also built into Emacs version 28---they
 | 
						|
are designed for the highest legibility standard).
 | 
						|
 | 
						|
When software calls itself minimalist, it sometimes means that it
 | 
						|
actually is incomplete and has not reached the state of minimum viable
 | 
						|
sufficiency for the tasks it seeks out to accomplish.  And, by the by, I
 | 
						|
will let you connect the dots when marketing folks peddle "minimalism".
 | 
						|
 | 
						|
* You don't have to switch to Emacs, though you might want to
 | 
						|
 | 
						|
In conclusion, I encourage you to exercise judgement when thinking about
 | 
						|
how some philosophy influences your day-to-day experience.  Do not let
 | 
						|
yourself fall into the trap of dogmatism and become a victim of your own
 | 
						|
misunderstandings.  In practical terms, always give the other side of
 | 
						|
the argument the benefit of the doubt, always keep an open mind, and
 | 
						|
always maintain a dubitative and inquisitive disposition.
 | 
						|
 | 
						|
Emacs is all about integration.  And I already gave some examples, but
 | 
						|
let me add another one here.  In Emacs, we have commands to introspect
 | 
						|
the environment.  So I can invoke a command which tells me what a key
 | 
						|
combination does (=describe-key=).  Or I can call another command which
 | 
						|
informs me to which keys is a certain function bound to (=where-is=).
 | 
						|
Whereas in my otherwise Unix-y tilling window manager, I have no
 | 
						|
built-in way to introspect what the hotkey daemon (=sxhkd=) does when I
 | 
						|
type in a certain key chord.  Similarly, my terminal emulator has no
 | 
						|
such capabilities, nor do the programs that run inside of it like Vim
 | 
						|
and Mutt.  Finding what you want is part of the reason you are using a
 | 
						|
computer, so that you do not have to memorise everything.
 | 
						|
 | 
						|
Basic functionality does not really need that degree of homogeneity.
 | 
						|
For instance, =grep= and =sed= get the job done perfectly well, whether
 | 
						|
independently or in tandem.  The importance of integration becomes
 | 
						|
evident when you operate at a higher level of emergence, where things
 | 
						|
must work in concert for optimal results.
 | 
						|
 | 
						|
To me the Unix philosophy is very important.  It is what inspires me to
 | 
						|
separate my programs based on their scope and, more generally, to avoid
 | 
						|
duplication of effort.  It also guides me to pursue minimalist solutions
 | 
						|
which are fit for their purpose.  I also am, however, a pragmatist who
 | 
						|
understands that the Unix tradition is not a dogma.  We can find cases
 | 
						|
where improvements can be made to it, such as with the integration of
 | 
						|
applications.  When we have a layer of interconnectedness, such as the
 | 
						|
one provided by Emacs, we get more consistent results for emergent
 | 
						|
workflows, which ultimately lead to a superior end-user experience.
 | 
						|
 | 
						|
So, should you switch to Emacs?  The answer is "it depends".  If you
 | 
						|
need a singular experience that allows you to draw linkages between your
 | 
						|
various workflows, then I would say "yes".  Otherwise it really is up to
 | 
						|
you.  Whatever you do, however, do it from a position of knowledge, with
 | 
						|
a clear purpose, and remain committed to it.  Do not follow trends or
 | 
						|
pernicious memes without applying common sense.  Emacs has a learning
 | 
						|
curve, but so do all the disparate programs that are glued together in
 | 
						|
an ad-hoc fashion in some GNU/Linux power user's setup.  You have to
 | 
						|
work for the good things.
 | 
						|
 | 
						|
That's all for today's presentation, folks.  Now I will check the chat
 | 
						|
and comment on any questions or remarks.  Thank you!
 | 
						|
</code></pre>
 | 
						|
 | 
						|
<hr />
 | 
						|
 | 
						|
<p>The video thumbnail is a tweak of the Levitating, Meditating,
 | 
						|
Flute-playing Gnu under the terms of the GNU General Public License:
 | 
						|
<a href="https://www.gnu.org/graphics/meditate.html">https://www.gnu.org/graphics/meditate.html</a>.</p>
 | 
						|
        
 | 
						|
       |