permacomputing

Source repository for the main permacomputing wiki site
git clone http://git.permacomputing.net/repos/permacomputing.git # read-only access
Log | Files | Refs

Unix.mdwn (5357B)


      1 **Unix** is a multi-user [[operating system]] whose development was started in
      2 1969 by Ken Thompson and Dennis Ritchie, as well as an entire family of
      3 operating systems derived from the original Unix. Since Unix is also a
      4 trademark that only applies to specific products, terms like "*nix" are
      5 often used to refer to the entire family of Unix-compatible systems
      6 (including [[GNU]]/[[Linux]]). In this article, we don't bother to respect
      7 the trademark (Linux is a Unix for us).
      8 
      9 Unix was originally a mainframe-like [[time-sharing]] operating system
     10 [[scaled down|scalability]] to much smaller computers with much more limited
     11 processing power and storage space. In order to keep the system small,
     12 elegant and flexible, it was decided to have a set of "small and sharp"
     13 tools that can interoperate with each other via input/output piping. At
     14 later times, Unix gathered [[bloat]], and from the 1980s microcomputer point of
     15 view it was already seen as a huge and complex OS for big computers.
     16 
     17 The possibility to reimplement the system gradually, one tool at a time, was
     18 a major reason why Unix was chosen as the basis of the [[GNU]] project, even
     19 though [[Stallman|Richard Stallman]] didn't particularly like it.
     20 
     21 Historically, it may be interesting to compare Unix with [[Forth]] that was
     22 born at the same time for a somewhat similar purpose (bringing a
     23 "mainframe-grade" environment to a small computer), although Forth is a
     24 memory-oriented single-user system whereas Unix is a disk-oriented
     25 multi-user system. A major difference is that while Unix adopted a lot of
     26 ideas and principles from the mainframe world, Forth actively questioned
     27 them in order to get as small as possible. Also, Forth is a programming
     28 language to the core, while Unix consists of many separate tools that
     29 sometimes have a programming language built in.
     30 
     31 Advantages of Unix from the permacomputing perspective
     32 ------------------------------------------------------
     33 
     34   * The basic idea of having small, flexible and interoperable tools is
     35     close to permacomputing ideals.
     36   * The use of a high-level language ([[C]]) has made it independent from
     37     specific processor and computer architectures. Programs tend to be
     38     source-code-compatible across Unix systems and often even with non-Unix
     39     systems.
     40   * There are several independent but largely compatible implementations
     41     (classical Unix, [[GNU]]/[[Linux]], [[Minix]] ...), many of which are
     42     [[FLOSS]].
     43   * Unix-like systems may have relatively low hardware requirements,
     44     especially when talking about "barebones" systems mainly used with
     45     [[character terminal]]s.
     46   * Long history of use in a vast variety of different types of devices
     47     (embedded, workstation, server, supercomputer, etc.).
     48 
     49 Disadvantages and problems
     50 --------------------------
     51 
     52   * Modern, "real-world" Unix systems, like most general-purpose operating
     53     systems, suffer from a lot of [[bloat]] and unnecessary complexity.
     54   * A lot of this complexity is somehow related to legacy compatibility as
     55     are many weird quirks one can find in Unix. One might say that
     56     this has resulted from an excessive prioritization of accumulated
     57     tradition over system-level refactoring.
     58   * Unix has reached such a dominant position in many areas of computing
     59     that it represents [[monoculture]] that narrows down [[technological diversity]].
     60   * Despite having a long legacy, Unix is far from a [[bedrock platform]].
     61     Software often needs to be constantly maintained in order to keep it
     62     compatible with various libraries and other changing pieces of the
     63     environment.
     64   * Binary compatibility between different versions of the same OS may be
     65     surprisingly bad; even C libraries (such as [[glibc|GNU]]) may change
     66     their ABIs in ways that cause incompatibilities and force recompilation.
     67   * Inefficiencies and limitations that can be traced back to the pre-Unix
     68     mainframe ideals:
     69     * Preference for sequences of plain-text lines in input and output (as in 80-column IBM punched cards). Translating between plain-text formats and various internal representations causes overhead. Large plain-text files are often cumbersome to operate with.
     70     * There are good tools for defining a task (by writing a command line)
     71       but the chances to affect the running of the task are much more
     72       limited (as in the old batch-job culture). Possibilities of building
     73       interoperability between running programs are much weaker than between
     74       not-yet-running programs.
     75     * "Waterfall model" in software compilation, producing static monoliths
     76       that are very difficult to arbitrarily change especially when they are
     77       running. This has resulted in a plethora of scripting/configuration
     78       languages that compensate for the inflexibility.
     79   * The original Unix shell was designed to be quite minimal, and
     80     programmability was added to it in various ad-hoc ways by later
     81     developers. Various scripting languages have come into use as a response
     82     to the messiness of shell scripting.
     83   * Unix can be considered far too large and complex to many tasks it is currently used for (embedded systems, single-user mobile computers, etc.)
     84 
     85 Unix-like operating systems and kernels
     86 ---------------------------------------
     87 
     88   * [[BSD]]
     89   * [[Minix]]
     90   * [[GNU]]
     91   * [[Linux]]
     92   * [[Darwin]]
     93   * [[Plan 9]]