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]]