

A Plea for Lean Software (1995) [pdf] - vu3rdd
http://www.inf.ethz.ch/personal/wirth/Articles/LeanSoftware.pdf

======
kazinator
"Gee, we achieved a tiny system by throwing out unnecessary things like, oh, a
GUI and icons. And boy, did we ever save space by trimming unnecessary
features from Modula-2 to make Oberon."

 _Facepalm_. How big is the compiler in the big picture? How much extra code
do you have to write because you don't have those language features?

You know, in the late 1980's, I used a nice Modula-2 compiler called TopSpeed
Modula-2.(^) It fit on a single-density 3.5" floppy disk. This Modula-2 had
those features that Wirth trimmed out of Oberon: subranges, enumeration types
and variant records. It compiled very fast, produced compact programs and had
good diagnostics. It came with a text-based IDE in which you could do the
usual things like run the compiler and then navigate through the errors (all
on that one floppy).

Making a new, incompatible language does cut bloat in one way, though: nobody
has any software to port to the system.

Ironically, Wirth argues that one of the ways in which the system saved space
was through dynamic linking. But in fact, this is the major cause of software
image bloat in modern systems.

When a program does not use most of the functions in a dynamic library, that
whole dynamic library is still there.

Using a smattering of dynamic components, just for a little bit of
functionality from each one, is a good way to get a lot of bloat in a hurry.

Secondly, even if multiple programs use different features of the same library
(and this is particularly a problem on Microsoft Windows) they all bundle
their own copy of that library, to understandably insulate themselves from
versioning issues.) This is probably why libraries are not called "shared" on
Windows! A lot of the time they aren't.

Dynamic linking with singly-instantiated read-only mappings does save space if
programs truly share a single version of every component, and if the
components don't contain a lot o functionality that _no_ program in the system
uses.

\---

^
[http://en.wikipedia.org/wiki/Turbo_Modula-2](http://en.wikipedia.org/wiki/Turbo_Modula-2)

------
cwyers
This reads like a rather extreme case of the saying "Bloat is any feature _I_
don't use."

~~~
johnmaguire2013
I think it's more of the Linux and Mac argument of "less is more."

i.e. Make software that is very good at doing one thing, and one thing only.

Advantages: Light, quick software. Small, easy-to-read codebase. If done well,
fits in well with other software.

Disadvantages: Doesn't contain features every user may need.

