I've used Spacemacs for some years now as my primary editor, but recently I've been looking into #neovim.

It starts up a lot quicker, even with a bunch of plugins, and surprisingly for a terminal editor it has a more sophisticated UI than windowed Emacs.

@weavejester I’ve been using #vim for nearly 30 years :facepalm:. #neovim has re-wired my workflow.
Yes, #emacs fans will tell you the same about their #editor — but these tools aren’t just rivals, they represent opposing philosophies. Vim/Neovim: speed, composability, the Unix ethos. Emacs: the “OS inside your editor,” everything bundled in. Both have strengths, but they reveal two very different ways of thinking about code, control, and workflow.

@demiguru

I understand that emacs is designed to be invoked and then one will live in it until the end of his session. While vi is designed to be invoked as needed.

But on today's computer, emacs usually is also super fast, whether their invocation, opening files or when processing something.

I understand that emacs is not following Unix philosophy at all.

But in a sense, emacs is nothing but elisp interpreter with some addition to aid text editing.

All of those elisp packages are not emacs. They are just elisp packages, running on emacs. And those elisp packages usually are highly specialized tools.

I understand composability means each tools can be combined to build a more complex solution, such as through piping and redirection.

In a sense, elisp packages are just functions. We can use them in our own elisp code. But I know, it is different with the Unix composability.

#GNUEmacs #Emacs

@weavejester

@restorante @demiguru @weavejester

Vi isn't composable either. Sed and Ed and awk are composable.

That argument is out of context when talking about things with user interfaces.

I would say that emacs is ultimately more composable than vi, vim, or neovim. Emacs can integrate easily with other systems and tools.

That's the thing that it does amazingly well. Just because it's a super power doesn't mean that it's not within the philosophy.

The extensibility of #Emacs through integration with other tools is off the charts. That to me is completely within the Unix philosophy. I've been a Unix dev for 45 years. I think I know.

@Zenie @restorante @weavejester The claim that #Emacs is “more composable” than vi/#vim/neovim rests on stretching the meaning of composability. What Unix traditionally meant by composability was the ability to take simple, single-purpose tools and connect them together via well-defined interfaces (stdin/stdout, pipes, files). By that definition, ed, sed, and awk are indeed composable—they were designed to slot into pipelines without friction.

@Zenie @restorante @weavejester Vi (and later vim/neovim) may not fit that classical mold perfectly, but they do adhere to it in a limited way:

They operate directly on plain text files (not opaque binary state).
They can be scripted through ex commands.
They can be invoked non-interactively to perform transformations (vi -es).

That’s composability in the Unix sense: predictable input/output behavior and scriptable interfaces.

@Zenie @restorante @weavejester Emacs, on the other hand, is extensible, but extensibility is not the same as composability. Extensibility often means pulling other tools into Emacs, wrapping them in Lisp, and effectively making Emacs the hub of everything.
@Zenie @restorante @weavejester That’s closer to integration or even absorption, not composition. You don’t pipe the output of grep into Emacs and get a text transformation out the other side—you embed grep within Emacs as a Lisp function call.

@Zenie @restorante @weavejester That’s philosophically different.

Vim is composable in the Unix tradition because it’s file-centric, scriptable, and plays in pipelines.
Emacs is extensible and integrative, but its model of absorbing everything into itself arguably violates the spirit of “do one thing well.”

In other words, if we’re being strict about Unix philosophy, Emacs is powerful, but it’s less “composable” than vim—it’s more of an operating system in itself.

@demiguru

I am not an expert of elisp. But may be you are interested to:

https://www.gnu.org/software/emacs/manual/html_node/emacs/Command-Example.html

echo "Hello World" | emacs --batch --eval '(progn (insert (read-from-minibuffer "Input: ")) (write-region (point-min) (point-max) "output.txt"))'

I just simply copy paste the code above

@Zenie @weavejester

Command Example (GNU Emacs Manual)

Command Example (GNU Emacs Manual)

@restorante @Zenie @weavejester

What you’ve shown is Emacs scripting, which is fine, but it’s internal extensibility — you’re writing Emacs Lisp that runs inside Emacs. That’s not the same as taking existing Unix tools and composing them through standard input/output.

In your example: echo "Hello World" | emacs --batch --eval '…'

@restorante @Zenie @weavejester

Notice that echo isn’t actually feeding data through stdin to Emacs in a composable pipeline — instead Emacs is prompting and inserting via Elisp. Compare that to: echo "Hello World" | sed 's/World/Unix/'

@restorante @Zenie @weavejester echo "Hello World" | awk '{ print toupper($0) }'

Here, the tools are directly transforming streams, no custom scripting language needed.

@restorante @Zenie @weavejester The key distinction:

Composability in Unix = tools designed to chain together seamlessly via text streams.
Extensibility in Emacs = embedding custom code inside a monolithic program to mimic composability.
So your example sort of proves the point: Emacs can simulate composability, but only by turning into its own runtime and requiring Elisp knowledge. That’s integration by absorption, not “do one thing well.”

@demiguru

Well, perhaps emacs is exactly a tool to run elisp code. May be, when we use Org Mode, we do not really use emacs, but Org Mode. It is Org Mode that using emacs.

That is one of the reason I wrote emacs is different with the Unix philosophy.

#GNUEmacs #Emacs

@Zenie @weavejester

@restorante @Zenie @weavejester
I get it — Emacs is a Lisp machine and modes like Org build on top of that. That’s exactly why it sits outside the Unix philosophy.

Unix composability is about chaining small tools with stdin/out. Emacs is extensibility through Elisp. Both are powerful, but by your own framing, Emacs isn’t Unix-composable — it’s a different philosophy altogether.

@demiguru

Yes, indeed Unix philosophy and Lisp are two different ways of life.

Ability to edit the code of the programs we are using and then reload it. Or having the whole systems as a gigantic set of Lisp libraries which we can use it in our own Lisp code.

Yes, these way of life is vastly different with Unix philosophy.

#Unix #Lisp

@Zenie @weavejester

@restorante @Zenie @weavejester GNU means GNU is not UNIX. The main point was free software and less a special philosophy. ok let's make it clear: nvim is cli-world and emacs is lisp-land.

@superketchup

Yes, I agree totally that GNU is all about freedom. It is a social movement, just happening in the field of software.

I think, discussing GNU Emacs as a piece of free software (libre software) or as a lisp programming environment or as an editing system is okay and fruitful.

GNU Emacs is such a wonderful and magnificent piece of software afterall.

#GNU #GNUEmacs #Emacs

@Zenie @weavejester

@restorante @Zenie @weavejester Exactly, in the beginning I also thought GNU would be an art open source unix. -> False. It has its own philosophy and Emacs is a central component of it. This is about Lisp machines and their universality. These people want to write more than utility programs for the console. 👍

@demiguru Emacs is an editor. GNU Emacs is a "Lisp Machine".

People make this mistake to confuse Emacs the Editor and GNU Emacs which implements a version of Emacs, plus lots more things.

@restorante @[email protected] @weavejester

@demiguru In Emacs the composability is done from the Lisp side, where you "chain together seamlessly objects".

At the end of the day Emacs is just an editor like vi, vi is not composable, neither is ed. The difference is that Emacs and other parts of the system can share code -- on Unix this is impossible (vi cannot share the implementation of g/RE/p with e.g grep -- in Lisp you can).

@restorante @[email protected] @weavejester

@demiguru @restorante @Zenie @weavejester no custom scripting language but the shell, which can be tcsh, sh, ksh, bash, fish, zsh, or scsh…

The differentiator is the process boundary between the components, and text stream as the only interchange data true. Emacs also uses sub-processes and their stdin/out like a shell would. One could argue it’s a shell with a better language and data types then the previously mentioned shells, and buffer abstraction to handle the text in and out of a process

I think your being a bit flippant in calling structured composition of data and functions a mimicry of composition.

I enjoy vi, helix, emacs and all those shells with the exception of t/csh — which is for people of no account anyways.

@craigbro @restorante @Zenie @weavejester
#Emacs can spawn subprocesses, sure — but most of its “composition” happens inside the Lisp runtime.

#Unix composability is black-box tools chaining via text streams across process boundaries. Emacs is powerful, just a different model of composition.

@demiguru @restorante @Zenie @weavejester awk or sed is your scripting language in that case (much simpler and more limited than emacs lisp but still). 's/World/Unix' is your script, and you could write that to a file, use more complex or multiple commands etc. With emacs you can achieve the same thing and make it more composable by making a few adjustments to the example above:

@demiguru @restorante @Zenie @weavejester

echo "Hello World" | emacs --batch --eval '(progn (insert (read-from-minibuffer "")) (princ (string-replace "World" "Unix" (buffer-string))))'

This does the same as 's/World/Unix/' in sed and prints it again to standard output. It's not that #emacs is not composable like that, but that it's usually used interactively (because that's more fun).

@demiguru @restorante @Zenie @weavejester also, I think of #emacs more like a universal interface to your computer, the command line, all the tools you call etc. And in that sense I would interpret the unix philosophy a bit differently: the individual tools, whether that's a command line program or a lisp function, should do one thing well and be composable, but IMO it doesn't matter if you pipe them together on the command line or you combine them within emacs.

@eruwero
I get that view — #Emacs can feel like a universal interface to the system, and its #Lisp functions are composable in their own right.

Where I see the #Unix philosophy diverge is in the boundary: tools designed as separate executables, with contracts enforced by the #OS, versus composition inside a single runtime. Both routes achieve interoperability, but one leans on external guarantees, the other on internal extensibility.

@restorante @Zenie @weavejester

@demiguru @restorante @Zenie @weavejester IMO this internal/external distinction is relatively arbitrary. In one case you have "separate executables" that you call from a shell, which is equivalent to calling a function, with the shell being the interpreter. In the other case you have lisp functions and a lisp interpreter (emacs) to call them.
@eruwero @restorante @Zenie @weavejester Right, that’s the analogy I was pointing at — a #shell is an interpreter, processes are its “functions.”
The key difference is that in the #Unix model, the #OS enforces the separation: each process is isolated, communicates through defined streams, and can be swapped out independently. In #Emacs, #Lisp functions share one runtime. Both are composable, but the guarantees differ.

@demiguru @restorante @Zenie @weavejester ok I get your point. I still prefer the lisp machine/emacs approach were there are as few arbitrary boundaries as possible and everything can be modified dynamically, but that's a philosophical issue :)

What I still don't get is how vi/vim/neovim better fits into this unix model because you use it in a similar way as emacs, you usually don't use it in some pipeline in the shell, even if you could do that. So AFAIU they are equivalent wrt that

@eruwero @[email protected] @Zenie @weavejester Fair point — in practice, most people don’t drop Vim/Neovim into pipelines either. The distinction isn’t about what users *typically* do, but what the tools were designed around.
#Vim/#Neovim operate directly on text files and expose transformations that can be invoked non-interactively (`-es`, ex commands, reading/writing from stdin/out).
@eruwero @restorante @Zenie @weavejester That puts them closer to the #Unix “small tool + text stream” model, even if most use is interactive.
#Emacs can absolutely script and integrate too, but its defaults lean toward internal composition inside #Lisp. Different defaults, different traditions — even if in day-to-day use they both feel like editors first.
@demiguru @eruwero @restorante @Zenie @weavejester for me this sounds not GNU Emacs specific. Most/many Lisp implementations on UNIX will work that way: code & data are shared in a single address space and provide a resident programming system.
@demiguru @eruwero @restorante @Zenie @weavejester the typical Lisp Machine then had only one Lisp runtime with one address space, booted as the operating system
@symbolics @eruwero @restorante @Zenie @weavejester Right — and that’s why I see #Emacs as #Lisp-lineage first, #Unix-lineage second.
@Zach  🇮🇱 🇺🇸

I think you're basically correct to point out that Emacs does not adhere to the unix philosophy as it is classically understood.

The locus classicus is presumably the widely quoted McIlroy et. al. in the 'Unix Time-Sharing System" where Emacs clearly violates the first maxim:

Make each program do one thing well. To do a new job, build afresh rather than complicate old programs by adding new "features."

Or to take a later articulation, Gancarz in Linux and the Unix Philosophy's first two tenets: 'Small is Beautiful', 'Each Program Does One Thing Well'  — again Emacs is the opposite of this.

(This kind of thing comes up constantly in every mention of the Unix philosophy that I've ever seen until this conversation and is easily verified by simply searching.  It's strange to see people insisting that there is simply no emphasis on small, special purpose programs. Of course one can decide that principle isn't important, but let's not ignore that it was (and I believe usually still is) considered to be so)

We can also note that in the original incarnation of Unix ('Research Unix') there was nothing remotely like emacs and there was, as far as I know, very little scriptability.  The Thompson shell allowed for piping but not scripting.  OG unix is everything is written in C, with a simple interactive shell and if you want anything else it's back to C programming.

Whereas Emacs does (as you say) have more in common with the Lisp ethos, where there aren't separate programs per se and everything is a function in one giant Lisp environment (same is true of Smalltalk) — although there are differences there, too which I might get on to later.

I think it pays to note that these views are informed by very different language traditions.  C is a static language with an explicit and slow compilation step.  Lisp on the other hand has always been a dynamic language where you can just throw a new function into your environment pretty much immediately, usually without having to (explicitly) compile or restart anything.

If you think about it a bit you might start to see that if all you've got is C, small programs that don't keep their own state but write to text files may be the simplest option for getting any composibility, particularly on limited machines.

However, I think we can fairly say that Unix found that only having a statically compiled language available was far too limiting and early on started haltingly down a path to acquiring dynamic programming abilities, starting with scriptable shells, and later larger programs with their own scripting languages.

People often cite the Unix philosophy as though it's obviously the right way to program.  Modularity, clear interfaces, and composibilty we all think are good things, of course.  But why is 'one program does one thing' better - or even equal to - 'one function does one thing'?

#emacs #lisp #unix
Zotum

@jamie

Appreciate the way you framed this — especially grounding it in McIlroy and Gancarz. That’s exactly the lineage I was pointing at: #Emacs diverges from the “small tools, one job” maxim because it inherits from the #Lisp/#Smalltalk ethos instead.
#unix

@jamie I agree it’s less about which is better and more about recognizing two different language traditions: #C pushing toward external composability through processes, #Lisp pushing toward dynamic, internal extensibility. Both solve real problems — just with different assumptions about boundaries.

#unix

@Zach  🇮🇱 🇺🇸

To continue from where I left off, the pure Unix conception didn't envisage dynamic languages and scriptability and explicitly eshewed large programs.  The utility of (some) dynamism was realised early, but corrected in hamstrung sort of ways — especially from a Lisp perspective,  but anyone can see the limitations of shell scripting languages.

And the 'small programs' in practice has not played out either.  X isn't small, vim isn't small (not by trad Unix standards - it's similar order of magnitude to emacs in fact), webbrowser aren't small...  

The other side of the equation is that the Lisp (esp. in the form of Lisp Machines)/Smalltalk world supposed that you would live entirely within the environment and everything would be written in the one language.  The notion of interoperating with anything outside this was alien and resisted.  It was some years, I believe, before a C compiler became available for Lisp Machines.

Emacs transcends all of this.  It participates in the Unix world just fine.  If you want to load, edit something, and exit, you can do that (if it's running in the background as a server, this is plenty fast, too, as you're just executing emacsclient).  If you want to use it as a filter on the command line, it can do that too, as has been demonstrated.

And the unix world is also available from within emacs.  You can filter or send any block of text through external commands, it has wrappers for classic unix tools like grep, also modes for interacting with shells, terminal emulators, and its own shell from which you can run both elisp functions and unix commands together.

(And, of course, it's great at handling Unix's common data format: text.)

Moreover, org-mode has a great multilingual environment where you run source code in numerous languages and even pass data between them with ease.  


This is all completely the opposite of the Lisp Machine/Smalltalk notion of an isolated world.  It's more in line with the Unix shell, which doesn't care what your programs are written, except better.

So I think we can say it transcends the two purisms.  It does this by rejecting the 'small specialized program' dictum (which I don't think is important and I'd argue has been effectively rejected by all but the most purist Unix-heads), and centering itself in place of a unix shell (without demanding this) but keeping to the spirit of all the other ideas.   And on the other hand, also rejecting Lisp Machine solipsism.

(I haven't really thought of this in quite this way before so thanks for the discussion, in particular @Zenie who pushed the idea that emacs is actually better at what's important about unix than unix is, and @restorante and @eruwero's demonstration of emacs as a unix command line tool)

#emacs #lisp #unix
Zotum

@jamie

That’s a solid synthesis — I like how you framed #Emacs as transcending both the #Lisp-machine isolation and the #Unix small-tools minimalism. Glad the exchange led somewhere new.

@Zach  🇮🇱 🇺🇸

I did want to come back to my points that few actually follow the pure unix way any more, and that Vim isn't a small program by Unix standards.

As an indication(*), I've started terminal vim, neovim, and emacs -nw -Q processes, and KDE's system monitor reports the following:

nvim      3.0 MiB
vim      11.9 MiB
emacs 40.3 MiB

All of these are large or worse compared with original unix tools.  I think McIlroy of 1978 would be horrified by all of them. Classic vi was 160kB or so later in its life.   Bill Joy described ex as 'very large' in 1979.  

They also all have scripting abilities and many packages of extensions available (neovim less so it seems, but it's also newer)  None of them are really small, narrowly focused, or minimalistic by the standards of Unix in its first decade.

The classic Unix programming workflow as I understand it was to fire up an editor, edit, exit, recompile and retest.  

I think the numbers of people who do that today are small. I think people using the vi family also fire up their editor and leave it running, and often controlling things from the editor.  

(e.g. #^https://www.reddit.com/r/vim/comments/j33ow1/what_is_your_vim_workflow_like/  )

Also, once you've got a decent scripting language, you've already taken one step on the emacs path.  

So compared with classic Unix ideas, they're all alike.  They're all large, they're all scriptable, they all have libraries of plugins, and they all enable if not promote a form of use where you live in the editor, not the shell.  The only real difference is that the vi-family communities haven't gone as far as writing extensions —but that's cultural, the software itself allows for this.

#unix #vim #vi #emacs
--
(*) what would be a fair comparison?  There seem to be many possibilities. If one is trying to get the smallest possible memory footprint and is prepared to work for it, of course the size of emacs could be reduced, perhaps substantially.  

But if we're less concerned with individual binaries and more 'how much do we need to get equivalent functionality' then we'd have to look at vim + mutt + tmux + fish + lynx + ...

@jamie

You’re right — pure #Unix minimalism couldn’t survive once systems became interactive and persistent. Early Unix assumed short-lived processes and text as shared state.
Once #editors became programmable and long-running, that boundary blurred. #Vi/#Neovim kept the file-centric DNA; #Emacs internalized it. Both descend from Unix, just different branches of its evolution.

@jamie

Thank you saying this so well.

@Zenie

I've been meaning to ask you:  why do you consider vim to be a poor vi?  And why is Evil (if I've remembered the right mode) better?

(I don't have any opinions about this; I'm just interested)

#vi
Zotum

@jamie

I think it just my experience. I was a vi user many years before the vimulator came along. I didn't like the key-bindings for buffers and the developer wasn't nice. I stuck with my ways in vi until 95.
I switched to emacs but used viper the vi emulator in emacs. Emacs buffers and keymaps are amazing compared to vim. Eventually I kept a reasonably configured vim around. But I'd never use it for more than a quick look at something. 2011 I used vim for a year, for work. It was very lacking despite a ton of vim script. Which is awful. I switched back to emacs with evil.
Recently I've realized I don't like evil is it's goal to emulate vim.

@jamie
So really it comes down to my view that #Vim is emulating #Vi, and so is #Emacs.

If you then look at the infrastructure around that,
Emacs is much more capable and less limiting in what you can do. That everything is a buffer means that it's buffer management is amazing.
The modes and key-bindings are awesome and it's all
pleasantly programmable in lisp.

Vi is a great editor, but there isn't much to it. It's a lightweight editor that works well. I think people confuse what is emulating Vi versus what is the application surrounding the emulator.

Emacs has, Evil, Viper, Meow, Boon and Meep modal editors. That says something too.

@Zenie Have you taken a look at Neovim? I've recently been trying it out after a decade of Emacs, and I've been surprised by how capable it is. I don't think there's much between modern Emacs and modern Neovim in terms of capability... unless you're using org-mode.
@weavejester
I use neovim as my vi. I adopted it in the beginning.
I use it as it comes out of the box.
At the time it wasn't really very scriptable yet and I haven't looked again. Maybe if I programmed it in ferret. 🙂
@Zenie

I see.  So it's not that vim is a bad emulator of vi, it's just that outside of emulating vi it doesn't have much to show for itself.  Gotcha.

#vi
Zotum

@Zenie

On the 'confusion' note, these days I'm increasingly of the opinion that a lot of rationales for why someone prefers a particular piece of software (and a lot of other things) aren't genuine reasons at all but just confabulations for what is really being done for aesthetic or even cultural reasons.

E.g. one likes the idea of small, and vi was small, so you use vim to symbolically associate yourself with smallness, rather than interrogating why (or even whether) small is good, how small is vim really, what counts as small on modern machines, what are the solid practical advantages of your preferred tools over stuff that makes you feel good, the whys of which you can't really articulate...
@jamie
I see people arguing for their limitations everywhere.
A lot of it comes from their point of view. They can't see what's in front of them or what would benefit them because they need to step back and to the side.
@jamie @demiguru We are not discussing here, is #Emacs follow #Unix philosophy or not. Neither Emacs nor #Vim follow it at all. I do not accept #Unix argument when you compare two text editors, because it makes no sense.
@crandel @jamie If you don’t see the #Unix lens as meaningful here, then we’re just approaching it from different angles. That’s fine — I’ve said my piece. #vim #emacs
@jamie Emacs was not a UNIX program to start. It was developed under ITS and TOPS-20. It was ported to UNIX so its design goals were never aligned with UNIX.

@jamie quoted:
> «Make each program do one thing well. To do a new job, build afresh rather than complicate old programs by adding new "features."»

Hmmm... how does this apply to the GNU Compiler Collection?

@vnikolov GNU's Not Unix! @jamie

Briefly:

Firstly, "GNU's Not UNIX" comes from a very different context.

Secondly, the meaning of "not UNIX¹" is in the GPL sense, not in the engineering sense.
_________
¹ What was UNIX at the time and whose intellectual property was it?

@PaniczGodek @jamie

@vnikolov
I"m not sure what you mean by "very different context"

It comes from Richard Stallman - the same person who was involved in the development of Lisp Machines and Emacs (and GCC), so there should be no surprise that he had a different phiilosophy than people at Bell Labs

@jamie

My point is:

One context is Stallman's drive (at the time):
Free Software, FSF, GPL, etc.
In other words, my view is that "GNU's Not UNIX" came out
first and foremost as a political slogan,
rather than an engineering one.

(Don't take my word for this, of course;
there are enough primary sources from those days.)

Another very different context is that of
"make it small to do one thing well", an engineering principle,
and in this context I gave GCC as a (counter)example.

@PaniczGodek @jamie

@vnikolov
FWIW the GNU manifesto is available here:

https://www.gnu.org/gnu/manifesto.html.en

In particular:

"Why GNU Will Be Compatible with Unix

Unix is not my ideal system, but it is not too bad. The essential features of Unix seem to be good ones, and I think I can fill in what Unix lacks without spoiling them. And a system compatible with Unix would be convenient for many other people to adopt."

@jamie

The GNU Manifesto - GNU Project - Free Software Foundation

Yes, as [email protected] pointed out in the end of one of the earlier posts in this thread (perhaps a sibling branch).

@PaniczGodek @jamie

@Panicz Maciej Godek @Vassil Nikolov | Васил Николов

That's actually a little more positive than I remember him being :-)

I recall him mentioning specific things (I don't remember what these are) that he doesn't like about Unix, and does like about other operating systems (ITS definitely, I think he's also mentioned Lisp Machines favourably in these contexts but I'm less sure about this).

Yes.
A well-known example from that time
is the ability to continue ("restart") a failing system call
under ITS:
impressive, but a _lot_ of work to implement.

If I recall correctly, Gabriel's "Worse Is Better" is one of the sources that give some detail.

@jamie

@vnikolov If you every looked at GCC you'd realise that it is a lot of small programs specialised for one thing sharing a library/framework for doing what is shared between them.

@PaniczGodek @jamie

@Alfred M. Szmidt

I had somehow formed the impression it was more integrated than that. Thanks for the correction, at some point I'll look into it.
@Vassil Nikolov | Васил Николов

My guess is that the GCC does not fare well under that rule. It is huge and does many things even by today's standards.  A unix purist from the late 70s I can only imagine would be horrified and astounded.

In the memo written by McIlroy, Pinson and Tague it mentions:

Surprising to outsiders is the fact that UNIX compilers produce no listings: printing can be done better and more flexibly by a separate program.

Not too sure what they mean by this, it almost sounds like it's just about printing source code? which I suppose is sometimes called 'listing' today, but a listing from a compiler normally would mean information about the compilation process I would think.

Tho it seems to indicate the first generation or two of c compilers were rather bare bones.  And the earliest one on record today is only 100K of source code.

Although they do mention lex and yacc as compiler 'front ends', so there was some thought of tooling collections.  Perhaps one could imagine a more Unix philosophy compiler collection emerging over time, more modular than GCC?

But GNU never really bought in to the Unix philosophy wholesale.  GNU Emacs obviously does not as we've been discussing, but I'm pretty sure unix purists have always complained about GNU tools being too big and complex and too many options?

Stallman has always been pretty clear that he's never been a big fan of Unix.  GNU copied unix because it was widespread, portable, tractable, and the division into individual programs allowed them to replace/produce it bit by bit.

(@Panicz Maciej Godek bet me to the GNU's Not Unix utterance...)

#unix #gcc
Zotum

@jamie wrote:
> a listing is about printing source code? ... information about the compilation process

Right.
A listing has line numbers and shows compiler input.
(Punch cards can be loaded in the wrong order...)
It also lists all symbols and their locations for reading dumps.

> Stallman has always been pretty clear that he's never been a big fan of Unix.

Not just Stallman.
Perhaps the best single paper about this view at MIT at the time is Gabriel's "Worse Is Better" (as is usually called).

@jamie wrote:
> unix purists have always complained about GNU tools being too big and complex and too many options?

Not just purists and not just about GNU tools.
This Bell Labs (kt? dmr?) quote comes to mind:
"cat came back from Berkeley waving flags".

P.S.
Notice of Correction:
That quote is attributed to Rob Pike.
I don't know if I should mention him with the at-sign here.

P.P.S.
Forgot to mention _The UNIX-HATERS Handbook_,
an important historical document, whether you are for or against.

@Vassil Nikolov | Васил Николов

Re: GCC's size and complexity, there are I suppose a few categories of size and complexity when seen through the eyes of computing autonomy:

- too complex for me to understand
- mostly too complex for me to understand but I can understand & perhaps customize / automate some of it
- too big for me to understand all of it, but I can understand any part of it if I need (or want) to
- small enough and simple enough for me to understand all of it
- I actually do understand all of it

(The picture could be complicated by including what I can't understand right now but could if I put effort into learning new areas, and how much effort, and what my friends and allies can understand, these are important but let's leave them aside for now)

GNU Emacs is in the third category for me (perhaps not the C layer) and that seems like a nice enough place to live.  I can enjoy lots of features yet hack what I like.

GCC and the Linux kernel seem like they're in the top two categories for me. Even people who implement computer programming languages sometimes opine about the opaque behaviour of the compilation, which seems a bit concerning.

I can see the attraction of putting together a third-category system, which perforce would require a different kernel and a different C compiler.

That is certainly a good way of looking at this matter.

Do those people consider compilation as a whole to be opaque,
or just the optimization part of it?
(I don't know: I haven't come across such texts.)

And now for a different area—the above made me wonder in which of those three categories mathematics falls:
"Mathematics is a science of simple things,
arranged appropriately."
(I do regret that I don't know who said this.)

@jamie