Operating Systems - Learn IT With Davo
Transcription
Operating Systems - Learn IT With Davo
Operating Systems Contents 1 2 Overview 1 1.1 Operating system . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.1.1 Types of operating systems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.1.2 History . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.1.3 Examples of operating systems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.1.4 Components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 1.1.5 Real-time operating systems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 1.1.6 Operating system development as a hobby . . . . . . . . . . . . . . . . . . . . . . . . . . 13 1.1.7 Diversity of operating systems and portability . . . . . . . . . . . . . . . . . . . . . . . . 14 1.1.8 Market share . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 1.1.9 See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 1.1.10 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 1.1.11 Further reading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 1.1.12 External links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 Operating System Functions 16 2.1 Input/output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 2.1.1 Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 2.1.2 Channel I/O . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 2.1.3 Port-mapped I/O . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 2.1.4 See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 File system . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 2.2.1 Aspects of file systems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 2.2.2 Types of file systems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 2.2.3 File systems and operating systems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 2.2.4 Limitations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 2.2.5 See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 2.2.6 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 2.2.7 Further reading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 2.2.8 External links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 Resident monitor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 2.3.1 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 Computer multitasking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 2.2 2.3 2.4 i ii CONTENTS 2.5 2.6 2.7 2.4.1 Multiprogramming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 2.4.2 Cooperative multitasking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 2.4.3 Preemptive multitasking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 2.4.4 Real time . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 2.4.5 Multithreading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 2.4.6 Memory protection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 2.4.7 Memory swapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 2.4.8 Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 2.4.9 See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 2.4.10 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 Process management (computing) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 2.5.1 Multiprogramming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 2.5.2 How multiprogramming increases efficiency . . . . . . . . . . . . . . . . . . . . . . . . . 33 2.5.3 Process creation 33 2.5.4 Process termination . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 2.5.5 Two-state process management model . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 2.5.6 Three-state process management model . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 2.5.7 Five-state process management model . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 2.5.8 Process description and control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 2.5.9 Processor modes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 2.5.10 The Kernel system concept . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 2.5.11 Requesting system services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 2.5.12 See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 2.5.13 Sources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 2.5.14 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 2.5.15 External links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 Memory management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 2.6.1 Dynamic memory allocation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 2.6.2 Systems with virtual memory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 2.6.3 See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 2.6.4 Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 2.6.5 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 2.6.6 Further reading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 2.6.7 External links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 Device driver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 2.7.1 Purpose . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 2.7.2 Development . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 2.7.3 Kernel mode vs. user mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 2.7.4 Applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 2.7.5 Virtual device drivers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 2.7.6 Open drivers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . CONTENTS 2.8 3 2.7.7 APIs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 2.7.8 Identifiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 2.7.9 See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 2.7.10 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 2.7.11 External links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 Runtime library . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 2.8.1 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 2.8.2 External links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 Interrupts and Interrupt Handling 44 3.1 Interrupt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 3.1.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 3.1.2 Types of interrupts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 3.1.3 Difficulty with sharing interrupt lines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 3.1.4 Performance issues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 3.1.5 Typical uses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 3.1.6 See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 3.1.7 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 3.1.8 External links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 Interrupt handler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 3.2.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 3.2.2 See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 3.2.3 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 Interrupt request (PC architecture) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 3.3.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 3.3.2 x86 IRQs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 3.3.3 Conflicts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 3.3.4 See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 3.3.5 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 3.3.6 Further reading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 3.3.7 External links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 Non-maskable interrupt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 3.4.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 3.4.2 History . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 3.4.3 See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 3.4.4 Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 3.4.5 External links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 3.2 3.3 3.4 4 iii User Interfaces 53 4.1 Programmable Interrupt Controller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 4.1.1 Common features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 4.1.2 Well-known types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 iv CONTENTS 4.2 4.3 4.4 5 4.1.3 More information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 4.1.4 See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 4.1.5 External links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 Command-line interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 4.2.1 Operating system command-line interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . 54 4.2.2 Application command-line interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 4.2.3 History . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 4.2.4 Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 4.2.5 Anatomy of a shell CLI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 4.2.6 Command-line interpreter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 4.2.7 Scripting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 4.2.8 Other command-line interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 4.2.9 See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 4.2.10 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 4.2.11 External links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 Text-based user interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 4.3.1 Types of text terminals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 4.3.2 On ANSI-compatible terminals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 4.3.3 Under DOS and Microsoft Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 4.3.4 Under Unix-like systems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 4.3.5 In embedded systems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 4.3.6 Other uses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 4.3.7 See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 4.3.8 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 Graphical user interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 4.4.1 User interface and interaction design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 4.4.2 History . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 4.4.3 Comparison to other interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 4.4.4 Three-dimensional user interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 4.4.5 See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 4.4.6 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 4.4.7 External links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 Operating System Examples 74 5.1 Disk operating system . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 5.1.1 History . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 5.1.2 Disk operating systems that were extensions to the OS . . . . . . . . . . . . . . . . . . . . 75 5.1.3 Disk operating systems that were the main OS . . . . . . . . . . . . . . . . . . . . . . . . 75 CP/M . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 5.2.1 Hardware model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 5.2.2 Components of the operating system . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 5.2.3 History . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 5.2 CONTENTS 5.3 5.4 5.5 v 5.2.4 Legacy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 5.2.5 See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 5.2.6 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 5.2.7 Further reading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 5.2.8 External links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 MS-DOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 5.3.1 History . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 5.3.2 Versions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 5.3.3 Competition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 5.3.4 Legal issues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 5.3.5 Use of undocumented APIs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 5.3.6 End of MS-DOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 5.3.7 Windows command-line interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 5.3.8 Legacy compatibility . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 5.3.9 Related systems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 5.3.10 See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 5.3.11 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 5.3.12 External links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 Microsoft Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 5.4.1 Genealogy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 5.4.2 Version history . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 5.4.3 Timeline of releases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 5.4.4 Usage share . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 5.4.5 Security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 5.4.6 Alternative implementations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 5.4.7 See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 5.4.8 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 5.4.9 External links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 5.5.1 History . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 5.5.2 Design 5.5.3 Development . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 5.5.4 Hardware support 5.5.5 Uses 5.5.6 Market share and uptake . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 5.5.7 Copyright, trademark, and naming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 5.5.8 See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 5.5.9 Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 5.5.10 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 5.5.11 External links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 5.6 Mac OS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 vi CONTENTS 5.6.1 Design concept . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 5.6.2 Versions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 5.6.3 Star Trek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120 5.6.4 68k emulation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120 5.6.5 PowerPC emulation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 5.6.6 Macintosh clones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 5.6.7 A/UX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 5.6.8 MAE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 5.6.9 MkLinux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 5.6.10 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 5.6.11 Bibliography . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 5.6.12 External links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 6 Text and image sources, contributors, and licenses 124 6.1 Text . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124 6.2 Images . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 6.3 Content license . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141 Chapter 1 Overview 1.1 Operating system Unix-like operating systems, e.g., Solaris, Linux, as well as AmigaOS support preemptive multitasking. Cooperative multitasking is achieved by relying on each process to provide time to the other processes in a defined manner. 16-bit versions of Microsoft Windows used cooperative multi-tasking. 32-bit versions of both Windows NT and Win9x, used preemptive multi-tasking. An operating system (OS) is system software that manages computer hardware and software resources and provides common services for computer programs. The operating system is a component of the system software in a computer system. Application programs usually require an operating system to function. Time-sharing operating systems schedule tasks for effi- Single- and multi-user cient use of the system and may also include accounting software for cost allocation of processor time, mass storSingle-user operating systems have no facilities to distinage, printing, and other resources. guish users, but may allow multiple programs to run in For hardware functions such as input and output tandem.[4] A multi-user operating system extends the baand memory allocation, the operating system acts as sic concept of multi-tasking with facilities that identify an intermediary between programs and the computer processes and resources, such as disk space, belonging to hardware,[1][2] although the application code is usually multiple users, and the system permits multiple users to executed directly by the hardware and frequently makes interact with the system at the same time. Time-sharing system calls to an OS function or be interrupted by it. operating systems schedule tasks for efficient use of the Operating systems are found on many devices that con- system and may also include accounting software for cost tain a computer—from cellular phones and video game allocation of processor time, mass storage, printing, and consoles to web servers and supercomputers. other resources to multiple users. Examples of popular modern operating systems include Android, BlackBerry, BSD, Chrome OS, iOS, Linux, OS X, QNX, Steam OS, Microsoft Windows (and variant Windows Phone),[3] and z/OS. The first nine of these examples share roots in Unix. Popular hard realtime operating systems include FreeRTOS, Micrium and VxWorks. 1.1.1 Distributed A distributed operating system manages a group of distinct computers and makes them appear to be a single computer. The development of networked computers that could be linked and communicate with each other gave rise to distributed computing. Distributed computations are carried out on more than one machine. When computers in a group work in cooperation, they form a distributed system.[5] Types of operating systems Single- and multi-tasking A single-tasking system can only run one program at a time, while a multi-tasking operating system allows more than one program to be running in concurrency. This is achieved by time-sharing, dividing the available processor time between multiple processes which are each interrupted repeatedly in time-slices by a task scheduling subsystem of the operating system. Multi-tasking may be characterized in preemptive and co-operative types. In preemptive multitasking, the operating system slices the CPU time and dedicates a slot to each of the programs. Templated In an OS, distributed and cloud computing context, templating refers to creating a single virtual machine image as a guest operating system, then saving it as a tool for multiple running virtual machines (Gagne, 2012, p. 716). The technique is used both in virtualization and cloud computing management, and is common in large server warehouses.[6] 1 2 CHAPTER 1. OVERVIEW Embedded general purpose computers were invented, machine languages (consisting of strings of the binary digits 0 and 1 Embedded operating systems are designed to be used in on punched paper tape) were introduced that sped up the embedded computer systems. They are designed to op- programming process (Stern, 1981). erate on small machines like PDAs with less autonomy. They are able to operate with a limited number of resources. They are very compact and extremely efficient by design. Windows CE and Minix 3 are some examples of embedded operating systems. Real-time A real-time operating system is an operating system that guarantees to process events or data within a certain short amount of time. A real-time operating system may be single- or multi-tasking, but when multitasking, it uses specialized scheduling algorithms so that a deterministic nature of behavior is achieved. An event-driven system switches between tasks based on their priorities or external events while time-sharing operating systems switch tasks based on clock interrupts. Library A library operating system is one in which the services that a typical operating system provides, such as networking, are provided in the form of libraries. These libraries are composed with the application and configuration code to construct unikernels — which are specialised, single OS/360 was used on most IBM mainframe computers beginning address space, machine images that can be deployed to in 1966, including computers used by the Apollo program. cloud or embedded environments. In the early 1950s, a computer could execute only one program at a time. Each user had sole use of the com1.1.2 History puter for a limited period of time and would arrive at a scheduled time with program and data on punched paMain article: History of operating systems per cards and/or punched tape. The program would be See also: Resident monitor loaded into the machine, and the machine would be set to work until the program completed or crashed. Programs Early computers were built to perform a series of single could generally be debugged via a front panel using toggle switches and panel lights. It is said that Alan Turing was a tasks, like a calculator. Basic operating system features were developed in the 1950s, such as resident monitor master of this on the early Manchester Mark 1 machine, and he was already deriving the primitive conception of functions that could automatically run different programs from the principles of the Universal in succession to speed up processing. Operating systems an operating system [7] Turing machine. did not exist in their modern and more complex forms until the early 1960s.[7] Hardware features were added, that enabled use of runtime libraries, interrupts, and parallel processing. When personal computers became popular in the 1980s, operating systems were made for them similar in concept to those used on larger computers. Later machines came with libraries of programs, which would be linked to a user’s program to assist in operations such as input and output and generating computer code from human-readable symbolic code. This was the genesis of the modern-day operating system. However, machines still ran a single job at a time. At Cambridge University in England the job queue was at one time a washing line from which tapes were hung with different colored clothes-pegs to indicate job-priority. In the 1940s, the earliest electronic digital systems had no operating systems. Electronic systems of this time were programmed on rows of mechanical switches or by jumper wires on plug boards. These were special-purpose systems that, for example, generated ballistics tables for An improvement was the Atlas Supervisor introduced the military or controlled the printing of payroll checks with the Manchester Atlas commissioned in 1962, ‘confrom data on punched paper cards. After programmable sidered by many to be the first recognisable modern op- 1.1. OPERATING SYSTEM 3 erating system’.[8] Brinch Hansen described it as “the 1970s, Control Data and the University of Illinois develmost significant breakthrough in the history of operating oped the PLATO operating system, which used plasma systems.”[9] panel displays and long-distance time sharing networks. Plato was remarkably innovative for its time, featuring real-time chat, and multi-user graphical games. Mainframes Main article: Mainframe computer See also: History of IBM mainframe operating systems In 1961, Burroughs Corporation introduced the B5000 with the MCP, (Master Control Program) operating system. The B5000 was a stack machine designed to exclusively support high-level languages with no machine language or assembler, and indeed the MCP was the first OS to be written exclusively in a high-level language – ESPOL, a dialect of ALGOL. MCP also introduced many other ground-breaking innovations, such as being the first commercial implementation of virtual memory. During development of the AS400, IBM made an approach to Burroughs to licence MCP to run on the AS400 hardware. This proposal was declined by Burroughs management to protect its existing hardware production. MCP is still in use today in the Unisys ClearPath/MCP line of computers. Through the 1950s, many major features were pioneered in the field of operating systems, including batch processing, input/output interrupt, buffering, multitasking, spooling, runtime libraries, link-loading, and programs for sorting records in files. These features were included or not included in application software at the option of application programmers, rather than in a separate operating system used by all applications. In 1959, the SHARE Operating System was released as an integrated utility for the IBM 704, and later in the 709 and 7090 mainframes, although it was quickly supplanted by IBSYS/IBJOB on UNIVAC, the first commercial computer manufacturer, produced a series of EXEC operating systems. Like the 709, 7090 and 7094. all early main-frame systems, this batch-oriented system During the 1960s, IBM’s OS/360 introduced the concept managed magnetic drums, disks, card readers and line of a single OS spanning an entire product line, which printers. In the 1970s, UNIVAC produced the Real-Time was crucial for the success of the System/360 machines. Basic (RTB) system to support large-scale time sharing, IBM's current mainframe operating systems are distant also patterned after the Dartmouth BC system. descendants of this original system and applications writGeneral Electric and MIT developed General Electric ten for OS/360 can still be run on modern machines. Comprehensive Operating Supervisor (GECOS), which OS/360 also pioneered the concept that the operating sysintroduced the concept of ringed security privilege levels. tem keeps track of all of the system resources that are After acquisition by Honeywell it was renamed General used, including program and data space allocation in main Comprehensive Operating System (GCOS). memory and file space in secondary storage, and file locking during update. When the process is terminated for Digital Equipment Corporation developed many operany reason, all of these resources are re-claimed by the ating systems for its various computer lines, including TOPS-10 and TOPS-20 time sharing systems for the 36operating system. bit PDP-10 class systems. Before the widespread use The alternative CP-67 system for the S/360-67 started of UNIX, TOPS-10 was a particularly popular system in a whole line of IBM operating systems focused on the universities, and in the early ARPANET community. concept of virtual machines. Other operating systems used on IBM S/360 series mainframes included sys- From the late 1960s through the late 1970s, several hardtems developed by IBM: COS/360 (Compatibility Op- ware capabilities evolved that allowed similar or ported erating System), DOS/360 (Disk Operating System), software to run on more than one system. Early systems TSS/360 (Time Sharing System), TOS/360 (Tape Op- had utilized microprogramming to implement features erating System), BOS/360 (Basic Operating System), on their systems in order to permit different underlying and ACP (Airline Control Program), as well as a few computer architectures to appear to be the same as othnon-IBM systems: MTS (Michigan Terminal System), ers in a series. In fact, most 360s after the 360/40 (exMUSIC (Multi-User System for Interactive Computing), cept the 360/165 and 360/168) were microprogrammed implementations. and ORVYL (Stanford Timesharing System). Control Data Corporation developed the SCOPE operating system in the 1960s, for batch processing. In cooperation with the University of Minnesota, the Kronos and later the NOS operating systems were developed during the 1970s, which supported simultaneous batch and timesharing use. Like many commercial timesharing systems, its interface was an extension of the Dartmouth BASIC operating systems, one of the pioneering efforts in timesharing and programming languages. In the late The enormous investment in software for these systems made since the 1960s caused most of the original computer manufacturers to continue to develop compatible operating systems along with the hardware. Notable supported mainframe operating systems include: • Burroughs MCP – B5000, 1961 to Unisys Clearpath/MCP, present 4 CHAPTER 1. OVERVIEW • IBM OS/360 – IBM System/360, 1966 to IBM z/OS, present • IBM CP-67 – IBM System/360, 1967 to IBM z/VM • UNIVAC EXEC 8 – UNIVAC 1108, 1967, to OS 2200 Unisys Clearpath Dorado, present Microcomputers PC DOS was an early personal computer OS that featured a command line interface. sonal computers with the ability to run multitasking operating systems like those of earlier minicomputers and mainframes. Microsoft responded to this progress by hiring Dave Cutler, who had developed the VMS operating system for Digital Equipment Corporation. He would lead the development of the Windows NT operating system, which continues to serve as the basis for Microsoft’s operating systems line. Steve Jobs, a co-founder of Apple Inc., started NeXT Computer Inc., which developed the NEXTSTEP operating system. NEXTSTEP would later be acquired by Apple Inc. and used, along with code from FreeBSD as the core of Mac OS X. The GNU Project was started by activist and programmer Richard Stallman with the goal of creating a complete free software replacement to the proprietary UNIX operating system. While the project was highly successful in duplicating the functionality of various parts of UNIX, development of the GNU Hurd kernel proved to be unproductive. In 1991, Finnish computer science student Linus Torvalds, with cooperation from volunteers collaborating over the Internet, released the first version of the Linux kernel. It was soon merged with the GNU user space components and system software to form a complete operating system. Since then, the combination of the two major components has usually been referred to as simply “Linux” by the software industry, a naming convention that Stallman and the Free Software Foundation remain opposed to, preferring the name GNU/Linux. The Berkeley Software Distribution, known as BSD, is the UNIX derivative distributed by the University of California, Berkeley, starting in the 1970s. Freely distributed and ported to many minicomputers, it eventually also gained a following for use on PCs, mainly as FreeBSD, NetBSD and OpenBSD. 1.1.3 Examples of operating systems Mac OS by Apple Computer became the first widespread OS to feature a graphical user interface. Many of its features such as windows and icons would later become commonplace in GUIs. The first microcomputers did not have the capacity or need for the elaborate operating systems that had been developed for mainframes and minis; minimalistic operating systems were developed, often loaded from ROM and known as monitors. One notable early disk operating system was CP/M, which was supported on many early microcomputers and was closely imitated by Microsoft's MS-DOS, which became widely popular as the operating system chosen for the IBM PC (IBM’s version of it was called IBM DOS or PC DOS). In the 1980s, Apple Computer Inc. (now Apple Inc.) abandoned its popular Apple II series of microcomputers to introduce the Apple Macintosh computer with an innovative Graphical User Interface (GUI) to the Mac OS. Unix and Unix-like operating systems Evolution of Unix systems Main article: Unix Unix was originally written in assembly language.[10] Ken Thompson wrote B, mainly based on BCPL, based on his experience in the MULTICS project. B was replaced by C, and Unix, rewritten in C, developed into a large, complex family of inter-related operating systems which have been influential in every modern operating system (see History). The Unix-like family is a diverse group of operating systems, with several major sub-categories including System V, BSD, and Linux. The name "UNIX" is a trademark of The Open Group which licenses it for use with any operThe introduction of the Intel 80386 CPU chip with 32- ating system that has been shown to conform to their defbit architecture and paging capabilities, provided per- initions. “UNIX-like” is commonly used to refer to the 1.1. OPERATING SYSTEM 5 large set of operating systems which resemble the origi- there began adding new programs to make things easier, nal UNIX. such as text editors. When Berkeley received new VAX Unix-like systems run on a wide variety of computer ar- computers in 1978 with Unix installed, the school’s unchitectures. They are used heavily for servers in business, dergraduates modified Unix even more in order to take as well as workstations in academic and engineering envi- advantage of the computer’s hardware possibilities. The ronments. Free UNIX variants, such as Linux and BSD, Defense Advanced Research Projects Agency of the US Department of Defense took interest, and decided to fund are popular in these areas. the project. Many schools, corporations, and government Four operating systems are certified by The Open Group organizations took notice and started to use Berkeley’s (holder of the Unix trademark) as Unix. HP’s HP-UX version of Unix instead of the official one distributed by and IBM’s AIX are both descendants of the original Sys- AT&T. tem V Unix and are designed to run only on their respective vendor’s hardware. In contrast, Sun Microsystems's Steve Jobs, upon leaving Apple Inc. in 1985, formed Solaris Operating System can run on multiple types of NeXT Inc., a company that manufactured high-end comhardware, including x86 and Sparc servers, and PCs. Ap- puters running on a variation of BSD called NeXTSTEP. ple’s OS X, a replacement for Apple’s earlier (non-Unix) One of these computers was used by Tim Berners-Lee as Mac OS, is a hybrid kernel-based BSD variant derived the first webserver to create the World Wide Web. from NeXTSTEP, Mach, and FreeBSD. Developers like Keith Bostic encouraged the project to replace any non-free code that originated with Bell Labs. Unix interoperability was sought by establishing the Once this was done, however, AT&T sued. Eventually, POSIX standard. The POSIX standard can be applied to after two years of legal disputes, the BSD project came any operating system, although it was originally created out ahead and spawned a number of free derivatives, such for various Unix variants. as FreeBSD and NetBSD. BSD and its descendants Main article: Berkeley SoftOS X Main article: OS X ware Distribution OS X (formerly “Mac OS X”) is a line of open core A subgroup of the Unix family is the Berkeley Software The standard user interface of OS X The first server for the World Wide Web ran on NeXTSTEP, based on BSD Distribution family, which includes FreeBSD, NetBSD, and OpenBSD. These operating systems are most commonly found on webservers, although they can also function as a personal computer OS. The Internet owes much of its existence to BSD, as many of the protocols now commonly used by computers to connect, send and receive data over a network were widely implemented and refined in BSD. The World Wide Web was also first demonstrated on a number of computers running an OS based on BSD called NeXTSTEP. BSD has its roots in Unix. In 1974, University of California, Berkeley installed its first Unix system. Over time, students and staff in the computer science department graphical operating systems developed, marketed, and sold by Apple Inc., the latest of which is pre-loaded on all currently shipping Macintosh computers. OS X is the successor to the original Mac OS, which had been Apple’s primary operating system since 1984. Unlike its predecessor, OS X is a UNIX operating system built on technology that had been developed at NeXT through the second half of the 1980s and up until Apple purchased the company in early 1997. The operating system was first released in 1999 as Mac OS X Server 1.0, with a desktoporiented version (Mac OS X v10.0 “Cheetah”) following in March 2001. Since then, six more distinct “client” and "server" editions of OS X have been released, until the two were merged in OS X 10.7 “Lion”. Releases of OS X v10.0 through v10.8 are named after big cats. Starting with v10.9, “Mavericks”, OS X versions are named after inspirational places in California.[11] OS X 10.10 6 CHAPTER 1. OVERVIEW “Yosemite”, the most recent version, was announced and released on 2 June 2014 at the WWDC 2014. Prior to its merging with OS X, the server edition – OS X Server – was architecturally identical to its desktop counterpart and usually ran on Apple’s line of Macintosh server hardware. OS X Server included work group management and administration software tools that provide simplified access to key network services, including a mail transfer agent, a Samba server, an LDAP server, a domain name server, and others. With Mac OS X v10.7 Lion, all server aspects of Mac OS X Server have been integrated into the client version and the product re-branded as “OS X” (dropping “Mac” from the name). The server tools are now offered as an application.[12] Linux Main articles: Linux and Linux kernel The Linux kernel originated in 1991 as a side project of Android, a popular mobile operating system using a modified version of the Linux kernel Ubuntu, desktop Linux distribution Linus Torvalds, while a university student in Finland. He posted information about his project on a newsgroup for computer students and programmers, and received support and assistance from volunteers who succeeded in creating a complete and functional kernel. Linux is Unix-like, but was developed without any Unix code, unlike BSD and its variants. Because of its open license model, the Linux kernel code is available for study and modification, which resulted in its use on a wide range of computing machinery from supercomputers to smart-watches. Although estimates suggest that Linux is used on only 1.82% of all personal computers,[13] it has been widely adopted for use in servers[14] and embedded systems[15] such as cell phones. Linux has superseded Unix on many platforms and is used on the ten most powerful supercomputers in the world.[16] The Linux kernel is used in some popular distributions, such as Red Hat, Debian, Ubuntu, Linux Mint and Google's Android. Google Chromium OS Main article: Chromium OS computer users who spend most of their time on the Internet, it is mainly a web browser with limited ability to run local applications, though it has a built-in file manager and media player. Instead, it relies on Internet applications (or Web apps) used in the web browser to accomplish tasks such as word processing.[17] Chromium OS differs from Chrome OS in that Chromium is open-source and used primarily by developers whereas Chrome OS is the operating system shipped out in Chromebooks.[18] Microsoft Windows Main article: Microsoft Windows Microsoft Windows is a family of proprietary operating systems designed by Microsoft Corporation and primarily targeted to Intel architecture based computers, with an estimated 88.9 percent total usage share on Web Google connected computers.[13][19][20][21] The newest version is Windows 10. Windows 7 recently overtook Windows XP as most used OS.[22][23][24] Chromium is an operating system based on the Linux ker- Microsoft Windows originated in 1985, as an operating nel and designed by Google. Since Chromium OS targets environment running on top of MS-DOS, which was the 1.1. OPERATING SYSTEM standard operating system shipped on most Intel architecture personal computers at the time. In 1995, Windows 95 was released which only used MS-DOS as a bootstrap. For backwards compatibility, Win9x could run real-mode MS-DOS[25][26] and 16 bits Windows 3.x[27] drivers. Windows ME, released in 2000, was the last version in the Win9x family. Later versions have all been based on the Windows NT kernel. Current client versions of Windows run on IA-32, x86-64 and 32-bit ARM microprocessors.[28] In addition Itanium is still supported in older server version Windows Server 2008 R2. In the past, Windows NT supported additional architectures. Server editions of Windows are widely used. In recent years, Microsoft has expended significant capital in an effort to promote the use of Windows as a server operating system. However, Windows’ usage on servers is not as widespread as on personal computers, as Windows competes against Linux and BSD for server market share.[29][30] The first PC that used windows operating system was the IBM Personal System/2. 7 Applications Kernel CPU Memory Devices A kernel connects the application software to the hardware of a computer. With the aid of the firmware and device drivers, the kernel provides the most basic level of control over all of the computer’s hardware devices. It manages memory access for programs in the RAM, it determines which programs Other get access to which hardware resources, it sets up or resets the CPU’s operating states for optimal operation at all There have been many operating systems that were signif- times, and it organizes the data for long-term non-volatile icant in their day but are no longer so, such as AmigaOS; storage with file systems on such media as disks, tapes, OS/2 from IBM and Microsoft; Mac OS, the non-Unix flash memory, etc. precursor to Apple’s Mac OS X; BeOS; XTS-300; RISC OS; MorphOS; Haiku; BareMetal and FreeMint. Some are still used in niche markets and continue to be de- Program execution Main article: Process (computveloped as minority platforms for enthusiast commu- ing) nities and specialist applications. OpenVMS, formerly from DEC, is still under active development by Hewlett- The operating system provides an interface between an Packard. Yet other operating systems are used almost application program and the computer hardware, so that exclusively in academia, for operating systems education an application program can interact with the hardware or to do research on operating system concepts. A typi- only by obeying rules and procedures programmed into cal example of a system that fulfills both roles is MINIX, the operating system. The operating system is also a set while for example Singularity is used purely for research. of services which simplify development and execution of Other operating systems have failed to win significant application programs. Executing an application program market share, but have introduced innovations that have involves the creation of a process by the operating system influenced mainstream operating systems, not least Bell kernel which assigns memory space and other resources, establishes a priority for the process in multi-tasking sysLabs’ Plan 9. tems, loads program binary code into memory, and initiates execution of the application program which then interacts with the user and with hardware devices. 1.1.4 Components The components of an operating system all exist in order to make the different parts of a computer work together. All user software needs to go through the operating system in order to use any of the hardware, whether it be as simple as a mouse or keyboard or as complex as an Internet component. Kernel Main article: Kernel (computing) Interrupts Main article: Interrupt Interrupts are central to operating systems, as they provide an efficient way for the operating system to interact with and react to its environment. The alternative — having the operating system “watch” the various sources of input for events (polling) that require action — can be found in older systems with very small stacks (50 or 60 bytes) but is unusual in modern systems with large stacks. Interrupt-based programming is directly supported by most modern CPUs. Interrupts provide a computer with 8 CHAPTER 1. OVERVIEW a way of automatically saving local register contexts, and running specific code in response to events. Even very basic computers support hardware interrupts, and allow the programmer to specify code which may be run when that event takes place. tasks that need unrestricted access to hardware, such as controlling how memory is written and erased, and communication with devices like graphics cards. Protected mode, in contrast, is used for almost everything else. Applications operate within protected mode, and can only use hardware by communicating with the kernel, which controls everything in supervisor mode. CPUs might have other modes similar to protected mode as well, such as the virtual modes in order to emulate older processor types, such as 16-bit processors on a 32-bit one, or 32-bit processors on a 64-bit one. When an interrupt is received, the computer’s hardware automatically suspends whatever program is currently running, saves its status, and runs computer code previously associated with the interrupt; this is analogous to placing a bookmark in a book in response to a phone call. In modern operating systems, interrupts are handled by the operating system’s kernel. Interrupts may come from When a computer first starts up, it is automatically runeither the computer’s hardware or the running program. ning in supervisor mode. The first few programs to run When a hardware device triggers an interrupt, the oper- on the computer, being the BIOS or EFI, bootloader, and ating system’s kernel decides how to deal with this event, the operating system have unlimited access to hardware generally by running some processing code. The amount – and this is required because, by definition, initializing of code being run depends on the priority of the interrupt a protected environment can only be done outside of one. (for example: a person usually responds to a smoke de- However, when the operating system passes control to antector alarm before answering the phone). The processing other program, it can place the CPU into protected mode. In protected mode, programs may have access to a more limited set of the CPU’s instructions. A user program may leave protected mode only by triggering an interrupt, causing control to be passed back to the kernel. In this way the operating system can maintain exclusive control A program may also trigger an interrupt to the operat- over things like access to hardware and memory. ing system. If a program wishes to access hardware, for The term “protected mode resource” generally refers to example, it may interrupt the operating system’s kernel, one or more CPU registers, which contain information which causes control to be passed back to the kernel. The that the running program isn't allowed to alter. Attempts kernel then processes the request. If a program wishes to alter these resources generally causes a switch to suadditional resources (or wishes to shed resources) such as pervisor mode, where the operating system can deal with memory, it triggers an interrupt to get the kernel’s atten- the illegal operation the program was attempting (for extion. ample, by killing the program). of hardware interrupts is a task that is usually delegated to software called a device driver, which may be part of the operating system’s kernel, part of another program, or both. Device drivers may then relay information to a running program by various means. Modes Main articles: Protected mode and Supervisor Memory management Main article: Memory manmode Modern CPUs support multiple modes of operation. agement Ring 3 Ring 2 Least privileged Ring 1 Ring 0 Kernel Device drivers Most privileged Device drivers Applications Privilege rings for the x86 available in protected mode. Operating systems determine which processes run in each mode. CPUs with this capability use at least two modes: protected mode and supervisor mode. The supervisor mode is used by the operating system’s kernel for low level Among other things, a multiprogramming operating system kernel must be responsible for managing all system memory which is currently in use by programs. This ensures that a program does not interfere with memory already in use by another program. Since programs time share, each program must have independent access to memory. Cooperative memory management, used by many early operating systems, assumes that all programs make voluntary use of the kernel's memory manager, and do not exceed their allocated memory. This system of memory management is almost never seen any more, since programs often contain bugs which can cause them to exceed their allocated memory. If a program fails, it may cause memory used by one or more other programs to be affected or overwritten. Malicious programs or viruses may purposefully alter another program’s memory, or may affect the operation of the operating system itself. With cooperative memory management, it takes only one mis- 1.1. OPERATING SYSTEM behaved program to crash the system. Memory protection enables the kernel to limit a process’ access to the computer’s memory. Various methods of memory protection exist, including memory segmentation and paging. All methods require some level of hardware support (such as the 80286 MMU), which doesn't exist in all computers. In both segmentation and paging, certain protected mode registers specify to the CPU what memory address it should allow a running program to access. Attempts to access other addresses trigger an interrupt which cause the CPU to re-enter supervisor mode, placing the kernel in charge. This is called a segmentation violation or SegV for short, and since it is both difficult to assign a meaningful result to such an operation, and because it is usually a sign of a misbehaving program, the kernel generally resorts to terminating the offending program, and reports the error. Windows versions 3.1 through ME had some level of memory protection, but programs could easily circumvent the need to use it. A general protection fault would be produced, indicating a segmentation violation had occurred; however, the system would often crash anyway. 9 Virtual memory (per process) Physical memory Another process's memory RAM Disk Virtual memory Main article: Virtual memory Further information: Page fault The use of virtual memory addressing (such as paging or segmentation) means that the kernel can choose what memory each program may use at any given time, allowing the operating system to use the same memory locations for multiple tasks. Many operating systems can “trick” programs into using memory scattered around the hard disk and RAM as if it is one continuous chunk of memory, called virtual memory. When the kernel detects a page fault it generally adjusts the virtual memory range of the program which triggered it, granting it access to the memory requested. This gives the kernel discretionary power over where a particular application’s memory is stored, or even whether or not it has actually been allocated yet. things at one time, this is generally done via time-sharing, which means that each program uses a share of the computer’s time to execute. Multitasking Main articles: Computer multitasking and Process management (computing) Further information: Context switch, Preemptive multiIf a program tries to access memory that isn't in its current tasking and Cooperative multitasking range of accessible memory, but nonetheless has been allocated to it, the kernel is interrupted in the same way Multitasking refers to the running of multiple indepenas it would if the program were to exceed its allocated dent computer programs on the same computer; giving memory. (See section on memory management.) Under the appearance that it is performing the tasks at the same UNIX this kind of interrupt is referred to as a page fault. time. Since most computers can do at most one or two In modern operating systems, memory which is accessed less frequently can be temporarily stored on disk or other media to make that space available for use by other programs. This is called swapping, as an area of memory can be used by multiple programs, and what that memory area contains can be swapped or exchanged on demand. An operating system kernel contains a scheduling program which determines how much time each process spends executing, and in which order execution control should be passed to programs. Control is passed to a process by the kernel, which allows the program access to the CPU and memory. Later, control is returned to the kernel through some mechanism, so that another program may be allowed to use the CPU. This so-called passing of control between the kernel and applications is called a context switch. “Virtual memory” provides the programmer or the user with the perception that there is a much larger amount of An early model which governed the allocation of time to programs was called cooperative multitasking. In this RAM in the computer than is really there.[31] 10 model, when control is passed to a program by the kernel, it may execute for as long as it wants before explicitly returning control to the kernel. This means that a malicious or malfunctioning program may not only prevent any other programs from using the CPU, but it can hang the entire system if it enters an infinite loop. CHAPTER 1. OVERVIEW them to be stored in a hierarchy of directories or folders arranged in a directory tree. Early operating systems generally supported a single type of disk drive and only one kind of file system. Early file systems were limited in their capacity, speed, and in the kinds of file names and directory structures they could Modern operating systems extend the concepts of appli- use. These limitations often reflected limitations in the cation preemption to device drivers and kernel code, so operating systems they were designed for, making it very that the operating system has preemptive control over in- difficult for an operating system to support more than one ternal run-times as well. file system. The philosophy governing preemptive multitasking is that of ensuring that all programs are given regular time on the CPU. This implies that all programs must be limited in how much time they are allowed to spend on the CPU without being interrupted. To accomplish this, modern operating system kernels make use of a timed interrupt. A protected mode timer is set by the kernel which triggers a return to supervisor mode after the specified time has elapsed. (See above sections on Interrupts and Dual Mode Operation.) While many simpler operating systems support a limited range of options for accessing storage systems, operating systems like UNIX and Linux support a technology known as a virtual file system or VFS. An operating system such as UNIX supports a wide array of storage devices, regardless of their design or file systems, allowing them to be accessed through a common application programming interface (API). This makes it unnecessary for programs to have any knowledge about the device they are accessing. A VFS allows the operating system to proOn many single user operating systems cooperative mul- vide programs with access to an unlimited number of devices with an infinite variety of file systems installed on titasking is perfectly adequate, as home computers generally run a small number of well tested programs. The them, through the use of specific device drivers and file system drivers. AmigaOS is an exception, having preemptive multitasking from its very first version. Windows NT was the first A connected storage device, such as a hard drive, is acversion of Microsoft Windows which enforced preemp- cessed through a device driver. The device driver undertive multitasking, but it didn't reach the home user mar- stands the specific language of the drive and is able to ket until Windows XP (since Windows NT was targeted translate that language into a standard language used by the operating system to access all disk drives. On UNIX, at professionals). this is the language of block devices. When the kernel has an appropriate device driver in place, Disk access and file systems Main article: Virtual file it can then access the contents of the disk drive in raw forsystem mat, which may contain one or more file systems. A file Access to data stored on disks is a central feature of all system driver is used to translate the commands used to access each specific file system into a standard set of commands that the operating system can use to talk to all file systems. Programs can then deal with these file systems on the basis of filenames, and directories/folders, contained within a hierarchical structure. They can create, delete, open, and close files, as well as gather various information about them, including access permissions, size, free space, and creation and modification dates. File systems allow users and programs to organize and sort files on a computer, often through the use of directories (or “folders”) operating systems. Computers store data on disks using files, which are structured in specific ways in order to allow for faster access, higher reliability, and to make better use out of the drive’s available space. The specific way in which files are stored on a disk is called a file system, and enables files to have names and attributes. It also allows Various differences between file systems make supporting all file systems difficult. Allowed characters in file names, case sensitivity, and the presence of various kinds of file attributes makes the implementation of a single interface for every file system a daunting task. Operating systems tend to recommend using (and so support natively) file systems specifically designed for them; for example, NTFS in Windows and ext3 and ReiserFS in Linux. However, in practice, third party drivers are usually available to give support for the most widely used file systems in most general-purpose operating systems (for example, NTFS is available in Linux through NTFS3g, and ext2/3 and ReiserFS are available in Windows through third-party software). 1.1. OPERATING SYSTEM Support for file systems is highly varied among modern operating systems, although there are several common file systems which almost all operating systems include support and drivers for. Operating systems vary on file system support and on the disk formats they may be installed on. Under Windows, each file system is usually limited in application to certain media; for example, CDs must use ISO 9660 or UDF, and as of Windows Vista, NTFS is the only file system which the operating system can be installed on. It is possible to install Linux onto many types of file systems. Unlike other operating systems, Linux and UNIX allow any file system to be used regardless of the media it is stored in, whether it is a hard drive, a disc (CD, DVD...), a USB flash drive, or even contained within a file located on another file system. Device drivers Main article: Device driver A device driver is a specific type of computer software developed to allow interaction with hardware devices. Typically this constitutes an interface for communicating with the device, through the specific computer bus or communications subsystem that the hardware is connected to, providing commands to and/or receiving data from the device, and on the other end, the requisite interfaces to the operating system and software applications. It is a specialized hardware-dependent computer program which is also operating system specific that enables another program, typically an operating system or applications software package or computer program running under the operating system kernel, to interact transparently with a hardware device, and usually provides the requisite interrupt handling necessary for any necessary asynchronous time-dependent hardware interfacing needs. The key design goal of device drivers is abstraction. Every model of hardware (even within the same class of device) is different. Newer models also are released by manufacturers that provide more reliable or better performance and these newer models are often controlled differently. Computers and their operating systems cannot be expected to know how to control every device, both now and in the future. To solve this problem, operating systems essentially dictate how every type of device should be controlled. The function of the device driver is then to translate these operating system mandated function calls into device specific calls. In theory a new device, which is controlled in a new manner, should function correctly if a suitable driver is available. This new driver ensures that the device appears to operate as usual from the operating system’s point of view. 11 arates itself from the process until it receives a response from the device driver, or gives it more tasks to do. Networking Main article: Computer network Currently most operating systems support a variety of networking protocols, hardware, and applications for using them. This means that computers running dissimilar operating systems can participate in a common network for sharing resources such as computing, files, printers, and scanners using either wired or wireless connections. Networks can essentially allow a computer’s operating system to access the resources of a remote computer to support the same functions as it could if those resources were connected directly to the local computer. This includes everything from simple communication, to using networked file systems or even sharing another computer’s graphics or sound hardware. Some network services allow the resources of a computer to be accessed transparently, such as SSH which allows networked users direct access to a computer’s command line interface. Client/server networking allows a program on a computer, called a client, to connect via a network to another computer, called a server. Servers offer (or host) various services to other network computers and users. These services are usually provided through ports or numbered access points beyond the server’s network address. Each port number is usually associated with a maximum of one running program, which is responsible for handling requests to that port. A daemon, being a user program, can in turn access the local hardware resources of that computer by passing requests to the operating system kernel. Many operating systems support one or more vendorspecific or open networking protocols as well, for example, SNA on IBM systems, DECnet on systems from Digital Equipment Corporation, and Microsoft-specific protocols (SMB) on Windows. Specific protocols for specific tasks may also be supported such as NFS for file access. Protocols like ESound, or esd can be easily extended over the network to provide sound from local applications, on a remote system’s sound hardware. Security Main article: Computer security A computer being secure depends on a number of technologies working properly. A modern operating system provides access to a number of resources, which are available to software running on the system, and to external devices like networks via the kernel. Under versions of Windows before Vista and versions of Linux before 2.6, all driver execution was co-operative, meaning that if a driver entered an infinite loop it would freeze the system. More recent revisions of these operating systems incorporate kernel preemption, where the The operating system must be capable of distinguishkernel interrupts the driver to give it tasks, and then sep- ing between requests which should be allowed to be pro- 12 cessed, and others which should not be processed. While some systems may simply distinguish between “privileged” and “non-privileged”, systems commonly have a form of requester identity, such as a user name. To establish identity there may be a process of authentication. Often a username must be quoted, and each username may have a password. Other methods of authentication, such as magnetic cards or biometric data, might be used instead. In some cases, especially connections from the network, resources may be accessed with no authentication at all (such as reading files over a network share). Also covered by the concept of requester identity is authorization; the particular services and resources accessible by the requester once logged into a system are tied to either the requester’s user account or to the variously configured groups of users to which the requester belongs. CHAPTER 1. OVERVIEW to the service on that port. An alternative strategy, and the only sandbox strategy available in systems that do not meet the Popek and Goldberg virtualization requirements, is where the operating system is not running user programs as native code, but instead either emulates a processor or provides a host for a p-code based system such as Java. Internal security is especially relevant for multi-user systems; it allows each user of the system to have private files that the other users cannot tamper with or read. Internal security is also vital if auditing is to be of any use, since a program can potentially bypass the operating system, inclusive of bypassing auditing. User interface In addition to the allow or disallow model of security, a system with a high level of security also offers auditing options. These would allow tracking of requests for access to resources (such as, “who has been reading this file?"). Internal security, or security from an already running program is only possible if all possibly harmful requests must be carried out through interrupts to the operating system kernel. If programs can directly access hardware and resources, they cannot be secured. External security involves a request from outside the computer, such as a login at a connected console or some kind of network connection. External requests are often passed through device drivers to the operating system’s kernel, where they can be passed onto applications, or carried out directly. Security of operating systems has long been a concern because of highly sensitive data held on computers, both of a commercial and military nature. The United States Government Department of Defense (DoD) created the Trusted Computer System Evaluation Criteria (TCSEC) which is a standard that sets basic requirements for assessing the effectiveness of security. This became of vital importance to operating system makers, because the TCSEC was used to evaluate, classify and select trusted operating systems being considered for the processing, storage and retrieval of sensitive or classified information. A screenshot of the Bash command line. Each command is typed out after the 'prompt', and then its output appears below, working its way down the screen. The current command prompt is at the bottom. Main article: Operating system user interface Every computer that is to be operated by an individual requires a user interface. The user interface is usually referred to as a shell and is essential if human interaction is to be supported. The user interface views the directory structure and requests services from the operating system that will acquire data from input hardware devices, such as a keyboard, mouse or credit card reader, and requests operating system services to display prompts, status messages and such on output hardware devices, such as a video monitor or printer. The two most common forms of a user interface have historically been the command-line interface, where computer commands are typed out lineby-line, and the graphical user interface, where a visual environment (most commonly a WIMP) is present. Network services include offerings such as file sharing, print services, email, web sites, and file transfer protocols (FTP), most of which can have compromised security. At the front line of security are hardware devices known as firewalls or intrusion detection/prevention systems. At the operating system level, there are a number of software firewalls available, as well as intrusion detection/prevention systems. Most modern operating systems include a software firewall, which is enabled by default. A software firewall can be configured to allow or deny network traffic to or from a service or application running on the operating system. Therefore, one can install and be running an insecure service, such as Telnet or FTP, and not have to be threatened by a security breach be- Graphical user interfaces Most of the modern comcause the firewall would deny all traffic trying to connect puter systems support graphical user interfaces (GUI), 1.1. OPERATING SYSTEM 13 ple, Windows has modified its user interface almost every time a new major version of Windows is released, and the Mac OS GUI changed dramatically with the introduction of Mac OS X in 1999.[32] 1.1.5 Real-time operating systems Main article: Real-time operating system A screenshot of the KDE Plasma Desktop graphical user interface. Programs take the form of images on the screen, and the files, folders (directories), and applications take the form of icons and symbols. A mouse is used to navigate the computer. A real-time operating system (RTOS) is an operating system intended for applications with fixed deadlines (realtime computing). Such applications include some small embedded systems, automobile engine controllers, industrial robots, spacecraft, industrial control, and some largescale computing systems. An early example of a large-scale real-time operating sysand often include them. In some computer systems, such tem was Transaction Processing Facility developed by as the original implementation of Mac OS, the GUI is American Airlines and IBM for the Sabre Airline Reserintegrated into the kernel. vations System. While technically a graphical user interface is not an op- Embedded systems that have fixed deadlines use a realerating system service, incorporating support for one into time operating system such as VxWorks, PikeOS, eCos, the operating system kernel can allow the GUI to be more QNX, MontaVista Linux and RTLinux. Windows CE is responsive by reducing the number of context switches re- a real-time operating system that shares similar APIs to quired for the GUI to perform its output functions. Other desktop Windows but shares none of desktop Windows’ operating systems are modular, separating the graphics codebase. Symbian OS also has an RTOS kernel (EKA2) subsystem from the kernel and the Operating System. In starting with version 8.0b. the 1980s UNIX, VMS and many others had operating systems that were built this way. Linux and Mac OS X are Some embedded systems use operating systems such as also built this way. Modern releases of Microsoft Win- Palm OS, BSD, and Linux, although such operating sysdows such as Windows Vista implement a graphics sub- tems do not support real-time computing. system that is mostly in user-space; however the graphics drawing routines of versions between Windows NT 4.0 and Windows Server 2003 exist mostly in kernel space. 1.1.6 Operating system development as a hobby Windows 9x had very little distinction between the interface and the kernel. Many computer operating systems allow the user to install See also: Hobbyist operating system development or create any user interface they desire. The X Window System in conjunction with GNOME or KDE Plasma Desktop is a commonly found setup on most Unix and Unix-like (BSD, Linux, Solaris) systems. A number of Windows shell replacements have been released for Microsoft Windows, which offer alternatives to the included Windows shell, but the shell itself cannot be separated from Windows. Numerous Unix-based GUIs have existed over time, most derived from X11. Competition among the various vendors of Unix (HP, IBM, Sun) led to much fragmentation, though an effort to standardize in the 1990s to COSE and CDE failed for various reasons, and were eventually eclipsed by the widespread adoption of GNOME and K Desktop Environment. Prior to free software-based toolkits and desktop environments, Motif was the prevalent toolkit/desktop combination (and was the basis upon which CDE was developed). Operating system development is one of the most complicated activities in which a computing hobbyist may engage. A hobby operating system may be classified as one whose code has not been directly derived from an existing operating system, and has few users and active developers.[33] In some cases, hobby development is in support of a "homebrew" computing device, for example, a simple single-board computer powered by a 6502 microprocessor. Or, development may be for an architecture already in widespread use. Operating system development may come from entirely new concepts, or may commence by modeling an existing operating system. In either case, the hobbyist is his/her own developer, or may interact with a small and sometimes unstructured group of individuals who have like interests. Examples of a hobby operating system include ReactOS Graphical user interfaces evolve over time. For exam- and Syllable. 14 1.1.7 CHAPTER 1. OVERVIEW Diversity of operating systems and portability [6] Silberschatz Galvin Gagne (2012). Operating Systems Concepts. New York: Wiley. ISBN 978-1118063330. [7] Hansen, Per Brinch, ed. (2001). Classic Operating Sys- Application software is generally written for use on a spetems. Springer. pp. 4–7. ISBN 0-387-95113-X. cific operating system, and sometimes even for specific hardware. When porting the application to run on another [8] Lavington 1980, pp. 50–52 OS, the functionality required by that application may be [9] Brinch Hansen 2000 implemented differently by that OS (the names of functions, meaning of arguments, etc.) requiring the applica- [10] Ritchie, Dennis. “Unix Manual, first edition”. Lucent tion to be adapted, changed, or otherwise maintained. Technologies. Retrieved 22 November 2012. Unix was the first operating system not written in assem- [11] “Apple introduces mac OS X Maverick’s at WWDC”. bly language, making it very portable to systems different YouTube. TechandPlayTV. 10 June 2013. Retrieved 17 from its native PDP-11.[34] November 2013. This cost in supporting operating systems diversity can be [12] “OS X Mountain Lion – Move your Mac even further avoided by instead writing applications against software ahead”. Apple. Retrieved 2012-08-07. platforms like Java or Qt. These abstractions have already borne the cost of adaptation to specific operating systems [13] “Top 5 Operating Systems from January to April 2011”. StatCounter. October 2009. Retrieved 5 November 2009. and their system libraries. Another approach is for operating system vendors to adopt standards. For example, POSIX and OS abstraction layers provide commonalities that reduce porting costs. 1.1.8 Market share Main article: Usage share of operating systems Source: Gartner [14] “IDC report into Server market share”. Idc.com. Retrieved 2012-08-07. [15] “Linux still top embedded OS”. Archived from the original on 2012-05-29. [16] Jermoluk, Tom (2012-08-03). “TOP500 List – November 2010 (1–100) | TOP500 Supercomputing Sites”. Top500.org. Retrieved 2012-08-07. [17] “Chromium OS”. Chromium.org. [18] “Chromium OS FAQ”. The Chromium Projects. Retrieved 28 February 2014. In 2014, Android was first (currently not replicated by others, in a single year) operating system ever to ship on [19] “Global Web Stats”. Net Market Share, Net Applications. May 2011. Retrieved 2011-05-07. a billion devices, becoming the most popular operating system by installed base. [20] “Global Web Stats”. W3Counter, Awio Web Services. September 2009. Retrieved 2009-10-24. 1.1.9 1.1.10 See also References [1] Stallings (2005). Operating Systems, Internals and Design Principles. Pearson: Prentice Hall. p. 6. [2] Dhotre, I.A. (2009). Operating Systems. Technical Publications. p. 1. [3] “Operating System Market Share”. Net Applications. [4] Lorch, Jacob R., and Alan Jay Smith. “Reducing processor power consumption by improving processor time management in a single-user operating system.” Proceedings of the 2nd annual international conference on Mobile computing and networking. ACM, 1996. [5] Mishra, Balmukund, Ninni Singh, and Ravideep Singh. “Master-slave group based model for co-ordinator selection, an improvement of bully algorithm.” Parallel, Distributed and Grid Computing (PDGC), 2014 International Conference on. IEEE, 2014. [21] “Operating System Market Share”. Net Applications. October 2009. Retrieved 5 November 2009. [22] “w3schools.com OS Platform Statistics”. Retrieved 30 October 2011. [23] “Stats Count Global Stats Top Five Operating Systems”. Retrieved 30 October 2011. [24] “Global statistics at w3counter.com”. Retrieved 23 January 2012. [25] “Troubleshooting MS-DOS Compatibility Mode on Hard Disks”. Support.microsoft.com. Retrieved 2012-08-07. [26] “Using NDIS 2 PCMCIA Network Card Drivers in Windows 95”. Support.microsoft.com. Retrieved 2012-0807. [27] “INFO: Windows 95 Multimedia Wave Device Drivers Must be 16 bit”. Support.microsoft.com. Retrieved 201208-07. [28] Arthur, Charles. “Windows 8 will run on ARM chips but third-party apps will need rewrite”. The Guardian. 1.1. OPERATING SYSTEM [29] “Operating System Share by Groups for Sites in All Locations January 2009”. [30] “Behind the IDC data: Windows still No. 1 in server operating systems”. ZDNet. 2010-02-26. [31] Stallings, William (2008). Computer Organization & Architecture. New Delhi: Prentice-Hall of India Private Limited. p. 267. ISBN 978-81-203-2962-1. [32] Poisson, Ken. “Chronology of Personal Computer Software”. Retrieved on 2008-05-07. Last checked on 200903-30. [33] “My OS is less hobby than yours”. Osnews. 21 December 2009. Retrieved 21 December 2009. [34] “The History of Unix”. BYTE. August 1983. p. 188. Retrieved 31 January 2015. [35] Lance Whitney (7 January 2014). “Android device shipments to top 1 billion this year -- Gartner”. 1.1.11 Further reading • Auslander, Marc A.; Larkin, David C.; Scherr, Allan L. (1981). “The evolution of the MVS Operating System” (PDF). IBM J. Research & Development. • Deitel, Harvey M.; Deitel, Paul; Choffnes, David. Operating Systems. Pearson/Prentice Hall. ISBN 978-0-13-092641-8. • Bic, Lubomur F.; Shaw, Alan C. (2003). Operating Systems. Pearson: Prentice Hall. • Silberschatz, Avi; Galvin, Peter; Gagne, Greg (2008). Operating Systems Concepts. John Wiley & Sons. ISBN 0-470-12872-0. • O'Brien, J.A., & Marakas, G.M.(2011). Management Information Systems. 10e. McGraw-Hill Irwin • Leva, Alberto; Maggio, Martina; Papadopoulos, Alessandro Vittorio; Terraneo, Federico (2013). Control-based Operating System Design. IET. ISBN 978-1-84919-609-3. 1.1.12 External links • Operating Systems at DMOZ • Multics History and the history of operating systems 15 Chapter 2 Operating System Functions 2.1 Input/output to exploit locality and perform efficiently when exchanging data with a secondary storage device, such as a disk drive. “I/O” redirects here. For other uses, see I/O (disambiguation). For uses of the term input-output in economics, see 2.1.1 Interface Input-output model. An I/O interface is required whenever the I/O device is In computing, input/output or I/O (or, informally, io driven by the processor. The interface must have necor IO) is the communication between an information essary logic to interpret the device address generated by processing system, such as a computer, and the outside the processor. Handshaking should be implemented by world, possibly a human or another information process- the interface using appropriate commands (like BUSY, ing system. Inputs are the signals or data received by the READY, and WAIT), and the processor can communisystem and outputs are the signals or data sent from it. cate with an I/O device through the interface. If different The term can also be used as part of an action; to “per- data formats are being exchanged, the interface must be form I/O” is to perform an input or output operation. I/O able to convert serial data to parallel form and vice versa. devices are used by a human (or other system) to com- There must be provision for generating interrupts and the municate with a computer. For instance, a keyboard or corresponding type numbers for further processing by the mouse is an input device for a computer, while monitors processor if required. and printers are output devices. Devices for communi- A computer that uses memory-mapped I/O accesses cation between computers, such as modems and network hardware by reading and writing to specific memory locacards, typically perform both input and output operations. tions, using the same assembly language instructions that Note that the designation of a device as either input or computer would normally use to access memory. output depends on perspective. Mice and keyboards take physical movements that the human user outputs and convert them into input signals that a computer can understand; the output from these devices is the computer’s input. Similarly, printers and monitors take signals that a computer outputs as input, and they convert these signals into a representation that human users can understand. From the human user’s perspective, the process of reading or seeing these representations is receiving input; this type of interaction between computers and humans is studied in the field of human–computer interaction. Higher-level implementation Higher-level operating system and programming facilities employ separate, more abstract I/O concepts and primitives. For example, most operating systems provide application programs with the concept of files. The C and C++ programming languages, and operating systems in the Unix family, traditionally abstract files and devices as streams, which can be read or written, or sometimes both. The C standard library provides functions for maIn computer architecture, the combination of the CPU nipulating streams for input and output. and main memory, to which the CPU can read or write directly using individual instructions, is considered the In the context of the ALGOL 68 programming language, brain of a computer. Any transfer of information to or the input and output facilities are collectively referred to from the CPU/memory combo, for example by reading as transput. The ALGOL 68 transput library recognizes data from a disk drive, is considered I/O. The CPU and the following standard files/devices: stand in, stand out, its supporting circuitry may provide memory-mapped I/O stand errors and stand back. that is used in low-level computer programming, such as An alternative to special primitive functions is the I/O in the implementation of device drivers, or may provide monad, which permits programs to just describe I/O, and access to I/O channels. An I/O algorithm is one designed the actions are carried out outside the program. This is 16 2.2. FILE SYSTEM 17 notable because the I/O functions would introduce side- a magnetic film. The film has ones and zeros 'written' on it effects to any programming language, but this allows sending electrical pulses to a magnetic “read-write” head. purely functional programming to be practical. Other media that are used are magnetic tape, optical disc, and flash memory. In some cases, such as with tmpfs, the computer’s main memory (RAM) is used to create a tem2.1.2 Channel I/O porary file system for short-term use. Some file systems are used on local data storage devices;[1] others provide file access via a network protocol (for example, NFS,[2] SMB, or 9P clients). Some file systems are “virtual”, in that the “files” supplied are computed on request (e.g. procfs) or are merely a mapping into a different file system used as a backing store. The file system manages access to both the content of files and the metadata about those files. It is responsible for arranging storage space; reliability, efficiency, and tuning with 2.1.3 Port-mapped I/O regard to the physical storage medium are important dePort-mapped I/O also requires the use of special I/O in- sign considerations. structions. Typically one or more ports are assigned to the device, each with a special purpose. The port numbers are in a separate address space from that used by 2.2.1 Aspects of file systems normal instructions. Space management Channel I/O requires the use of instructions that are specifically designed to perform I/O operations. The I/O instructions address the channel or the channel and device; the channel asynchronously accesses all other required addressing and control information. This is similar to DMA, but more flexible. 2.1.4 See also • BASIC § Input and output Note: this only applies to file systems used in storage devices. • C file input/output 2.2 File system This article is about the way computers store files on disk. For library and office filing systems, see Library Example of slack space, demonstrated with 4,096-byte NTFS classification. In computing, a file system (or filesystem) is used to control how data is stored and retrieved. Without a file system, information placed in a storage area would be one large body of data with no way to tell where one piece of information stops and the next begins. By separating the data into individual pieces, and giving each piece a name, the information is easily separated and identified. Taking its name from the way paper-based information systems are named, each group of data is called a "file". The structure and logic rules used to manage the groups of information and their names is called a “file system”. There are many different kinds of file systems. Each one has different structure and logic, properties of speed, flexibility, security, size and more. Some file systems have been designed to be used for specific applications. For example, the ISO 9660 file system is designed specifically for optical discs. File systems can be used on many different kinds of storage devices. Each storage device uses a different kind of media. The most common storage device in use today is a hard drive whose media is a disc that has been coated with clusters: 100,000 files, each 5 bytes per file, equals 500,000 bytes of actual data, but requires 409,600,000 bytes of disk space to store File systems allocate space in a granular manner, usually multiple physical units on the device. The file system is responsible for organizing files and directories, and keeping track of which areas of the media belong to which file and which are not being used. For example, in Apple DOS of the early 1980s, 256-byte sectors on 140 kilobyte floppy disk used a track/sector map. This results in unused space when a file is not an exact multiple of the allocation unit, sometimes referred to as slack space. For a 512-byte allocation, the average unused space is 256 bytes. For 64 KB clusters, the average unused space is 32 KB. The size of the allocation unit is chosen when the file system is created. Choosing the allocation size based on the average size of the files expected to be in the file system can minimize the amount of unusable space. Frequently the default allocation may provide reasonable usage. Choosing an allocation size that is too small results in excessive overhead if the file system will contain mostly very large files. 18 File system fragmentation occurs when unused space or single files are not contiguous. As a file system is used, files are created, modified and deleted. When a file is created the file system allocates space for the data. Some file systems permit or require specifying an initial space allocation and subsequent incremental allocations as the file grows. As files are deleted the space they were allocated eventually is considered available for use by other files. This creates alternating used and unused areas of various sizes. This is free space fragmentation. When a file is created and there is not an area of contiguous space available for its initial allocation the space must be assigned in fragments. When a file is modified such that it becomes larger it may exceed the space initially allocated to it, another allocation must be assigned elsewhere and the file becomes fragmented. Filenames Main article: Filename A filename (or file name) is used to identify a storage location in the file system. Most file systems have restrictions on the length of filenames. In some file systems, filenames are not case sensitive (i.e., filenames such as FOO and foo refer to the same file); in others, filenames are case sensitive (i.e., the names FOO, Foo and foo refer to three separate files). CHAPTER 2. OPERATING SYSTEM FUNCTIONS file system in OpenVMS. Metadata Other bookkeeping information is typically associated with each file within a file system. The length of the data contained in a file may be stored as the number of blocks allocated for the file or as a byte count. The time that the file was last modified may be stored as the file’s timestamp. File systems might store the file creation time, the time it was last accessed, the time the file’s metadata was changed, or the time the file was last backed up. Other information can include the file’s device type (e.g. block, character, socket, subdirectory, etc.), its owner user ID and group ID, its access permissions and other file attributes (e.g. whether the file is read-only, executable, etc.). A file system stores all the metadata associated with the file—including the file name, the length of the contents of a file, and the location of the file in the folder hierarchy— separate from the contents of the file. Most file systems store the names of all the files in one directory in one place—the directory table for that directory—which is often stored like any other file. Many Most modern file systems allow filenames to contain a file systems put only some of the metadata for a file in the wide range of characters from the Unicode character directory table, and the rest of the metadata for that file set. However, they may have restrictions on the use of in a completely separate structure, such as the inode. certain special characters, disallowing them within filenames; those characters might be used to indicate a de- Most file systems also store metadata not associated vice, device type, directory prefix, file path separator, or with any one particular file. Such metadata includes information about unused regions—free space bitmap, file type. block availability map—and information about bad sectors. Often such information about an allocation group is Directories stored inside the allocation group itself. Additional attributes can be associated on file systems, such as NTFS, XFS, ext2, ext3, some versions of UFS, and HFS+, using extended file attributes. Some file sysFile systems typically have directories (also called fold- tems provide for user defined attributes such as the author ers) which allow the user to group files into separate col- of the document, the character encoding of a document lections. This may be implemented by associating the file or the size of an image. name with an index in a table of contents or an inode in a Unix-like file system. Directory structures may be flat Some file systems allow for different data collections to (i.e. linear), or allow hierarchies where directories may be associated with one file name. These separate colcontain subdirectories. The first file system to support ar- lections may be referred to as streams or forks. Apple bitrary hierarchies of directories was used in the Multics has long used a forked file system on the Macintosh, and operating system.[3] The native file systems of Unix-like Microsoft supports streams in NTFS. Some file systems systems also support arbitrary directory hierarchies, as maintain multiple past revisions of a file under a single do, for example, Apple's Hierarchical File System, and file name; the filename by itself retrieves the most reits successor HFS+ in classic Mac OS (HFS+ is still used cent version, while prior saved version can be accessed in Mac OS X), the FAT file system in MS-DOS 2.0 and using a special naming convention such as “filename;4” later and Microsoft Windows, the NTFS file system in the or “filename(−4)" to access the version four saves ago. Windows NT family of operating systems, and the ODS- See comparison of file systems#Metadata for details on 2 (On-Disk Structure-2) and higher levels of the Files-11 which file systems support which kinds of metadata. Main article: Directory (file systems) 2.2. FILE SYSTEM File system as an abstract user interface 19 Restricting and permitting access See also: Computer security, Password cracking, In some cases, a file system may not make use of a storage Filesystem-level encryption and Encrypting File System device but can be used to organize and represent access to any data, whether it is stored or dynamically generated There are several mechanisms used by file systems to con(e.g. procfs). trol access to data. Usually the intent is to prevent reading or modifying files by a user or group of users. Another reason is to ensure data is modified in a controlled way so access may be restricted to a specific program. Examples include passwords stored in the metadata of the file Utilities or elsewhere and file permissions in the form of permission bits, access control lists, or capabilities. The need for file system utilities to be able to access the data at the The difference between a utility and a built-in core commedia level to reorganize the structures and provide effimand function is arbitrary, depending on the design of the cient backup usually means that these are only effective operating system, and on the memory and space limitafor polite users but are not effective against intruders. tions of the hardware. For example, Microsoft MS-DOS uses a utility for formatting and a built-in command for Methods for encrypting file data are sometimes included simple file copying, while in the Apple DOS formatting is in the file system. This is very effective since there is no a built-in command and simple file copying is performed need for file system utilities to know the encryption seed to effectively manage the data. The risks of relying on by using a utility. encryption include the fact that an attacker can copy the File systems include utilities to initialize, alter paramedata and use brute force to decrypt the data. Losing the ters of and remove an instance of the file system. Some seed means losing the data. include the ability to extend or truncate the space allocated to the file system. Directory utilities may be used to create, rename and delete directory entries, which are also known as dentries (singular: dentry),[4] and to alter metadata associated with a directory. Directory utilities may also include capabilities to create additional links to a directory (hard links in Unix), to rename parent links ("..” in Unix-like operating systems), and to create bidirectional links to files. Maintaining integrity One significant responsibility of a file system is to ensure that, regardless of the actions by programs accessing the data, the structure remains consistent. This includes actions taken if a program modifying data terminates abnormally or neglects to inform the file system that it has completed its activities. This may include updating the metadata, the directory entry and handling any data that was buffered but not yet updated on the physical storage media. File utilities create, list, copy, move and delete files, and alter metadata. They may be able to truncate data, truncate or extend space allocation, append to, move, and modify files in-place. Depending on the underlying structure of the file system, they may provide a mechanism to Other failures which the file system must deal with include prepend to, or truncate from, the beginning of a file, in- media failures or loss of connection to remote systems. sert entries into the middle of a file or delete entries from In the event of an operating system failure or “soft” power a file. failure, special routines in the file system must be invoked Utilities to free space for deleted files, if the file system similar to when an individual program fails. provides an undelete function, also belong to this cateThe file system must also be able to correct damaged gory. structures. These may occur as a result of an operating Some file systems defer operations such as reorganization of free space, secure erasing of free space, and rebuilding of hierarchical structures by providing utilities to perform these functions at times of minimal activity. An example is the file system defragmentation utilities, such as the Disk Defragmenter utility on Microsoft Windows. Some of the most important features of file system utilities involve supervisory activities which may involve bypassing ownership or direct access to the underlying device. These include high-performance backup and recovery, data replication and reorganization of various data structures and allocation tables within the file system. system failure for which the OS was unable to notify the file system, power failure or reset. The file system must also record events to allow analysis of systemic issues as well as problems with specific files or directories. User data The most important purpose of a file system is to manage user data. This includes storing, retrieving and updating data. 20 Some file systems accept data for storage as a stream of bytes which are collected and stored in a manner efficient for the media. When a program retrieves the data, it specifies the size of a memory buffer and the file system transfers data from the media to the buffer. A runtime library routine may sometimes allow the user program to define a record based on a library call specifying a length. When the user program reads the data, the library retrieves data via the file system and returns a record. Some file systems allow the specification of a fixed record length which is used for all write and reads. This facilitates updating records. An identification for each record, also known as a key, makes for a more sophisticated file system. The user program can read, write and update records without regard to their location. This requires complicated management of blocks of media usually separating key blocks and data blocks. Very efficient algorithms can be developed with pyramid structure for locating records. CHAPTER 2. OPERATING SYSTEM FUNCTIONS ditional benefit that in the event of a corruption of a single partition, the remaining file systems will frequently still be intact. This includes virus destruction of the system partition or even a system that will not boot. File system utilities which require dedicated access can be effectively completed piecemeal. In addition, defragmentation may be more effective. Several system maintenance utilities, such as virus scans and backups, can also be processed in segments. For example, it is not necessary to backup the file system containing videos along with all the other files if none have been added since the last backup. As for the image files, one can easily “spin off” differential images which contain only “new” data written to the master (original) image. Differential images can be used for both safety concerns (as a “disposable” system - can be quickly restored if destroyed or contaminated by a virus, as the old image can be removed and a new image can be created in matter of seconds, even without automated procedures) and quick virtual machine deployment (since the differential images can be quickly spawned using a script in batches). Using a file system Design limitations Utilities, language specific run-time libraries and user programs use file system APIs to make requests of the file system. These include data transfer, positioning, updating metadata, managing directories, managing access specifications, and removal. All file systems have some functional limit that defines the maximum storable data capacity within that system. These functional limits are a best-guess effort by the designer based on how large the storage systems are right now and how large storage systems are likely to become in the future. Disk storage has continued to increase at Multiple file systems within a single system near exponential rates (see Moore’s law), so after a few years, file systems have kept reaching design limitations Frequently, retail systems are configured with a single file that require computer users to repeatedly move to a newer system occupying the entire storage device. system with ever-greater capacity. Another approach is to partition the disk so that several File system complexity typically varies proportionally file systems with different attributes can be used. One with the available storage capacity. The file systems of file system, for use as browser cache, might be config- early 1980s home computers with 50 KB to 512 KB ured with a small allocation size. This has the additional of storage would not be a reasonable choice for modern advantage of keeping the frantic activity of creating and storage systems with hundreds of gigabytes of capacity. deleting files typical of browser activity in a narrow area Likewise, modern file systems would not be a reasonable of the disk and not interfering with allocations of other choice for these early systems, since the complexity of files. A similar partition might be created for email. An- modern file system structures would quickly consume or other partition, and file system might be created for the even exceed the very limited capacity of the early storage storage of audio or video files with a relatively large al- systems. location. One of the file systems may normally be set read-only and only periodically be set writable. A third approach, which is mostly used in cloud systems, is to use “disk images” to house additional file systems, with the same attributes or not, within another (host) file system as a file. A common example is virtualization: one user can run an experimental Linux distribution (using the ext4 file system) in a virtual machine under his/her production Windows environment (using NTFS). The ext4 file system resides in a disk image, which is treated as a file (or multiple files, depending on the hypervisor and settings) in the NTFS host file system. 2.2.2 Types of file systems File system types can be classified into disk/tape file systems, network file systems and special-purpose file systems. Disk file systems A disk file system takes advantages of the ability of disk storage media to randomly address data in a short amount Having multiple file systems on a single system has the ad- of time. Additional considerations include the speed of 2.2. FILE SYSTEM accessing data following that initially requested and the anticipation that the following data may also be requested. This permits multiple users (or processes) access to various data on the disk without regard to the sequential location of the data. Examples include FAT (FAT12, FAT16, FAT32), exFAT, NTFS, HFS and HFS+, HPFS, UFS, ext2, ext3, ext4, XFS, btrfs, ISO 9660, Files-11, Veritas File System, VMFS, ZFS, ReiserFS and UDF. Some disk file systems are journaling file systems or versioning file systems. 21 Tape file systems instead typically allow for the file directory to be spread across the tape intermixed with the data, referred to as streaming, so that time-consuming and repeated tape motions are not required to write new data. However, a side effect of this design is that reading the file directory of a tape usually requires scanning the entire tape to read all the scattered directory entries. Most data archiving software that works with tape storage will store a local copy of the tape catalog on a disk file system, so that adding files to a tape can be done quickly without having to rescan the tape media. The local tape catalog Optical discs ISO 9660 and Universal Disk Format copy is usually discarded if not used for a specified period (UDF) are two common formats that target Compact of time, at which point the tape must be re-scanned if it Discs, DVDs and Blu-ray discs. Mount Rainier is an ex- is to be used in the future. tension to UDF supported since 2.6 series of the Linux IBM has developed a file system for tape called the Linear kernel and since Windows Vista that facilitates rewriting Tape File System. The IBM implementation of this file to DVDs. system has been released as the open-source IBM Linear Tape File System — Single Drive Edition (LTFSSDE) product. The Linear Tape File System uses a sepFlash file systems arate partition on the tape to record the index meta-data, thereby avoiding the problems associated with scattering Main article: Flash file system directory entries across the entire tape. A flash file system considers the special abilities, performance and restrictions of flash memory devices. Frequently a disk file system can use a flash memory device as the underlying storage media but it is much better to use a file system specifically designed for a flash device. Tape file systems A tape file system is a file system and tape format designed to store files on tape in a self-describing form. Magnetic tapes are sequential storage media with significantly longer random data access times than disks, posing challenges to the creation and efficient management of a general-purpose file system. Tape formatting Writing data to a tape is often a significantly time-consuming process that may take several hours. Similarly, completely erasing or formatting a tape can also take several hours. With many data tape technologies it is not necessary to format the tape before overwriting new data to the tape. This is due to the inherently destructive nature of overwriting data on sequential media. Because of the time it can take to format a tape, typically tapes are pre-formatted so that the tape user does not need to spend time preparing each new tape for use. All that is usually necessary is to write an identifying media label to the tape before use, and even this can be automatically written by software when a new tape is used for the first In a disk file system there is typically a master file directime. tory, and a map of used and free data regions. Any file additions, changes, or removals require updating the directory and the used/free maps. Random access to data Database file systems regions is measured in milliseconds so this system works well for disks. Another concept for file management is the idea of a Tape requires linear motion to wind and unwind potentially very long reels of media. This tape motion may take several seconds to several minutes to move the read/write head from one end of the tape to the other. database-based file system. Instead of, or in addition to, hierarchical structured management, files are identified by their characteristics, like type of file, topic, author, or similar rich metadata.[5] Consequently, a master file directory and usage map can be extremely slow and inefficient with tape. Writing typically involves reading the block usage map to find free blocks for writing, updating the usage map and directory to add the data, and then advancing the tape to write the data in the correct spot. Each additional file write requires updating the map and directory and writing the data, which may take several seconds to occur for each file. IBM DB2 for i [6] (formerly known as DB2/400 and DB2 for i5/OS) is a database file system as part of the object based IBM i [7] operating system (formerly known as OS/400 and i5/OS), incorporating a single level store and running on IBM Power Systems (formerly known as AS/400 and iSeries), designed by Frank G. Soltis IBM’s former chief scientist for IBM i. Around 1978 to 1988 Frank G. Soltis and his team at IBM Rochester have successfully designed and applied technologies like the 22 CHAPTER 2. OPERATING SYSTEM FUNCTIONS database file system where others like Microsoft later failed to accomplish.[8] These technologies are informally known as 'Fortress Rochester' and were in few basic aspects extended from early Mainframe technologies but in many ways more advanced from a technological perspective. Ensuring consistency across multiple file system operations is difficult, if not impossible, without file system transactions. File locking can be used as a concurrency control mechanism for individual files, but it typically does not protect the directory structure or file metadata. For instance, file locking cannot prevent TOCTTOU race Some other projects that aren't “pure” database file sys- conditions on symbolic links. File locking also cannot autems but that use some aspects of a database file system: tomatically roll back a failed operation, such as a software upgrade; this requires atomicity. • Many Web content management systems use a relational DBMS to store and retrieve files. For example, XHTML files are stored as XML or text fields, while image files are stored as blob fields; SQL SELECT (with optional XPath) statements retrieve the files, and allow the use of a sophisticated logic and more rich information associations than “usual file systems”. Many CMSs also have the option of storing only metadata within the database, with the standard filesystem used to store the content of files. Journaling file systems are one technique used to introduce transaction-level consistency to file system structures. Journal transactions are not exposed to programs as part of the OS API; they are only used internally to ensure consistency at the granularity of a single system call. Transaction processing introduces the isolation guarantee, which states that operations within a transaction are hidden from other threads on the system until the transaction commits, and that interfering operations on the system will be properly serialized with the transaction. Transactions also provide the atomicity guarantee, ensuring that operations inside of a transaction are either all committed or the transaction can be aborted and the system discards all of its partial results. This means that if there is a crash or power failure, after recovery, the stored state will be consistent. Either the software will be completely installed or the failed installation will be completely rolled back, but an unusable partial install will not be left on the system. A network file system is a file system that acts as a client for a remote file access protocol, providing access to files on a server. Programs using local interfaces can transparently create, manage and access hierarchical directories and files in remote network-connected computers. Examples of network file systems include clients for the NFS, AFS, SMB protocols, and file-system-like clients for FTP and WebDAV. Data backup systems typically do not provide support for direct backup of data stored in a transactional manner, which makes recovery of reliable and consistent data sets difficult. Most backup software simply notes what files have changed since a certain time, regardless of the transactional state shared across multiple files in the overall • Very large file systems, embodied by applications dataset. As a workaround, some database systems simlike Apache Hadoop and Google File System, use ply produce an archived state file containing all data up some database file system concepts. to that point, and the backup software only backs that up and does not interact directly with the active transactional databases at all. Recovery requires separate recreation of Transactional file systems the database from the state file, after the file has been restored by the backup software. Some programs need to update multiple files “all at once”. For example, a software installation may write program binaries, libraries, and configuration files. If the software installation fails, the program may be unusable. If the Network file systems installation is upgrading a key system utility, such as the command shell, the entire system may be left in an unus- Main article: Distributed file system able state. Windows, beginning with Vista, added transaction support to NTFS, in a feature called Transactional NTFS, but its use is now discouraged.[9] There are a number of research prototypes of transactional file systems for UNIX systems, including the Valor file system,[10] Amino,[11] LFS,[12] and a transactional ext3 file system on the TxOS kernel,[13] as well as transactional file systems targeting embedded systems, such as TFFS.[14] Shared disk file systems Main article: Shared disk file system A shared disk file system is one in which a number of machines (usually servers) all have access to the same external disk subsystem (usually a SAN). The file system arbitrates access to that subsystem, preventing write collisions. Examples include GFS2 from Red Hat, GPFS from IBM, SFS from DataPlow, CXFS from SGI and StorNext from Quantum Corporation. 2.2. FILE SYSTEM Special file systems 23 next data region. Some implementations even included audible sounds interspersed with the data. A special file system presents non-file elements of an operating system as files so they can be acted on using file system APIs. This is most commonly done in Unix-like operating systems, but devices are given file names in some Flat file systems non-Unix-like operating systems as well. In a flat file system, there are no subdirectories. Device file systems A device file system represents I/O devices and pseudo-devices as files, called device files. Examples in Unix-like systems include devfs and, in Linux 2.6 systems, udev. In non-Unix-like systems, such as TOPS-10 and other operating systems influenced by it, where the full filename or pathname of a file can include a device prefix, devices other than those containing file systems are referred to by a device prefix specifying the device, without anything following it. When floppy disk media was first available this type of file system was adequate due to the relatively small amount of data space available. CP/M machines featured a flat file system, where files could be assigned to one of 16 user areas and generic file operations narrowed to work on one instead of defaulting to work on all of them. These user areas were no more than special attributes associated with the files, that is, it was not necessary to define specific quota for each of these areas and files could be added to groups for as long as there was still free storage space on the disk. The early Apple Macintosh also featured a flat Other special file systems file system, the Macintosh File System. It was unusual in that the file management program (Macintosh Finder) • In the Linux kernel, configfs and sysfs provide files created the illusion of a partially hierarchical filing system that can be used to query the kernel for information on top of EMFS. This structure required every file to have and configure entities in the kernel. a unique name, even if it appeared to be in a separate folder. • procfs maps processes and, on Linux, other operatWhile simple, flat file systems become awkward as the ing system structures into a filespace. number of files grows and makes it difficult to organize data into related groups of files. Minimal file system / audio-cassette storage A recent addition to the flat file system family is Amazon's S3, a remote storage service, which is intentionally simThe late 1970s saw the development of the plistic to allow users the ability to customize how their microcomputer. Disk and digital tape devices were data is stored. The only constructs are buckets (imagine too expensive for hobbyists. An inexpensive basic data a disk drive of unlimited size) and objects (similar, but storage system was devised that used common audio not identical to the standard concept of a file). Advanced cassette tape. file management is allowed by being able to use nearly When the system needed to write data, the user was any character (including '/') in the object’s name, and the notified to press “RECORD” on the cassette recorder, ability to select subsets of the bucket’s content based on then press “RETURN” on the keyboard to notify the identical prefixes. system that the cassette recorder was recording. The system wrote a sound to provide time synchronization, then modulated sounds that encoded a prefix, the data, a checksum and a suffix. When the system needed to read 2.2.3 File systems and operating systems data, the user was instructed to press “PLAY” on the cassette recorder. The system would listen to the sounds on the tape waiting until a burst of sound could be recognized Many operating systems include support for more than as the synchronization. The system would then interpret one file system. Sometimes the OS and the file system subsequent sounds as data. When the data read was com- are so tightly interwoven it is difficult to separate out file plete, the system would notify the user to press “STOP” system functions. on the cassette recorder. It was primitive, but it worked There needs to be an interface provided by the operat(a lot of the time). Data was stored sequentially, usually ing system software between the user and the file sysin an unnamed format, although some systems (such as tem. This interface can be textual (such as provided the Commodore PET series of computers) did allow the by a command line interface, such as the Unix shell, or files to be named. Multiple sets of data could be written OpenVMS DCL) or graphical (such as provided by a and located by fast-forwarding the tape and observing at graphical user interface, such as file browsers). If graphthe tape counter to find the approximate start of the next ical, the metaphor of the folder, containing documents, data region on the tape. The user might have to listen other files, and nested folders is often used (see also: to the sounds to find the right spot to begin playing the directory and folder). 24 Unix and Unix-like operating systems Unix-like operating systems create a virtual file system, which makes all the files on all the devices appear to exist in a single hierarchy. This means, in those systems, there is one root directory, and every file existing on the system is located under it somewhere. Unix-like systems can use a RAM disk or network shared resource as its root directory. Unix-like systems assign a device name to each device, but this is not how the files on that device are accessed. Instead, to gain access to files on another device, the operating system must first be informed where in the directory tree those files should appear. This process is called mounting a file system. For example, to access the files on a CD-ROM, one must tell the operating system “Take the file system from this CD-ROM and make it appear under such-and-such directory”. The directory given to the operating system is called the mount point – it might, for example, be /media. The /media directory exists on many Unix systems (as specified in the Filesystem Hierarchy Standard) and is intended specifically for use as a mount point for removable media such as CDs, DVDs, USB drives or floppy disks. It may be empty, or it may contain subdirectories for mounting individual devices. Generally, only the administrator (i.e. root user) may authorize the mounting of file systems. CHAPTER 2. OPERATING SYSTEM FUNCTIONS floppy disk that has been supermounted can be physically removed from the system. Under normal circumstances, the disk should have been synchronized and then unmounted before its removal. Provided synchronization has occurred, a different disk can be inserted into the drive. The system automatically notices that the disk has changed and updates the mount point contents to reflect the new medium. • An automounter will automatically mount a file system when a reference is made to the directory atop which it should be mounted. This is usually used for file systems on network servers, rather than relying on events such as the insertion of media, as would be appropriate for removable media. Linux Linux supports many different file systems, but common choices for the system disk on a block device include the ext* family (such as ext2, ext3 and ext4), XFS, JFS, ReiserFS and btrfs. For raw flash without a flash translation layer (FTL) or Memory Technology Device (MTD), there is UBIFS, JFFS2, and YAFFS, among others. SquashFS is a common compressed read-only file system. Solaris The Sun Microsystems Solaris operating sysUnix-like operating systems often include software and tem in earlier releases defaulted to (non-journaled or nontools that assist in the mounting process and provide it logging) UFS for bootable and supplementary file sysnew functionality. Some of these strategies have been tems. Solaris defaulted to, supported, and extended UFS. coined “auto-mounting” as a reflection of their purpose. Support for other file systems and significant enhancements were added over time, including Veritas Software • In many situations, file systems other than the root Corp. (Journaling) VxFS, Sun Microsystems (Clusterneed to be available as soon as the operating system ing) QFS, Sun Microsystems (Journaling) UFS, and Sun has booted. All Unix-like systems therefore pro- Microsystems (open source, poolable, 128 bit compressvide a facility for mounting file systems at boot time. ible, and error-correcting) ZFS. System administrators define these file systems in Kernel extensions were added to Solaris to allow for the configuration file fstab (vfstab in Solaris), which bootable Veritas VxFS operation. Logging or Journaling also indicates options and mount points. was added to UFS in Sun’s Solaris 7. Releases of Solaris 10, Solaris Express, OpenSolaris, and other open source • In some situations, there is no need to mount certain variants of the Solaris operating system later supported file systems at boot time, although their use may be bootable ZFS. desired thereafter. There are some utilities for Unixlike systems that allow the mounting of predefined Logical Volume Management allows for spanning a file system across multiple devices for the purpose of adding file systems upon demand. redundancy, capacity, and/or throughput. Legacy envi• Removable media have become very common with ronments in Solaris may use Solaris Volume Manager microcomputer platforms. They allow programs (formerly known as Solstice DiskSuite). Multiple operand data to be transferred between machines without ating systems (including Solaris) may use Veritas Vola physical connection. Common examples include ume Manager. Modern Solaris based operating systems USB flash drives, CD-ROMs, and DVDs. Utilities eclipse the need for Volume Management through leverhave therefore been developed to detect the pres- aging virtual storage pools in ZFS. ence and availability of a medium and then mount that medium without any user intervention. OS X OS X uses a file system inherited from classic • Progressive Unix-like systems have also introduced Mac OS called HFS Plus. Apple also uses the term “Mac a concept called supermounting; see, for example, OS Extended”.[15][16] HFS Plus is a metadata-rich and the Linux supermount-ng project. For example, a case-preserving but (usually) case-insensitive file system. 2.2. FILE SYSTEM Due to the Unix roots of OS X, Unix permissions were added to HFS Plus. Later versions of HFS Plus added journaling to prevent corruption of the file system structure and introduced a number of optimizations to the allocation algorithms in an attempt to defragment files automatically without requiring an external defragmenter. 25 process to have a different view of the many file systems that provide resources in a distributed system. The Inferno operating system shares these concepts with Plan 9. Filenames can be up to 255 characters. HFS Plus uses Microsoft Windows Unicode to store filenames. On OS X, the filetype can come from the type code, stored in file’s metadata, or the filename extension. HFS Plus has three kinds of links: Unix-style hard links, Unix-style symbolic links and aliases. Aliases are designed to maintain a link to their original file even if they are moved or renamed; they are not interpreted by the file system itself, but by the File Manager code in userland. OS X also supported the UFS file system, derived from the BSD Unix Fast File System via NeXTSTEP. However, as of Mac OS X Leopard, OS X could no longer be Directory listing in a Windows command shell installed on a UFS volume, nor can a pre-Leopard system installed on a UFS volume be upgraded to Leopard.[17] As Windows makes use of the FAT, NTFS, exFAT, Live File of Mac OS X Lion UFS support was completely dropped. System and ReFS file systems (the last of these is only Newer versions of OS X are capable of reading and supported and usable in Windows Server 2012; Windows writing to the legacy FAT file systems (16 & 32) com- cannot boot from it). mon on Windows. They are also capable of reading the newer NTFS file systems for Windows. In order to write to NTFS file systems on OS X versions prior to 10.6 (Snow Leopard) third party software is necessary. Mac OS X 10.6 (Snow Leopard) and later allows writing to NTFS file systems, but only after a non-trivial system setting change (third party software exists that automates this).[18] Windows uses a drive letter abstraction at the user level to distinguish one disk or partition from another. For example, the path C:\WINDOWS represents a directory WINDOWS on the partition represented by the letter C. Drive C: is most commonly used for the primary hard disk drive partition, on which Windows is usually installed and from which it boots. This “tradition” has become so firmly ingrained that bugs exist in many applications which make Finally, OS X supports reading and writing of the exFAT assumptions that the drive that the operating system is file system since Mac OS X Snow Leopard, starting from installed on is C. The use of drive letters, and the tradition of using “C” as the drive letter for the primary hard version 10.6.5.[19] disk drive partition, can be traced to MS-DOS, where the letters A and B were reserved for up to two floppy disk drives. This in turn derived from CP/M in the 1970s, and PC-BSD ultimately from IBM’s CP/CMS of 1967. PC-BSD is a desktop version of FreeBSD, which inherits FreeBSD's ZFS support, similarly to FreeNAS. The new FAT Main article: File Allocation Table graphical installer of PC-BSD can handle / (root) on ZFS and RAID-Z pool installs and disk encryption using Geli right from the start in an easy convenient (GUI) way. The The family of FAT file systems is supported by almost current PC-BSD 9.0+ 'Isotope Edition' has ZFS filesys- all operating systems for personal computers, including all versions of Windows and MS-DOS/PC DOS and DRtem version 5 and ZFS storage pool version 28. DOS. (PC DOS is an OEM version of MS-DOS, MSDOS was originally based on SCP's 86-DOS. DR-DOS Plan 9 was based on Digital Research's Concurrent DOS, a successor of CP/M-86.) The FAT file systems are therefore Plan 9 from Bell Labs treats everything as a file and ac- well-suited as a universal exchange format between comcesses all objects as a file would be accessed (i.e., there is puters and devices of most any type and age. no ioctl or mmap): networking, graphics, debugging, authentication, capabilities, encryption, and other services The FAT file system traces its roots back to an (incomare accessed via I/O operations on file descriptors. The patible) 8-bit FAT precursor in Standalone Disk BASIC 9P protocol removes the difference between local and re- and the short-lived MDOS/MIDAS project. mote files. File systems in Plan 9 are organized with the Over the years, the file system has been expanded from help of private, per-process namespaces, allowing each FAT12 to FAT16 and FAT32. Various features have 26 CHAPTER 2. OPERATING SYSTEM FUNCTIONS been added to the file system including subdirectories, OpenVMS codepage support, extended attributes, and long filenames. Third parties such as Digital Research have in- Main article: Files-11 corporated optional support for deletion tracking, and volume/directory/file-based multi-user security schemes to support file and directory passwords and permissions such as read/write/execute/delete access rights. Most of MVS [IBM Mainframe] these extensions are not supported by Windows. Main article: MVS § MVS filesystem The FAT12 and FAT16 file systems had a limit on the number of entries in the root directory of the file system and had restrictions on the maximum size of FATformatted disks or partitions. AS/400 file system FAT32 addresses the limitations in FAT12 and FAT16, except for the file size limit of close to 4 GB, but it re- Data on the AS/400 and its successors consists of system objects mapped into the system virtual address space in a mains limited compared to NTFS. single-level store. Many types of AS/400 objects are deFAT12, FAT16 and FAT32 also have a limit of eight fined including the directories and files found in other file characters for the file name, and three characters for the systems. File objects, along with other types of objects, extension (such as .exe). This is commonly referred to as form the basis of the As/400’s support for an integrated the 8.3 filename limit. VFAT, an optional extension to relational database. FAT12, FAT16 and FAT32, introduced in Windows 95 and Windows NT 3.5, allowed long file names (LFN) to be stored in the FAT file system in a backwards compat- Other file systems ible fashion. • The Prospero File System is a file system based on the Virtual System Model.[21] The system was created by Dr. B. Clifford Neuman of the InformaNTFS Main article: NTFS tion Sciences Institute at the University of Southern California.[22] NTFS, introduced with the Windows NT operating sys• RSRE FLEX file system - written in ALGOL 68 tem in 1993, allowed ACL-based permission control. Other features also supported by NTFS include hard • The file system of the Michigan Terminal System links, multiple file streams, attribute indexing, quota (MTS) is interesting because: (i) it provides “line tracking, sparse files, encryption, compression, and files” where record lengths and line numbers are asreparse points (directories working as mount-points for sociated as metadata with each record in the file, other file systems, symlinks, junctions, remote storage lines can be added, replaced, updated with the same links). or different length records, and deleted anywhere in the file without the need to read and rewrite the entire file; (ii) using program keys files may be shared exFAT Main article: exFAT or permitted to commands and programs in addition to users and groups; and (iii) there is a comprehensive file locking mechanism that protects both the exFAT is a proprietary and patent-protected file system file’s data and its metadata.[23][24] with certain advantages over NTFS with regard to file system overhead. exFAT is not backward compatible with FAT file systems such as FAT12, FAT16 or FAT32. The file system is supported with newer Windows systems, such as Windows Server 2003, Windows Vista, Windows 2008, Windows 7, Windows 8, and more recently, support has been added for Windows XP.[20] exFAT is supported in OS X starting with version 10.6.5 (Snow Leopard).[19] Support in other operating systems is sparse since Microsoft has not published the specifications of the file system and implementing support for exFAT requires a license. exFAT is the only file system that is fully supported on both OS X and Windows that can hold files bigger than 4 GB. 2.2.4 Limitations Converting the type of a file system It may be advantageous or necessary to have files in a different file system than they currently exist. Reasons include the need for an increase in the space requirements beyond the limits of the current file system. The depth of path may need to be increased beyond the restrictions of the file system. There may be performance or reliability considerations. Providing access to another operating system which does not support existing file system is another reason. 2.2. FILE SYSTEM 27 In-place conversion In some cases conversion can be • Filename extension done in-place, although migrating the file system is more • Global filesystem conservative, as it involves a creating a copy of the data [25] and is recommended. On Windows, FAT and FAT32 • Physical and logical storage file systems can be converted to NTFS via the convert.exe [25] utility, but not the reverse. On Linux, ext2 can be con• Storage efficiency verted to ext3 (and converted back), and ext3 can be converted to ext4 (but not back),[26] and both ext3 and • Virtual file system ext4 can be converted to btrfs, and converted back until the undo information is deleted.[27] These conversions are possible due to using the same format for the file data 2.2.6 References itself, and relocating the metadata into empty space, in some cases using sparse file support.[27] Cited references Migrating to a different file system Migration has the disadvantage of requiring additional space although it may be faster. The best case is if there is unused space on media which will contain the final file system. For example, to migrate a FAT32 file system to an ext2 file system. First create a new ext2 file system, then copy the data to the file system, then delete the FAT32 file system. An alternative, when there is not sufficient space to retain the original file system until the new one is created, is to use a work area (such as a removable media). This takes longer but a backup of the data is a nice side effect. Long file paths and long file names In hierarchical file systems, files are accessed by means of a path that is a branching list of directories containing the file. Different file systems have different limits on the depth of the path. File systems also have a limit on the length of an individual filename. Copying files with long names or located in paths of significant depth from one file system to another may cause undesirable results. This depends on how the utility doing the copying handles the discrepancy. 2.2.5 See also • Comparison of file systems • List of file systems • List of Unix programs • Directory structure • Disk sharing • Distributed file system • Distributed Data Management Architecture • File manager • File system fragmentation [1] Arpaci-Dusseau, Remzi H.; Arpaci-Dusseau, Andrea C. (2014), File System Implementation (PDF), ArpaciDusseau Books [2] Arpaci-Dusseau, Remzi H.; Arpaci-Dusseau, Andrea C. (2014), Sun’s Network File System (PDF), Arpaci-Dusseau Books [3] R. C. Daley; P. G. Neumann (1965). A GeneralPurpose File System For Secondary Storage. Fall Joint Computer Conference. AFIPS. pp. 213–229. doi:10.1145/1463891.1463915. Retrieved 2011-07-30. [4] Mohan, I. Chandra (2013). Operating Systems. Delhi: PHI Learning Pvt. Ltd. p. 166. ISBN 9788120347267. Retrieved 2014-07-27. The word dentry is short for 'directory entry'. A dentry is nothing but a specific component in the path from the root. They (directory name or file name) provide for accessing files or directories[.] [5] “Windows on a database – sliced and diced by BeOS vets”. theregister.co.uk. 2002-03-29. Retrieved 2014-02-07. [6] “IBM DB2 for i: Overview”. 03.ibm.com. Retrieved 2014-02-07. [7] “IBM developerWorks : New to IBM i”. Ibm.com. 201103-08. Retrieved 2014-02-07. [8] “XP successor Longhorn goes SQL, P2P – Microsoft leaks”. theregister.co.uk. 2002-01-28. Retrieved 201402-07. [9] “Alternatives to using Transactional NTFS (Windows)". Msdn.microsoft.com. 2013-12-05. Retrieved 2014-0207. [10] Spillane, Richard; Gaikwad, Sachin; Chinni, Manjunath; Zadok, Erez and Wright, Charles P.; 2009; “Enabling transactional file access via lightweight kernel extensions”; Seventh USENIX Conference on File and Storage Technologies (FAST 2009) [11] Wright, Charles P.; Spillane, Richard; Sivathanu, Gopalan; Zadok, Erez; 2007; “Extending ACID Semantics to the File System; ACM Transactions on Storage [12] Selzter, Margo I.; 1993; “Transaction Support in a LogStructured File System”; Proceedings of the Ninth International Conference on Data Engineering 28 [13] Porter, Donald E.; Hofmann, Owen S.; Rossbach, Christopher J.; Benn, Alexander and Witchel, Emmett; 2009; “Operating System Transactions”; In the Proceedings of the 22nd ACM Symposium on Operating Systems Principles (SOSP '09), Big Sky, MT, October 2009. [14] Gal, Eran; Toledo, Sivan; “A Transactional Flash File System for Microcontrollers” [15] “OS X Mountain Lion: What is a Mac OS Extended (Journaled) volume?". Apple. August 8, 2013. Retrieved February 7, 2014. [16] “Mac OS X: About file system journaling”. Apple. Retrieved 8 February 2014. [17] Mac OS X 10.5 Leopard: Installing on a UFS-formatted volume [18] OSXDaily. “How to Enable NTFS Write Support in Mac OS X”. Retrieved 6 February 2014. [19] Steve Bunting (2012-08-14). EnCase Computer Forensics - The Official EnCE: EnCase Certified Examiner. Books.google.com. Retrieved 2014-02-07. [20] Microsoft WinXP exFat patch CHAPTER 2. OPERATING SYSTEM FUNCTIONS • “Attribute - $STANDARD_INFORMATION (0x10)". NTFS Information, Linux-NTFS Project. Retrieved February 21, 2005. • Apple Computer Inc. “Technical Note TN1150: HFS Plus Volume Format”. Detailed HFS Plus and HFSX description. Retrieved September 22, 2015. • File System Forensic Analysis, Brian Carrier, Addison Wesley, 2005. 2.2.7 Further reading Books • Arpaci-Dusseau, Remzi H.; Arpaci-Dusseau, Andrea C. (2014). Operating Systems: Three Easy Pieces. Arpaci-Dusseau Books. • Carrier, Brian (2005). File System Forensic Analysis. Addison-Wesley. ISBN 0-321-26817-2. • Custer, Helen (1994). Inside the Windows NT File System. Microsoft Press. ISBN 1-55615-660-X. [22] cs.ucsb.edu • Giampaolo, Dominic (1999). Practical File System Design with the Be File System (PDF). Morgan Kaufmann Publishers. ISBN 1-55860-497-9. Retrieved 2010-01-22. [23] “A file system for a general-purpose time-sharing environment”, G. C. Pirkola, Proceedings of the IEEE, June 1975, volume 63 no. 6, pp. 918–924, ISSN 0018-9219 • McCoy, Kirby (1990). VMS File System Internals. VAX - VMS Series. Digital Press. ISBN 1-55558056-4. [21] The Prospero File System: A Global File System Based on the Virtual System Model [24] “The Protection of Information in a General Purpose Time-Sharing Environment”, Gary C. Pirkola and John Sanguinetti, Proceedings of the IEEE Symposium on Trends and Applications 1977: Computer Security and Integrity, vol. 10 no. 4, , pp. 106-114 [25] How to Convert FAT Disks to NTFS, Microsoft, October 25, 2001 [26] Converting an ext3 filesystem to ext4 [27] Conversion from Ext3, Btrfs wiki General references • Jonathan de Boyne Pollard (1996). “Disc and volume size limits”. Frequently Given Answers. Retrieved February 9, 2005. • IBM. “OS/2 corrective service fix JR09427”. Retrieved February 9, 2005. • “Attribute - $EA_INFORMATION (0xD0)". NTFS Information, Linux-NTFS Project. Retrieved February 9, 2005. • “Attribute - $EA (0xE0)". NTFS Information, Linux-NTFS Project. Retrieved February 9, 2005. • Mitchell, Stan (1997). Inside the Windows 95 File System. O'Reilly. ISBN 1-56592-200-X. • Nagar, Rajeev (1997). Windows NT File System Internals : A Developer’s Guide. O'Reilly. ISBN 9781-56592-249-5. • Pate, Steve D. (2003). UNIX Filesystems: Evolution, Design, and Implementation. Wiley. ISBN 0-47116483-6. • Rosenblum, Mendel (1994). The Design and Implementation of a Log-Structured File System. The Springer International Series in Engineering and Computer Science. Springer. ISBN 0-7923-95417. • Russinovich, Mark; Solomon, David A.; Ionescu, Alex (2009). “File Systems”. Windows Internals (5th ed.). Microsoft Press. ISBN 0-7356-2530-1. • Prabhakaran, Vijayan (2006). IRON File Systems. PhD dissertation, University of WisconsinMadison. • Silberschatz, Abraham; Galvin, Peter Baer; Gagne, Greg (2004). “Storage Management”. Operating System Concepts (7th ed.). Wiley. ISBN 0-47169466-5. 2.3. RESIDENT MONITOR 29 • Tanenbaum, Andrew S. (2007). Modern operat- 2.3 Resident monitor ing Systems (3rd ed.). Prentice Hall. ISBN 0-13600663-9. A resident monitor was a piece of system software in many early computers from the 1950s to 1970s. It can • Tanenbaum, Andrew S.; Woodhull, Albert S. be considered a primitive precursor to the operating sys(2006). Operating Systems: Design and Implementa- tem.[1] tion (3rd ed.). Prentice Hall. ISBN 0-13-142938-8. On a general-use computer using punched card input the resident monitor governed the machine before and after each job control card was executed, loaded and interOnline preted each control card, and acted as a job sequencer for batch processing operations.[2] • Benchmarking Filesystems (outdated) by Justin Similar very primitive system software layers were typiPiszcz, Linux Gazette 102, May 2004 cally in use in the early days of the later minicomputers and microcomputers before they gained the power to sup• Benchmarking Filesystems Part II using kernel 2.6, port full operating systems.[3] by Justin Piszcz, Linux Gazette 122, January 2006 • Filesystems (ext3, ReiserFS, XFS, JFS) comparison 2.3.1 on Debian Etch 2006 • Interview With the People Behind JFS, ReiserFS & XFS References [1] Introduction to Operating Systems 600.318/418, Johns Hopkins University Computer Science Department [2] “59.305 - Operating Systems, Massey University • Journal File System Performance (outdated): ReiserFS, JFS, and Ext3FS show their merits on a fast RAID appliance • Journaled Filesystem Benchmarks (outdated): A comparison of ReiserFS, XFS, JFS, ext3 & ext2 [3] Operating Systems - Lecture 02, Auckland University 2.4 Computer multitasking “Multitasking” redirects here. For other uses, see • Large List of File System Summaries (most recent Multitasking (disambiguation). In computing, multitasking is a concept of performupdate 2006-11-19) • Linux File System Benchmarks v2.6 kernel with a stress on CPU usage • Linux Filesystem Benchmarks • Linux large file support (outdated) • Local Filesystems for Windows • Overview of some filesystems (outdated) • Sparse files support (outdated) • Jeremy Reimer (March 16, 2008). “From BFS to ZFS: past, present, and future of file systems”. arstechnica.com. Retrieved 2008-03-18. 2.2.8 External links • Filesystem Specifications - Links & Whitepapers • Interesting File System Projects Modern desktop operating systems are capable of handling large numbers of different processes at the same time. This screenshot shows Linux Mint running simultaneously Xfce desktop environment, Firefox, a calculator program, the built-in calendar, Vim, GIMP, and VLC media player. ing multiple tasks (also known as processes) over a certain period of time by executing them concurrently. New tasks start and interrupt already started ones before they have reached completion, instead of executing the tasks sequentially so each started task needs to reach its end before a new one is started. As a result, a computer executes segments of multiple tasks in an interleaved manner, while the tasks share common processing resources 30 CHAPTER 2. OPERATING SYSTEM FUNCTIONS such as central processing units (CPUs) and main mem- The first computer using a multiprogramming system was ory. the British Leo III owned by J. Lyons and Co. Several Multitasking does not necessarily mean that multiple different programs in batch were loaded in the computer tasks are executing at exactly the same time. In other memory, and the first one began to run. When the first words, multitasking does not imply parallel execution, but program reached an instruction waiting for a peripheral, it does mean that more than one task can be part-way the context of this program was stored away, and the secthrough execution at the same time, and that more than ond program in memory was given a chance to run. The one task is advancing over a given period of time. Even on process continued until all programs finished running. multiprocessor or multicore computers, which have multiple CPUs/cores so more than one task can be executed at once (physically, one per CPU or core), multitasking allows many more tasks to be run than there are CPUs. The use of multiprogramming was enhanced by the arrival of virtual memory and virtual machine technology, which enabled individual programs to make use of memory and operating system resources as if other concurIn the case of a computer with a single CPU, only one task rently running programs were, for all practical purposes, is said to be running at any point in time, meaning that non-existent and invisible to them. the CPU is actively executing instructions for that task. Multiprogramming doesn't give any guarantee that a proMultitasking solves the problem by scheduling which task gram will run in a timely manner. Indeed, the very first may be the one running at any given time, and when an- program may very well run for hours without needing acother waiting task gets a turn. The act of reassigning a cess to a peripheral. As there were no users waiting at an CPU from one task to another one is called a context interactive terminal, this was no problem: users handed switch; the illusion of parallelism is achieved when con- in a deck of punched cards to an operator, and came back text switches occur frequently enough. Operating systems a few hours later for printed results. Multiprogramming may adopt one of many different scheduling strategies, greatly reduced wait times when multiple batches were which generally fall into the following categories: being processed. • In multiprogramming systems, the running task keeps running until it performs an operation that 2.4.2 Cooperative multitasking requires waiting for an external event (e.g. reading from a tape) or until the computer’s scheduler Main article: Non-preemptive multitasking forcibly swaps the running task out of the CPU. Multiprogramming systems are designed to maxiThe expression “time sharing” usually designated commize CPU usage. puters shared by interactive users at terminals, such as IBM’s TSO, and VM/CMS. The term “time-sharing” is • In time-sharing systems, the running task is required no longer commonly used, having been replaced by “multo relinquish the CPU, either voluntarily or by an extitasking”, following the advent of personal computers ternal event such as a hardware interrupt. Time sharand workstations rather than shared interactive systems. ing systems are designed to allow several programs Early multitasking systems used applications that volunto execute apparently simultaneously. tarily ceded time to one another. This approach, which • In real-time systems, some waiting tasks are guar- was eventually supported by many computer operating anteed to be given the CPU when an external event systems, is known today as cooperative multitasking. Aloccurs. Real time systems are designed to control though it is now rarely used in larger systems except for mechanical devices such as industrial robots, which specific applications such as CICS or the JES2 subsystem, require timely processing. cooperative multitasking was once the scheduling scheme employed by Microsoft Windows (prior to Windows 95 The term “multitasking” has become an international and Windows NT) and Mac OS (prior to OS X) in orterm, as the same word is used in many other languages der to enable multiple applications to be run simultanesuch as German, Italian, Dutch, Danish and Norwegian. ously. Windows 9x also used cooperative multitasking, but only for 16-bit legacy applications, much the same way as pre-Leopard PowerPC versions of Mac OS X used it for Classic applications. The network operating system 2.4.1 Multiprogramming NetWare used cooperative multitasking up to NetWare multitasking is still used today on RISC In the early days of computing, CPU time was expensive, 6.5. Cooperative [1] OS systems. and peripherals were very slow. When the computer ran a program that needed access to a peripheral, the central processing unit (CPU) would have to stop executing program instructions while the peripheral processed the data. This was deemed very inefficient. As a cooperatively multitasked system relies on each process regularly giving up time to other processes on the system, one poorly designed program can consume all of the CPU time for itself, either by performing extensive cal- 2.4. COMPUTER MULTITASKING 31 culations or by busy waiting; both would cause the whole support for legacy 16-bit applications, and thus provide system to hang. In a server environment, this is a hazard preemptive multitasking for all supported applications. that makes the entire environment unacceptably fragile. 2.4.4 Real time 2.4.3 Preemptive multitasking Another reason for multitasking was in the design of realtime computing systems, where there are a number of Main article: Preemption (computing) possibly unrelated external activities needed to be controlled by a single processor system. In such systems a hiPreemptive multitasking allows the computer system to erarchical interrupt system is coupled with process priorguarantee more reliably each process a regular “slice” itization to ensure that key activities were given a greater of operating time. It also allows the system to deal share of available process time. rapidly with important external events like incoming data, which might require the immediate attention of one or another process. Operating systems were developed to take 2.4.5 Multithreading advantage of these hardware capabilities and run multiple processes preemptively. Preemptive multitasking As multitasking greatly improved the throughput of comwas supported on DEC’s PDP-8 computers, and imple- puters, programmers started to implement applications as mented in OS/360 MFT in 1967, in MULTICS (1964), sets of cooperating processes (e. g., one process gathering and Unix (1969); it is a core feature of all Unix-like op- input data, one process processing input data, one process erating systems, such as Linux, Solaris and BSD with its writing out results on disk). This, however, required some derivatives.[2] tools to allow processes to efficiently exchange data. At any specific time, processes can be grouped into two categories: those that are waiting for input or output (called "I/O bound"), and those that are fully utilizing the CPU ("CPU bound"). In primitive systems, the software would often "poll", or "busywait" while waiting for requested input (such as disk, keyboard or network input). During this time, the system was not performing useful work. With the advent of interrupts and preemptive multitasking, I/O bound processes could be “blocked”, or put on hold, pending the arrival of the necessary data, allowing other processes to utilize the CPU. As the arrival of the requested data would generate an interrupt, blocked processes could be guaranteed a timely return to execution. Threads were born from the idea that the most efficient way for cooperating processes to exchange data would be to share their entire memory space. Thus, threads are effectively processes that run in the same memory context and share other resources with their parent processes, such as open files. Threads are described as lightweight processes because switching between threads does not involve changing the memory context.[4][5][6] While threads are scheduled preemptively, some operating systems provide a variant to threads, named fibers, that are scheduled cooperatively. On operating systems that do not provide fibers, an application may implement its own fibers using repeated calls to worker functions. Fibers are even more lightweight than threads, and someThe earliest preemptive multitasking OS available to what easier to program with, although they tend to lose home users was Sinclair QDOS on the Sinclair QL, re- some or all of the benefits of threads on machines with leased in 1984, but very few people bought the machine. multiple processors. Commodore’s powerful Amiga, released the following year, was the first commercially successful home com- Some systems directly support multithreading in hardputer to use the technology, and its multimedia abilities ware. make it a clear ancestor of contemporary multitasking personal computers. Microsoft made preemptive multitasking a core feature of their flagship operating system 2.4.6 Memory protection in the early 1990s when developing Windows NT 3.1 and then Windows 95. It was later adopted on the Apple Mac- Main article: Memory protection intosh by Mac OS X that, as a Unix-like operating system, uses preemptive multitasking for all native applications. Essential to any multitasking system is to safely and effecA similar model is used in Windows 9x and the Windows tively share access to system resources. Access to memNT family, where native 32-bit applications are multi- ory must be strictly managed to ensure that no process tasked preemptively, and legacy 16-bit Windows 3.x pro- can inadvertently or deliberately read or write to memory grams are multitasked cooperatively within a single pro- locations outside of the process’s address space. This is cess, although in the NT family it is possible to force a done for the purpose of general system stability and data 16-bit application to run as a separate preemptively mul- integrity, as well as data security. titasked process.[3] 64-bit editions of Windows, both for In general, memory access management is the operating the x86-64 and Itanium architectures, no longer provide system kernel’s responsibility, in combination with hard- 32 CHAPTER 2. OPERATING SYSTEM FUNCTIONS ware mechanisms (such as the memory management unit 2.4.9 See also (MMU)) that provide supporting functionalities. If a pro• Process state cess attempts to access a memory location outside of its memory space, the MMU denies the request and signals the kernel to take appropriate actions; this usually results in forcibly terminating the offending process. Depending 2.4.10 References on the software and kernel design and the specific error [1] “Preemptive multitasking”. riscos.info. 2009-11-03. Rein question, the user may receive an access violation error trieved 2014-07-27. message such as “segmentation fault”. In a well designed and correctly implemented multitasking system, a given process can never directly access memory that belongs to another process. An exception to this rule is in the case of shared memory; for example, in the System V inter-process communication mechanism the kernel allocates memory to be mutually shared by multiple processes. Such features are often used by database management software such as PostgreSQL. Inadequate memory protection mechanisms, either due to flaws in their design or poor implementations, allow for security vulnerabilities that may be potentially exploited by malicious software. 2.4.7 Memory swapping Use of a swap file or swap partition is a way for the operating system to provide more memory than is physically available by keeping portions of the primary memory in secondary storage. While multitasking and memory swapping are two completely unrelated techniques, they are very often used together, as swapping memory allows more tasks to be loaded at the same time. Typically, a multitasking system allows another process to run when the running process hits a point where it has to wait for some portion of memory to be reloaded from secondary storage. 2.4.8 [2] “UNIX, Part One”. The Digital Research Initiative. ibiblio.org. 2002-01-30. Retrieved 2014-01-09. [3] Smart Computing Article - Windows 2000 &16-Bit Applications Archived February 14, 2012 at the Wayback Machine [4] Eduardo Ciliendo; Takechika Kunimasa (April 25, 2008). “Linux Performance and Tuning Guidelines” (PDF). redbooks.ibm.com. IBM. p. 4. Retrieved March 1, 2015. [5] “Context Switch Definition”. linfo.org. May 28, 2006. Retrieved February 26, 2015. [6] “What are threads (user/kernel)?". tldp.org. September 8, 1997. Retrieved February 26, 2015. 2.5 Process management (computing) Process management is an integral part of any modernday operating system (OS). The OS must allocate resources to processes, enable processes to share and exchange information, protect the resources of each process from other processes and enable synchronisation among processes. To meet these requirements, the OS must maintain a data structure for each process, which describes the state and resource ownership of that process, and which enables the OS to exert control over each process. Programming Processes that are entirely independent are not much trouble to program in a multitasking environment. Most of the complexity in multitasking systems comes from the need to share computer resources between tasks and to synchronize the operation of co-operating tasks. Various concurrent computing techniques are used to avoid potential problems caused by multiple tasks attempting to access the same resource. Bigger systems were sometimes built with a central processor(s) and some number of I/O processors, a kind of asymmetric multiprocessing. Over the years, multitasking systems have been refined. Modern operating systems generally include detailed mechanisms for prioritizing processes, while symmetric multiprocessing has introduced new complexities and capabilities. 2.5.1 Multiprogramming In many modern operating systems, there can be more than one instance of a program loaded in memory at the same time; for example, more than one user could be executing the same program, each user having separate copies of the program loaded into memory. With some programs, it is possible to have one copy loaded into memory, while several users have shared access to it so that they each can execute the same program-code. Such a program is said to be re-entrant. The processor at any instant can only be executing one instruction from one program but several processes can be sustained over a period of time by assigning each process to the processor at intervals while the remainder become temporarily inactive. A number of processes being executed over a period of time instead of at the same time is called concurrent execution. 2.5. PROCESS MANAGEMENT (COMPUTING) A multiprogramming or multitasking OS is a system executing many processes concurrently. Multiprogramming requires that the processor be allocated to each process for a period of time and de-allocated at an appropriate moment. If the processor is de-allocated during the execution of a process, it must be done in such a way that it can be restarted later as easily as possible. 33 However, because each process consumes both CPU cycles and I/O cycles, the time which each process actually uses the CPU is a very small fraction of the total execution time for the process. So, for process i: ti ₍ ᵣₒ ₑ ₒᵣ₎ ≪ ti ₍ₑₓₑ ᵤ ᵢₒ ₎ There are two possible ways for an OS to regain control where of the processor during a program’s execution in order for ti ₍ ᵣₒ ₑ ₒᵣ₎ is the time process i spends using the CPU, and the OS to perform de-allocation or allocation: ti ₍ₑₓₑ ᵤ ᵢₒ ₎ is the total execution time for the process; i.e. the time for CPU cycles plus I/O cycles to be carried out 1. The process issues a system call (sometimes called a (executed) until completion of the process. software interrupt); for example, an I/O request ocIn fact, usually the sum of all the processor time, used by curs requesting to access a file on hard disk. N processes, rarely exceeds a small fraction of the time 2. A hardware interrupt occurs; for example, a key was to execute any one of the processes; pressed on the keyboard, or a timer runs out (used in pre-emptive multitasking). N ∑ tj (processor) < ti (execution) The stopping of one process and starting (or restarting) j=1 of another process is called a context switch or context change. In many modern operating systems, processes Therefore, in uni-programming systems, the processor can consist of many sub-processes. This introduces the lay idle for a considerable proportion of the time. To concept of a thread. A thread may be viewed as a sub- overcome this inefficiency, multiprogramming is now improcess; that is, a separate, independent sequence of ex- plemented in modern operating systems such as Linux, ecution within the code of one process. Threads are UNIX and Microsoft Windows. This enables the procesbecoming increasingly important in the design of dis- sor to switch from one process, X, to another, Y, whentributed and client–server systems and in software run on ever X is involved in the I/O phase of its execution. Since multi-processor systems. the processing time is much less than a single job’s runtime, the total time to service all N users with a multiprogramming system can be reduced to approximately: 2.5.2 How multiprogramming increases efficiency A common trait observed among processes associated with most computer programs, is that they alternate between CPU cycles and I/O cycles. For the portion of the time required for CPU cycles, the process is being executed; i.e. is occupying the CPU. During the time required for I/O cycles, the process is not using the processor. Instead, it is either waiting to perform Input/Output, or is actually performing Input/Output. An example of this is the reading from or writing to a file on disk. Prior to the advent of multiprogramming, computers operated as single-user systems. Users of such systems quickly became aware that for much of the time that a computer was allocated to a single user, the processor was idle; when the user was entering information or debugging programs for example. Computer scientists observed that overall performance of the machine could be improved by letting a different process use the processor whenever one process was waiting for input/output. In a uni-programming system, if N users were to execute programs with individual execution times of t 1 , t 2 , ..., tN, then the total time, tᵤ ᵢ, to service the N processes (consecutively) of all N users would be: tᵤ ᵢ = t 1 + t 2 + ... + tN. t ᵤ ᵢ = max(t 1 , t 2 , ..., tN) 2.5.3 Process creation Operating systems need some ways to create processes. In a very simple system designed for running only a single application (e.g., the controller in a microwave oven), it may be possible to have all the processes that will ever be needed be present when the system comes up. In generalpurpose systems, however, some way is needed to create and terminate processes as needed during operation. There are four principal events that cause a process to be created: • System initialization. • Execution of process creation system call by a running process. • A user request to create a new process. • Initiation of a batch job. When an operating system is booted, typically several processes are created. Some of these are foreground processes, that interacts with a (human) user and perform 34 CHAPTER 2. OPERATING SYSTEM FUNCTIONS work for them. Other are background processes, which are not associated with particular users, but instead have some specific function. For example, one background process may be designed to accept incoming e-mails, sleeping most of the day but suddenly springing to life when an incoming e-mail arrives. Another background process may be designed to accept an incoming request for web pages hosted on the machine, waking up when a request arrives to service that request. Process creation in UNIX and Linux are done through fork() or clone() system calls. There are several steps involved in process creation. The first step is the validation of whether the parent process has sufficient authorization to create a process. Upon successful validation, the parent process is copied almost entirely, with changes only to the unique process id, parent process, and user-space. Each new process gets its own user space.[1] 2.5.4 Process termination There are many reasons for process termination: • Batch job issues halt instruction • User logs off • Process executes a service request to terminate • Error and fault conditions • Normal completion • Time limit exceeded • Memory unavailable • Bounds violation; for example: attempted access of (non-existent) 11th element of a 10-element array • Protection error; for example: attempted write to read-only file • Arithmetic error; for example: attempted division by zero 2.5.5 Two-state model process management The operating system’s principal responsibility is in controlling the execution of processes. This includes determining the interleaving pattern for execution and allocation of resources to processes. One part of designing an OS is to describe the behaviour that we would like each process to exhibit. The simplest model is based on the fact that a process is either being executed by a processor or it is not. Thus, a process may be considered to be in one of two states, RUNNING or NOT RUNNING. When the operating system creates a new process, that process is initially labeled as NOT RUNNING, and is placed into a queue in the system in the NOT RUNNING state. The process (or some portion of it) then exists in main memory, and it waits in the queue for an opportunity to be executed. After some period of time, the currently RUNNING process will be interrupted, and moved from the RUNNING state to the NOT RUNNING state, making the processor available for a different process. The dispatch portion of the OS will then select, from the queue of NOT RUNNING processes, one of the waiting processes to transfer to the processor. The chosen process is then relabeled from a NOT RUNNING state to a RUNNING state, and its execution is either begun if it is a new process, or is resumed if it is a process which was interrupted at an earlier time. From this model we can identify some design elements of the OS: • The need to represent, and keep track of each process. • The state of a process. • The queuing of NON RUNNING processes 2.5.6 Three-state model process management Although the two-state process management model is a • Time overrun; for example: process waited longer perfectly valid design for an operating system, the abthan a specified maximum for an event sence of a BLOCKED state means that the processor lies idle when the active process changes from CPU cycles to • I/O failure I/O cycles. This design does not make efficient use of the • Invalid instruction; for example: when a process processor. The three-state process management model is tries to execute data (text) designed to overcome this problem, by introducing a new state called the BLOCKED state. This state describes any • Privileged instruction process which is waiting for an I/O event to take place. In • Data misuse this case, an I/O event can mean the use of some device • Operating system intervention; for example: to re- or a signal from another process. The three states in this model are: solve a deadlock • Parent terminates so child processes terminate (cascading termination) • Parent request • Fatal error • RUNNING: The process that is currently being executed. • READY: A process that is queuing and prepared to execute when given the opportunity. 2.5. PROCESS MANAGEMENT (COMPUTING) 35 • BLOCKED: A process that cannot execute until for a number of reasons; the most significant of which some event occurs, such as the completion of an I/O arises from the process being swapped out of memory by operation. the memory management system in order to free memory for other processes. Other common reasons for a process At any instant, a process is in one and only one of the three being suspended are when one suspends execution while states. For a single processor computer, only one process debugging a program, or when the system is monitoring can be in the RUNNING state at any one instant. There can processes. For the five-state process management model, be many processes in the READY and BLOCKED states, consider the following transitions described in the next and each of these states will have an associated queue for sections. processes. Processes entering the system must go initially into the READY state, processes can only enter the RUNNING state via the READY state. Processes normally leave the system from the RUNNING state. For each of the three states, the process occupies space in main memory. While the reason for most transitions from one state to another might be obvious, some may not be so clear. • RUNNING → READY The most common reason for this transition is that the running process has reached the maximum allowable time for uninterrupted execution; i.e. time-out occurs. Other reasons can be the imposition of priority levels as determined by the scheduling policy used for the Low Level Scheduler, and the arrival of a higher priority process into the READY state. • RUNNING → BLOCKED A process is put into the BLOCKED state if it requests something for which it must wait. A request to the OS is usually in the form of a system call, (i.e. a call from the running process to a function that is part of the OS code). For example, requesting a file from disk or a saving a section of code or data from memory to a file on disk. 2.5.7 Five-state model process management While the three state model is sufficient to describe the behavior of processes with the given events, we have to extend the model to allow for other possible events, and for more sophisticated design. In particular, the use of a portion of the hard disk to emulate main memory (so called virtual memory) requires additional states to describe the state of processes which are suspended from main memory, and placed in virtual memory (on disk). Of course, such processes can, at a future time, be resumed by being transferred back into main memory. The Medium Level Scheduler controls these events. A process can be suspended from the RUNNING, READY or BLOCKED state, giving rise to two other states, namely, READY SUSPEND and BLOCKED SUSPEND. A RUNNING process that is suspended becomes READY SUSPEND, and a BLOCKED process that is suspended becomes BLOCKED SUSPEND. A process can be suspended • BLOCKED then SUSPEND BLOCKED → If a process in the RUNNING state requires more memory, then at least one BLOCKED process can be swapped out of memory onto disk. The transition can also be made for the BLOCKED process if there are READY processes available, and the OS determines that the READY process it would like to dispatch requires more main memory to maintain adequate performance. • SUSPEND BLOCKED then SUSPEND READY A process in the SUSPEND BLOCKED state is moved to the SUSPEND READY state when the event for which it has been waiting occurs. Note that this requires the state information concerning suspended processes be accessible to the OS. • SUSPEND READY then READY When there are no READY processes in main memory, the OS will need to bring one in to continue execution. In addition, it might be the case that a process in the READY SUSPEND state has higher priority than any of the processes in the READY state. In that case, the OS designer may dictate that it is more important to get at the higher priority process than to minimise swapping. • SUSPENDED but READY Normally, the OS would be designed so that the preference would be to suspend a BLOCKED process rather than a READY one. 2.5.8 Process description and control Each process in the system is represented by a data structure called a Process Control Block (PCB), or Process Descriptor in Linux, which performs the same function as a traveller’s passport. The PCB contains the basic information about the job including: • What it is • Where it is going • How much of its processing has been completed • Where it is stored • How much it has “spent” in using resources 36 CHAPTER 2. OPERATING SYSTEM FUNCTIONS Process Identification: Each process is uniquely identi- in kernel supervisor state is called the kernel, or nucleus, fied by the user’s identification and a pointer connecting of the operating system. The kernel operates as trusted it to its descriptor. software, meaning that when it was designed and impleProcess Status: This indicates the current status of the mented, it was intended to implement protection mechaprocess; READY, RUNNING, BLOCKED, READY SUS- nisms that could not be covertly changed through the actions of untrusted software executing in user space. ExPEND, BLOCKED SUSPEND. tensions to the OS execute in user mode, so the OS does Process State: This contains all of the information not rely on the correctness of those parts of the system needed to indicate the current state of the job. software for correct operation of the OS. Hence, a funAccounting: This contains information used mainly for damental design decision for any function to be incorpobilling purposes and for performance measurement. It rated into the OS is whether it needs to be implemented indicates what kind of resources the process has used and in the kernel. If it is implemented in the kernel, it will execute in kernel (supervisor) space, and have access to for how long. other parts of the kernel. It will also be trusted software by the other parts of the kernel. If the function is implemented to execute in user mode, it will have no ac2.5.9 Processor modes cess to kernel data structures. However, the advantage Contemporary processors incorporate a mode bit to de- is that it will normally require very limited effort to infine the execution capability of a program in the proces- voke the function. While kernel-implemented functions sor. This bit can be set to kernel mode or user mode. may be easy to implement, the trap mechanism and auKernel mode is also commonly referred to as supervisor thentication at the time of the call are usually relatively mode, monitor mode or ring 0. In kernel mode, the pro- expensive. The kernel code runs fast, but there is a large cessor can execute every instruction in its hardware reper- performance overhead in the actual call. This is a subtle, toire, whereas in user mode, it can only execute a subset but important point. of the instructions. Instructions that can be executed only in kernel mode are called kernel, privileged or protected instructions to distinguish them from the user mode instructions. For example, I/O instructions are privileged. So, if an application program executes in user mode, it cannot perform its own I/O. Instead, it must request the OS to perform I/O on its behalf. The system may logically extend the mode bit to define areas of memory to be used when the processor is in kernel mode versus user mode. If the mode bit is set to kernel mode, the process executing in the processor can access either the kernel or user partition of the memory. However, if user mode is set, the process can reference only the user memory space. We frequently refer to two classes of memory user space and system space (or kernel, supervisor or protected space). In general, the mode bit extends the operating system’s protection rights. The mode bit is set by the user mode trap instruction, also called a supervisor call instruction. This instruction sets the mode bit, and branches to a fixed location in the system space. Since only system code is loaded in the system space, only system code can be invoked via a trap. When the OS has completed the supervisor call, it resets the mode bit to user mode prior to the return. 2.5.10 The Kernel system concept The parts of the OS critical to its correct operation execute in kernel mode, while other software (such as generic system software) and all application programs execute in user mode. This fundamental distinction is usually the irrefutable distinction between the operating system and other system software. The part of the system executing 2.5.11 Requesting system services There are two techniques by which a program executing in user mode can request the kernel's services: • System call • Message passing Operating systems are designed with one or the other of these two facilities, but not both. First, assume that a user process wishes to invoke a particular target system function. For the system call approach, the user process uses the trap instruction. The idea is that the system call should appear to be an ordinary procedure call to the application program; the OS provides a library of user functions with names corresponding to each actual system call. Each of these stub functions contains a trap to the OS function. When the application program calls the stub, it executes the trap instruction, which switches the CPU to kernel mode, and then branches (indirectly through an OS table), to the entry point of the function which is to be invoked. When the function completes, it switches the processor to user mode and then returns control to the user process; thus simulating a normal procedure return. In the message passing approach, the user process constructs a message, that describes the desired service. Then it uses a trusted send function to pass the message to a trusted OS process. The send function serves the same purpose as the trap; that is, it carefully checks the message, switches the processor to kernel mode, and then delivers the message to a process that implements the target functions. Meanwhile, the user process waits for the 2.6. MEMORY MANAGEMENT 37 result of the service request with a message receive oper- 2.5.14 References ation. When the OS process completes the operation, it [1] http://sunnyeves.blogspot.com/2010/09/ sends a message back to the user process. The distinction between two approaches has important consequences regarding the relative independence of the OS behavior, from the application process behavior, and the resulting performance. As a rule of thumb, operating system based on a system call interface can be made more efficient than those requiring messages to be exchanged between distinct processes. This is the case, even though the system call must be implemented with a trap instruction; that is, even though the trap is relatively expensive to perform, it is more efficient than the message passing approach, where there are generally higher costs associated with process multiplexing, message formation and message copying. The system call approach has the interesting property that there is not necessarily any OS process. Instead, a process executing in user mode changes to kernel mode when it is executing kernel code, and switches back to user mode when it returns from the OS call. If, on the other hand, the OS is designed as a set of separate processes, it is usually easier to design it so that it gets control of the machine in special situations, than if the kernel is simply a collection of functions executed by users processes in kernel mode. Even procedure-based operating system usually find it necessary to include at least a few system processes (called daemons in UNIX) to handle situation whereby the machine is otherwise idle such as scheduling and handling the network. 2.5.12 See also sneak-peek-into-linux-kernel-chapter-2.html 2.5.15 External links 2.6 Memory management “Memory allocation” redirects here. For memory allocation in the brain, see Neuronal memory allocation. Memory management is the act of managing computer memory at the system level. The essential requirement of memory management is to provide ways to dynamically allocate portions of memory to programs at their request, and free it for reuse when no longer needed. This is critical to any advanced computer system where more than a single process might be underway at any time.[1] Several methods have been devised that increase the effectiveness of memory management. Virtual memory systems separate the memory addresses used by a process from actual physical addresses, allowing separation of processes and increasing the effectively available amount of RAM using paging or swapping to secondary storage. The quality of the virtual memory manager can have an extensive effect on overall system performance. 2.6.1 Dynamic memory allocation • Process isolation External fragmentation 2.5.13 Sources A B C D E F Total free memory available for allocation. • Operating System incorporating Windows and UNIX, Colin Ritchie. ISBN 0-8264-6416-5 Dynamically allocated three blocks of memory (A, B, C). • Operating Systems, William Stallings, Prentice Hall, (4th Edition, 2000) Out of these three continuous blocks of allocated memory, consider that the middle block B is released. It is not possible to use the freed block B, if the memory to be allocated is larger than the size of block B. • Multiprogramming, Process Description and Control An example of external fragmentation • Operating Systems – A Modern Perspective, Gary Nutt, Addison Wesley, (2nd Edition, 2001). • Process Management Models, Scheduling, UNIX System V Release 4: Details The task of fulfilling an allocation request consists of locating a block of unused memory of sufficient size. • Modern Operating Systems, Andrew Tanenbaum, Memory requests are satisfied by allocating portions from a large pool of memory called the heap or free store. At Prentice Hall, (2nd Edition, 2001). any given time, some parts of the heap are in use, while • Operating System Concepts, Silberschatz, Galvin & some are “free” (unused) and thus available for future alGagne, John Wiley & Sons, (6th Edition, 2003). locations. 38 Several issues complicate the implementation, such as external fragmentation, which arises when there are many small gaps between allocated memory blocks, which invalidates their use for an allocation request. The allocator’s metadata can also inflate the size of (individually) small allocations. This is often managed by chunking. The memory management system must track outstanding allocations to ensure that they do not overlap and that no memory is ever “lost” as a memory leak. Efficiency The specific dynamic memory allocation algorithm implemented can impact performance significantly. A study conducted in 1994 by Digital Equipment Corporation illustrates the overheads involved for a variety of allocators. The lowest average instruction path length required to allocate a single memory slot was 52 (as measured with an instruction level profiler on a variety of software).[2] CHAPTER 2. OPERATING SYSTEM FUNCTIONS request is complete. When a block is allocated, the allocator will start with the smallest sufficiently large block to avoid needlessly breaking blocks. When a block is freed, it is compared to its buddy. If they are both free, they are combined and placed in the next-largest size buddy-block list. 2.6.2 Systems with virtual memory Main articles: Memory protection and Shared memory (interprocess communication) Virtual memory is a method of decoupling the memory organization from the physical hardware. The applications operate memory via virtual addresses. Each time an attempt to access stored data is made, virtual memory data orders translate the virtual address to a physical address. In this way addition of virtual memory enables granular control over memory systems and methods of access. In virtual memory systems the operating system limits how a process can access the memory. This feature, Since the precise location of the allocation is not known called memory protection, can be used to disallow a proin advance, the memory is accessed indirectly, usually cess to read or write to memory that is not allocated to it, through a pointer reference. The specific algorithm used preventing malicious or malfunctioning code in one proto organize the memory area and allocate and deallocate gram from interfering with the operation of another. chunks is interlinked with the kernel, and may use any of Even though the memory allocated for specific processes the following methods: is normally isolated, processes sometimes need to be able Implementations to share information. Shared memory is one of the fastest techniques for inter-process communication. Fixed-size blocks allocation Main article: Memory Memory is usually classified by access rate into primary pool storage and secondary storage. Memory management systems, among other operations, also handle the moving Fixed-size blocks allocation, also called memory pool alof information between these two levels of memory. location, uses a free list of fixed-size blocks of memory (often all of the same size). This works well for simple embedded systems where no large objects need to 2.6.3 See also be allocated, but suffers from fragmentation, especially with long memory addresses. However, due to the sig• Automatic memory allocation nificantly reduced overhead this method can substantially improve performance for objects that need frequent allo• Dynamic array cation / de-allocation and is often used in video games. • Memory management (operating systems) Buddy blocks For more details on this topic, see Buddy memory allocation. • Memory management unit (MMU) • Resource management (computing) In this system, memory is allocated into several pools of • Slab allocation memory instead of just one, where each pool represents blocks of memory of a certain power of two in size. All • Stack-based memory allocation blocks of a particular size are kept in a sorted linked list or tree and all new blocks that are formed during allocation are added to their respective memory pools for later use. 2.6.4 Notes If a smaller size is requested than is available, the smallest available size is selected and halved. One of the result- [1] Gibson, Steve (August 15, 1988). “Tech Talk: Placing the IBM/Microsoft XMS Spec Into Perspective”. InfoWorld. ing halves is selected, and the process repeats until the 2.7. DEVICE DRIVER [2] Detlefs, D.; Dosser, A.; Zorn, B. (June 1994). “Memory allocation costs in large C and C++ programs” (PDF). Software: Practice and Experience 24 (6): 527–542. doi:10.1002/spe.4380240602. CiteSeerX: 10.1.1.30.3073. 2.6.5 References • Donald Knuth. Fundamental Algorithms, Third Edition. Addison-Wesley, 1997. ISBN 0-201-89683-4. Section 2.5: Dynamic Storage Allocation, pp. 435– 456. • Simple Memory Allocation Algorithms (originally published on OSDEV Community) 39 • The Memory Management Reference • The Memory Management Reference, Beginner’s Guide Allocation • Linux Memory Management • Memory Management For System Programmers • VMem - general malloc/free replacement. thread safe C++ allocator Fast • Wilson, P. R.; Johnstone, M. S.; Neely, M.; Boles, 2.7 Device driver D. (1995). “Dynamic storage allocation: A survey and critical review”. Memory Management. Lecture Notes in Computer Science 986. pp. 1–116. For other uses, see Driver. doi:10.1007/3-540-60368-9_19. ISBN 978-3-54060368-9. CiteSeerX: 10.1.1.47.275. In computing, a device driver (commonly referred to as a • Berger, E. D.; Zorn, B. G.; McKinley, K. S. driver) is a computer program that operates or controls a [1] (June 2001). “Composing High-Performance Mem- particular type of device that is attached to a computer. ory Allocators”. Proceedings of the ACM SIG- A driver provides a software interface to hardware dePLAN 2001 conference on Programming language vices, enabling operating systems and other computer design and implementation (PDF). pp. 114–124. programs to access hardware functions without needing doi:10.1145/378795.378821. ISBN 1-58113-414- to know precise details of the hardware being used. 2. CiteSeerX: 10.1.1.1.2112. • Berger, E. D.; Zorn, B. G.; McKinley, K. S. (November 2002). “Reconsidering Custom Memory Allocation”. Proceedings of the 17th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications (PDF). pp. 1– 12. doi:10.1145/582419.582421. ISBN 1-58113471-1. CiteSeerX: 10.1.1.119.5298. • memorymanagement.org A small old site dedicated to memory management. 2.6.6 Further reading A driver typically communicates with the device through the computer bus or communications subsystem to which the hardware connects. When a calling program invokes a routine in the driver, the driver issues commands to the device. Once the device sends data back to the driver, the driver may invoke routines in the original calling program. Drivers are hardware-dependent and operatingsystem-specific. They usually provide the interrupt handling required for any necessary asynchronous timedependent hardware interface.[2] 2.7.1 Purpose • “Dynamic Storage Allocation: A Survey and Crit- Device drivers simplify programming by acting as transical Review”, Department of Computer Sciences lator between a hardware device and the applications or operating systems that use it.[1] Programmers can write University of Texas at Austin the higher-level application code independently of whatever specific hardware the end-user is using. 2.6.7 • • • • • External links For example, a high-level application for interacting with a serial port may simply have two functions for “send “Generic Memory Manager” C++ library data” and “receive data”. At a lower level, a device driver implementing these functions would communicate to the Sample bit-mapped arena memory allocator in C particular serial port controller installed on a user’s comTLSF: a constant time allocator for real-time sys- puter. The commands needed to control a 16550 UART tems are much different from the commands needed to control an FTDI serial port converter, but each hardware-specific Slides on Dynamic memory allocation device driver abstracts these details into the same (or simInside A Storage Allocator ilar) software interface. 40 2.7.2 CHAPTER 2. OPERATING SYSTEM FUNCTIONS Development The Microsoft Windows .sys files and Linux .ko modules contain loadable device drivers. The advantage of loadable device drivers is that they can be loaded only when Writing a device driver requires an in-depth understand- necessary and then unloaded, thus saving kernel memory. ing of how the hardware and the software works for a given platform function. Because drivers require lowlevel access to hardware functions in order to operate, 2.7.3 Kernel mode vs. user mode drivers typically operate in a highly privileged environment and can cause system operational issues if some- Device drivers, particularly on modern Microsoft Winthing goes wrong. In contrast, most user-level software on dows platforms, can run in kernel-mode (Ring 0 on x86 modern operating systems can be stopped without greatly CPUs) or in user-mode (Ring 3 on x86 CPUs).[5] The affecting the rest of the system. Even drivers executing in primary benefit of running a driver in user mode is imuser mode can crash a system if the device is erroneously proved stability, since a poorly written user mode deprogrammed. These factors make it more difficult and vice driver cannot crash the system by overwriting kernel memory.[6] On the other hand, user/kernel-mode trandangerous to diagnose problems.[3] sitions usually impose a considerable performance overThe task of writing drivers thus usually falls to software head, thereby prohibiting user-mode drivers for low laengineers or computer engineers who work for hardwaretency and high throughput requirements. development companies. This is because they have better information than most outsiders about the design of Kernel space can be accessed by user module only their hardware. Moreover, it was traditionally consid- through the use of system calls. End user programs like ered in the hardware manufacturer's interest to guarantee the UNIX shell or other GUI-based applications are part that their clients can use their hardware in an optimum of the user space. These applications interact with hardway. Typically, the logical device driver (LDD) is writ- ware through kernel supported functions. ten by the operating system vendor, while the physical device driver (PDD) is implemented by the device vendor. But in recent years non-vendors have written nu- 2.7.4 Applications merous device drivers, mainly for use with free and open source operating systems. In such cases, it is important Because of the diversity of modern hardware and drivers operate in many different that the hardware manufacturer provides information on operating systems, [7] environments. Drivers may interface with: how the device communicates. Although this information can instead be learned by reverse engineering, this • Printers is much more difficult with hardware than it is with software. • Video adapters Microsoft has attempted to reduce system instability due • Network cards to poorly written device drivers by creating a new framework for driver development, called Windows Driver • Sound cards Foundation (WDF). This includes User-Mode Driver Framework (UMDF) that encourages development of • Local buses of various sorts—in particular, for bus certain types of drivers—primarily those that implement mastering on modern systems a message-based protocol for communicating with their • Low-bandwidth I/O buses of various sorts (for devices—as user-mode drivers. If such drivers malfuncpointing devices such as mice, keyboards, USB, etc.) tion, they do not cause system instability. The KernelMode Driver Framework (KMDF) model continues to • Computer storage devices such as hard disk, CDallow development of kernel-mode device drivers, but atROM, and floppy disk buses (ATA, SATA, SCSI) tempts to provide standard implementations of functions that are known to cause problems, including cancellation • Implementing support for different file systems of I/O operations, power management, and plug and play • Image scanners device support. Apple has an open-source framework for developing drivers on Mac OS X called the I/O Kit. • Digital cameras In Linux environments, programmers can build device Common levels of abstraction for device drivers include: drivers as parts of the kernel, separately as loadable modules, or as user-mode drivers (for certain types of de• For hardware: vices where kernel interfaces exist, such as for USB de• Interfacing directly vices). Makedev includes a list of the devices in Linux: • Writing to or reading from a device control ttyS (terminal), lp (parallel port), hd (disk), loop, sound (these include mixer, sequencer, dsp, and audio)...[4] register 2.7. DEVICE DRIVER 41 • Using some higher-level interface (e.g. Video BIOS) • Video: Vidix, Direct Rendering Infrastructure • Using another lower-level device driver (e.g. file system drivers using disk drivers) Solaris descriptions of commonly used device drivers • Simulating work with hardware, while doing something entirely different • For software: • Allowing the operating system direct access to hardware resources • Implementing only primitives • Implementing an interface for non-driver software (e.g., TWAIN) • Implementing a language, sometimes quite high-level (e.g., PostScript) So choosing and installing the correct device drivers for given hardware is often a key component of computer system configuration.[8] • fas: Fast/wide SCSI controller • hme: Fast (10/100 Mbit/s) Ethernet • isp: Differential SCSI controllers and the SunSwift card • glm: (Gigabaud Link Module[11] ) UltraSCSI controllers • scsi: Small Computer Serial Interface (SCSI) devices • sf: soc+ or social Fiber Channel Arbitrated Loop (FCAL) • soc: SPARC Storage Array (SSA) controllers and the control device • social: Serial optical controllers for FCAL (soc+) 2.7.5 Virtual device drivers Virtual device drivers represent a particular variant of de- 2.7.7 APIs vice drivers. They are used to emulate a hardware device, • Windows Display Driver Model (WDDM) – the particularly in virtualization environments, for example graphic display driver architecture for Windows when a DOS program is run on a Microsoft Windows Vista, Windows 7 and Windows 8. computer or when a guest operating system is run on, for example, a Xen host. Instead of enabling the guest • Unified Audio Model (UAM) operating system to dialog with hardware, virtual device drivers take the opposite role and emulate a piece of hard• Windows Driver Foundation (WDF) ware, so that the guest operating system and its drivers • Windows Driver Model (WDM) running inside a virtual machine can have the illusion of accessing real hardware. Attempts by the guest operating • Network Driver Interface Specification (NDIS) – a system to access the hardware are routed to the virtual destandard network card driver API vice driver in the host operating system as e.g., function calls. The virtual device driver can also send simulated • Advanced Linux Sound Architecture (ALSA) – as processor-level events like interrupts into the virtual maof 2009 the standard Linux sound-driver interface chine. • Scanner Access Now Easy (SANE) – a publicVirtual devices may also operate in a non-virtualized endomain interface to raster-image scanner-hardware vironment. For example a virtual network adapter is used with a virtual private network, while a virtual disk device • I/O Kit – an open-source framework from Apple for is used with iSCSI. A good example for virtual device developing Mac OS X device drivers drivers can be Daemon Tools. There are several variants of virtual device drivers, such as VxDs, VLMs, VDDs. • Installable File System (IFS) – a filesystem API for IBM OS/2 and Microsoft Windows NT 2.7.6 • Open Data-Link Interface (ODI) – a network card API similar to NDIS Open drivers • Printers: CUPS • RAIDs: CCISS[9] (Compaq Command Interface for SCSI-3 Support[10] ) • Scanners: SANE • Uniform Driver Interface (UDI) – a cross-platform driver interface project • Dynax Driver Framework (dxd) – C++ open source cross-platform driver framework for KMDF and IOKit 42 2.7.8 CHAPTER 2. OPERATING SYSTEM FUNCTIONS Identifiers [9] “CCISS”. SourceForge. 2010. Retrieved 2010-08-11. Drivers for the HP (previously Compaq) Smart Array controllers which provide hardware RAID capability. A device on the PCI bus or USB is identified by two IDs which consist of 4 hexadecimal numbers each. The [10] Russell, Steve; et al. (2003-10-21). “Abbreviations and vendor ID identifies the vendor of the device. The deacronyms”. Server Consolidation with the IBM eserver vice ID identifies a specific device from that manufacxSeries 440 and VMware ESX Serve. IBM International turer/vendor. Technical Support Organization. p. 207. ISBN 0-73842684-9. Retrieved 2011-08-14. A PCI device has often an ID pair for the main chip of the device, and also a subsystem ID pair which identifies [11] “US Patent 5969841 - Gigabaud link module with rethe vendor, which may be different from the chip manuceived power detect signal”. PatentStorm LLC. Refacturer. trieved 2009-09-08. An improved Gigabaud Link Mod- 2.7.9 See also ule (GLM) is provided for performing bi-directional data transfers between a host device and a serial transfer medium. • Class driver • Device driver synthesis and verification 2.7.11 External links • Driver wrapper • Microsoft Windows Hardware Developer Central • Free software • The database of Windows drivers • Firmware • FileHelp - Database of drivers • Interrupt • Linux Hardware Compatibility Lists and Linux Drivers • Loadable kernel module • Makedev • Open-source hardware • Printer driver • Replicant (operating system) • udev 2.7.10 References [1] “What is a device driver?, The purpose of device drivers”. PC Gesund. Retrieved November 8, 2012. [2] EMC Education Services (2010). Information Storage and Management: Storing, Managing, and Protecting Digital Information. John Wiley & Sons. [3] Burke, Timothy (1995). Writing device drivers: tutorial and reference. Digital Press. [4] “MAKEDEV — Linux Command — Unix Command”. Linux.about.com. 2009-09-11. Retrieved 2009-09-17. [5] “User-mode vs. Kernel-mode Drivers”. Microsoft. 200303-01. Retrieved 2008-03-04. [6] “Introduction to the User-Mode Driver Framework (UMDF)". Microsoft. 2006-10-10. Retrieved 2008-0304. [7] Deborah Morley (2009). Understanding Computers 2009: Today and Tomorrow. Cengage Learning. [8] “What are Device Drivers and why do we need them?". • Understanding Modern Device Drivers(Linux) • BinaryDriverHowto, Ubuntu. • How To Update Device Drivers Manual 2.8 Runtime library In computer programming, a runtime library is a set of low-level routines used by a compiler to invoke some of the behaviors of a runtime environment, by inserting calls to the runtime library into compiled executable binary. The runtime environment implements the execution model, built-in functions, and other fundamental behaviors of a programming language. During execution (run time) of that computer program, execution of those calls to the runtime library cause communication between the executable binary and the runtime environment. A runtime library often includes built-in functions for memory management, or for exceptions handling.[1] Therefore, a runtime library is always specific to the platform and compiler. The runtime library may implement a portion of the runtime environment’s behavior, but if one reads the code of the calls available, they are typically only thin wrappers that simply package information, and send it to the runtime environment or operating system. However, sometimes the term runtime library is meant to include the code of the runtime environment itself, even though much of that code cannot be directly reached via a library call. 2.8. RUNTIME LIBRARY For example, some language features that can be performed only (or are more efficient or accurate) at runtime are implemented in the runtime environment and may be invoked via the runtime library API, e.g. some logic errors, array bounds checking, dynamic type checking, exception handling, and possibly debugging functionality. For this reason, some programming bugs are not discovered until the program is tested in a “live” environment with real data, despite sophisticated compile-time checking and testing performed during development. As another example, a runtime library may contain code of built-in low-level operations too complicated for their inlining during compilation, such as implementations of arithmetic operations not directly supported by the targeted CPU, or various miscellaneous compiler-specific operations and directives.[1][2] The concept of a runtime library should not be confused with an ordinary program library like that created by an application programmer or delivered by a third party, nor with a dynamic library, meaning a program library linked at run time. For example, the C programming language requires only a minimal runtime library (commonly called crt0), but defines a large standard library (called C standard library) that has to be provided by each implementation.[3] 2.8.1 References [1] “The GCC low-level runtime library”. GCC Introduction. gnu.org. Retrieved 2013-12-30. [2] “Other Built-in Functions Provided by GCC”. GCC Introduction. gnu.org. Retrieved 2013-12-30. [3] “The C Runtime Initialization, crt0.o”. embecosm.com. 2010. Retrieved 2013-12-30. 2.8.2 External links • What is the C runtime library? (StackExchange) 43 Chapter 3 Interrupts and Interrupt Handling 3.1 Interrupt using electronic alerting signals that are sent to the processor from an external device, which is either a part of This article is about computer interrupts. For the study the computer itself, such as a disk controller, or an exof the effect of disruptions on job performance, see ternal peripheral. For example, pressing a key on the keyboard or moving the mouse triggers hardware interInterruption science. For other uses, see Interruption. In systems programming, an interrupt is a signal to the rupts that cause the processor to read the keystroke or mouse position. Unlike the software type (described below), hardware interrupts are asynchronous and can occur in the middle of instruction execution, requiring additional care in programming. The act of initiating a hardware interrupt is referred to as an interrupt request (IRQ). A software interrupt is caused either by an exceptional condition in the processor itself, or a special instruction in the instruction set which causes an interrupt when it is executed. The former is often called a trap or exception and is used for errors or events occurring during program execution that are exceptional enough that they cannot be handled within the program itself. For example, if the processor’s arithmetic logic unit is commanded to divide a number by zero, this impossible demand will cause a divide-by-zero exception, perhaps causing the computer to abandon the calculation or display an error message. Software interrupt instructions function similarly to subroutine calls and are used for a variety of purposes, such as to request services from lowlevel system software such as device drivers. For example, computers often use software interrupt instructions to communicate with the disk controller to request data be read or written to the disk. interrupt sources and processor handling processor emitted by hardware or software indicating an event that needs immediate attention. An interrupt alerts the processor to a high-priority condition requiring the interruption of the current code the processor is executing. The processor responds by suspending its current activities, saving its state, and executing a function called an interrupt handler (or an interrupt service routine, ISR) to deal with the event. This interruption is temporary, and, after the interrupt handler finishes, the processor resumes normal activities.[1] There are two types of interrupts: hardware interrupts and software interrupts. Each interrupt has its own interrupt handler. The number of hardware interrupts is limited by the number of interrupt request (IRQ) lines to the processor, but there may be hundreds of different software interrupts. Interrupts are a commonly used technique for computer multitasking, especially in real-time computing. Such a system is said to be interrupt-driven.[3] 3.1.1 Overview Hardware interrupts were introduced as a way to reduce Hardware interrupts are used by devices to communi- wasting the processor’s valuable time in polling loops, cate that they require attention from the operating sys- waiting for external events. They may be implemented in tem.[2] Internally, hardware interrupts are implemented hardware as a distinct system with control lines, or they 44 3.1. INTERRUPT may be integrated into the memory subsystem. If implemented in hardware, an interrupt controller circuit such as the IBM PC’s Programmable Interrupt Controller (PIC) may be connected between the interrupting device and the processor’s interrupt pin to multiplex several sources of interrupt onto the one or two CPU lines typically available. If implemented as part of the memory controller, interrupts are mapped into the system’s memory address space. 45 • The execution state of the instruction pointed to by the PC is known. An interrupt that does not meet these requirements is called an imprecise interrupt. The phenomenon where the overall system performance is severely hindered by excessive amounts of processing time spent handling interrupts is called an interrupt storm. Interrupts can be categorized into these different types: 3.1.2 Types of interrupts • Maskable interrupt (IRQ): a hardware interrupt that may be ignored by setting a bit in an interrupt mask Level-triggered register's (IMR) bit-mask. A level-triggered interrupt is an interrupt signalled by • Non-maskable interrupt (NMI): a hardware interrupt maintaining the interrupt line at a high or low level. A that lacks an associated bit-mask, so that it can never device wishing to signal a Level-triggered interrupt drives be ignored. NMIs are used for the highest priority the interrupt request line to its active level (high or low), tasks such as timers, especially watchdog timers. and then holds it at that level until it is serviced. It ceases asserting the line when the CPU commands it to or oth• Inter-processor interrupt (IPI): a special case of in- erwise handles the condition that caused it to signal the terrupt that is generated by one processor to inter- interrupt. rupt another processor in a multiprocessor system. Typically, the processor samples the interrupt input at • Software interrupt: an interrupt generated within a predefined times during each bus cycle such as state T2 processor by executing an instruction. Software in- for the Z80 microprocessor. If the interrupt isn't active terrupts are often used to implement system calls be- when the processor samples it, the CPU doesn't see it. cause they result in a subroutine call with a CPU ring One possible use for this type of interrupt is to minimize spurious signals from a noisy interrupt line: a spurious level change. pulse will often be so short that it is not noticed. • Spurious interrupt: a hardware interrupt that is unwanted. They are typically generated by system con- Multiple devices may share a level-triggered interrupt line ditions such as electrical interference on an interrupt if they are designed to. The interrupt line must have a pull-down or pull-up resistor so that when not actively line or through incorrectly designed hardware. driven it settles to its inactive state. Devices actively assert the line to indicate an outstanding interrupt, but let Processors typically have an internal interrupt mask which the line float (do not actively drive it) when not signalling allows software to ignore all external hardware interrupts an interrupt. The line is then in its asserted state when any while it is set. Setting or clearing this mask may be faster (one or more than one) of the sharing devices is signalling than accessing an interrupt mask register (IMR) in a PIC an outstanding interrupt. or disabling interrupts in the device itself. In some cases, such as the x86 architecture, disabling and enabling in- Level-triggered interrupt is favored by some because it terrupts on the processor itself act as a memory barrier; is easy to share the interrupt request line without losing the interrupts, when multiple shared devices interrupt at however, it may actually be slower. the same time. Upon detecting assertion of the interrupt An interrupt that leaves the machine in a well-defined line, the CPU must search through the devices sharing the state is called a precise interrupt. Such an interrupt has interrupt request line until one who triggered the interrupt four properties: is detected. After servicing this device, the CPU may recheck the interrupt line status to determine whether • The Program Counter (PC) is saved in a known any other devices also needs service. If the line is now place. de-asserted, the CPU avoids checking the remaining devices on the line. Since some devices interrupt more fre• All instructions before the one pointed to by the PC quently than others, and other device interrupts are parhave fully executed. ticularly expensive, a careful ordering of device checks is • No instruction beyond the one pointed to by the PC employed to increase efficiency. The original PCI stanhas been executed (that is no prohibition on instruc- dard mandated level-triggered interrupts because of this tion beyond that in PC, it is just that any changes advantage of sharing interrupts. they make to registers or memory must be undone There are also serious problems with sharing leveltriggered interrupts. As long as any device on the line before the interrupt happens). 46 CHAPTER 3. INTERRUPTS AND INTERRUPT HANDLING has an outstanding request for service the line remains asserted, so it is not possible to detect a change in the status of any other device. Deferring servicing a low-priority device is not an option, because this would prevent detection of service requests from higher-priority devices. If there is a device on the line that the CPU does not know how to service, then any interrupt from that device permanently blocks all interrupts from the other devices. Edge-triggered An edge-triggered interrupt is an interrupt signalled by a level transition on the interrupt line, either a falling edge (high to low) or a rising edge (low to high). A device, wishing to signal an interrupt, drives a pulse onto the line and then releases the line to its inactive state. If the pulse is too short to be detected by polled I/O then special hardware may be required to detect the edge. Multiple devices may share an edge-triggered interrupt line if they are designed to. The interrupt line must have a pull-down or pull-up resistor so that when not actively driven it settles to one particular state. Devices signal an interrupt by briefly driving the line to its non-default state, and let the line float (do not actively drive it) when not signalling an interrupt. This type of connection is also referred to as open collector. The line then carries all the pulses generated by all the devices. (This is analogous to the pull cord on some buses and trolleys that any passenger can pull to signal the driver that they are requesting a stop.) However, interrupt pulses from different devices may merge if they occur close in time. To avoid losing interrupts the CPU must trigger on the trailing edge of the pulse (e.g. the rising edge if the line is pulled up and driven low). After detecting an interrupt the CPU must check all the devices for service requirements. devices be able to share them. The parallel port also uses edge-triggered interrupts. Many older devices assume that they have exclusive use of their interrupt line, making it electrically unsafe to share them. However, ISA motherboards include pull-up resistors on the IRQ lines, so well-behaved devices share ISA interrupts just fine. Hybrid Some systems use a hybrid of level-triggered and edgetriggered signalling. The hardware not only looks for an edge, but it also verifies that the interrupt signal stays active for a certain period of time. A common use of a hybrid interrupt is for the NMI (nonmaskable interrupt) input. Because NMIs generally signal major – or even catastrophic – system events, a good implementation of this signal tries to ensure that the interrupt is valid by verifying that it remains active for a period of time. This 2-step approach helps to eliminate false interrupts from affecting the system. Message-signaled Main article: Message Signaled Interrupts A message-signalled interrupt does not use a physical interrupt line. Instead, a device signals its request for service by sending a short message over some communications medium, typically a computer bus. The message might be of a type reserved for interrupts, or it might be Edge-triggered interrupts do not suffer the problems that of some pre-existing type such as a memory write. level-triggered interrupts have with sharing. Service of Message-signalled interrupts behave very much like a low-priority device can be postponed arbitrarily, and edge-triggered interrupts, in that the interrupt is a interrupts will continue to be received from the high- momentary signal rather than a continuous condition. priority devices that are being serviced. If there is a de- Interrupt-handling software treats the two in much the vice that the CPU does not know how to service, it may same manner. Typically, multiple pending messagecause a spurious interrupt, or even periodic spurious in- signalled interrupts with the same message (the same virterrupts, but it does not interfere with the interrupt sig- tual interrupt line) are allowed to merge, just as closely nalling of the other devices. However, it is fairly easy for spaced edge-triggered interrupts can merge. an edge triggered interrupt to be missed - for example if interrupts have to be masked for a period - and un- Message-signalled interrupt vectors can be shared, to the less there is some type of hardware latch that records the extent that the underlying communication medium can be event it is impossible to recover. Such problems caused shared. No additional effort is required. many “lockups” in early computer hardware because the Because the identity of the interrupt is indicated by a patprocessor did not know it was expected to do something. tern of data bits, not requiring a separate physical conMore modern hardware often has one or more interrupt ductor, many more distinct interrupts can be efficiently status registers that latch the interrupt requests; well writ- handled. This reduces the need for sharing. Interrupt ten edge-driven interrupt software often checks such reg- messages can also be passed over a serial bus, not requiristers to ensure events are not missed. ing any additional lines. The elderly Industry Standard Architecture (ISA) bus PCI Express, a serial computer bus, uses messageuses edge-triggered interrupts, but does not mandate that signalled interrupts exclusively. 3.1. INTERRUPT Doorbell In a push button analogy applied to computer systems, the term doorbell or doorbell interrupt is often used to describe a mechanism whereby a software system can signal or notify a computer hardware device that there is some work to be done. Typically, the software system will place data in some well known and mutually agreed upon memory location(s), and “ring the doorbell” by writing to a different memory location. This different memory location is often called the doorbell region, and there may even be multiple doorbells serving different purposes in this region. It is this act of writing to the doorbell region of memory that “rings the bell” and notifies the hardware device that the data are ready and waiting. The hardware device would now know that the data are valid and can be acted upon. It would typically write the data to a hard disk drive, or send them over a network, or encrypt them, etc. 47 tectures mandate shareable interrupts. 3.1.4 Performance issues Interrupts provide low overhead and good latency at low load, but degrade significantly at high interrupt rate unless care is taken to prevent several pathologies. These are various forms of livelocks, when the system spends all of its time processing interrupts to the exclusion of other required tasks. Under extreme conditions, a large number of interrupts (like very high network traffic) may completely stall the system. To avoid such problems, an operating system must schedule network interrupt handling as carefully as it schedules process execution.[4] With multi-core processors, additional performance improvements in interrupt handling can be achieved through receive-side scaling (RSS) when multiqueue NICs are used. Such NICs provide multiple receive queues associated to separate interrupts; by routing each of those interrupts to different cores, processing of the interrupt requests triggered by the network traffic received by a single NIC can be distributed among multiple cores. Distribution of the interrupts among cores can be performed automatically by the operating system, or the routing of interrupts (usually referred to as IRQ affinity) can be manually configured.[5][6] The term doorbell interrupt is usually a misnomer. It’s similar to an interrupt, because it causes some work to be done by the device; however, the doorbell region is sometimes implemented as a polled region, sometimes the doorbell region writes through to physical device registers, and sometimes the doorbell region is hardwired directly to physical device registers. When either writing through or directly to physical device registers, this may cause a real interrupt to occur at the device’s central proA purely software-based implementation of the receivcessor unit (CPU), if it has one. ing traffic distribution, known as receive packet steering Doorbell interrupts can be compared to Message Signaled (RPS), distributes received traffic among cores later in Interrupts, as they have some similarities. the data path, as part of the interrupt handler functionality. Advantages of RPS over RSS include no requirements for specific hardware, more advanced traffic dis3.1.3 Difficulty with sharing interrupt tribution filters, and reduced rate of interrupts produced by a NIC. As a downside, RPS increases the rate of interlines processor interrupts (IPIs). Receive flow steering (RFS) Multiple devices sharing an interrupt line (of any trig- takes the software-based approach further by accountgering style) all act as spurious interrupt sources with re- ing for application locality; further performance improvespect to each other. With many devices on one line the ments are achieved by processing interrupt requests by workload in servicing interrupts grows in proportion to the same cores on which particular network packets will [5][7][8] the square of the number of devices. It is therefore pre- be consumed by the targeted application. ferred to spread devices evenly across the available interrupt lines. Shortage of interrupt lines is a problem in older system designs where the interrupt lines are distinct phys- 3.1.5 Typical uses ical conductors. Message-signalled interrupts, where the interrupt line is virtual, are favored in new system archi- Typical uses of interrupts include the following: system tectures (such as PCI Express) and relieve this problem timers, disk I/O, power-off signals, and traps. Other to a considerable extent. interrupts exist to transfer data bytes using UARTs or Some devices with a poorly designed programming in- Ethernet; sense key-presses; control motors; or anything terface provide no way to determine whether they have else the equipment must do. requested service. They may lock up or otherwise misbehave if serviced when they do not want it. Such devices cannot tolerate spurious interrupts, and so also cannot tolerate sharing an interrupt line. ISA cards, due to often cheap design and construction, are notorious for this problem. Such devices are becoming much rarer, as hardware logic becomes cheaper and new system archi- One typical use is to generate interrupts periodically by dividing the output of a crystal oscillator and having an interrupt handler count the interrupts in order to keep time. These periodic interrupts are often used by the OS’s task scheduler to reschedule the priorities of running processes. Some older computers generated periodic interrupts from the power line frequency because it 48 CHAPTER 3. INTERRUPTS AND INTERRUPT HANDLING was controlled by the utilities to eliminate long-term drift of electric clocks. For example, a disk interrupt signals the completion of a data transfer from or to the disk peripheral; a process waiting to read or write a file starts up again. As another example, a power-off interrupt predicts or requests a loss of power, allowing the computer equipment to perform an orderly shut-down. Also, interrupts are used in typeahead features for buffering events like keystrokes. [6] “Intel 82574 Gigabit Ethernet Controller Family Datasheet” (PDF). Intel. June 2014. p. 1. Retrieved November 16, 2014. [7] Jonathan Corbet (November 17, 2009). “Receive packet steering”. LWN.net. Retrieved November 16, 2014. [8] Jake Edge (April 7, 2010). “Receive flow steering”. LWN.net. Retrieved November 16, 2014. 3.1.8 External links 3.1.6 See also • Advanced Programmable Interrupt Controller (APIC) • BIOS interrupt call • Event-driven programming • Exception handling • Interrupts Made Easy • Interrupts for Microchip PIC Microcontroller • IBM PC Interrupt Table • University of Alberta CMPUT 296 Concrete Computing Notes on Interrupts, archived from the original on March 13, 2012 • INT (x86 instruction) • Interrupt coalescing • Interrupt handler • Interrupt latency • Interrupts in 65xx processors • Ralf Brown’s Interrupt List • Interrupts on IBM System/360 architecture 3.2 Interrupt handler In computer systems programming, an interrupt handler, also known as an interrupt service routine or ISR, is a callback function in microcontroller firmware, an operating system or a device driver, whose execution is triggered by the reception of an interrupt. In general, interrupts and their handlers are used to handle highpriority conditions that require the interruption of the current code the processor is executing.[1][2] Interrupt handlers have a multitude of functions, which vary based on the reason the interrupt was generated and the speed at which the interrupt handler completes its task. For example, pressing a key on a computer key3.1.7 References board,[1] or moving the mouse, triggers interrupts that call [1] Jonathan Corbet; Alessandro Rubini; Greg Kroah- interrupt handlers which read the key, or the mouse’s poHartman (2005). "Linux Device Drivers, Third Edition, sition, and copy the associated information into the comChapter 10. Interrupt Handling” (PDF). O'Reilly Media. puter’s memory.[2] • Time-triggered system p. 269. Retrieved December 25, 2014. Then it’s just a matter of cleaning up, running software interrupts, and getting back to regular work. The “regular work” may well have changed as a result of an interrupt (the handler could wake_up a process, for example), so the last thing that happens on return from an interrupt is a possible rescheduling of the processor. [2] “Hardware interrupts”. Retrieved 2014-02-09. An interrupt handler is a low-level counterpart of event handlers. These handlers are initiated by either hardware interrupts or interrupt instructions in software, and are used for servicing hardware devices and transitions between protected modes of operation such as system calls. 3.2.1 Overview [3] “Basics of Interrupts”. Retrieved 2010-11-11. In several operating systems—Linux, Unix, Mac OS X, Microsoft Windows, z/OS, and some other operating systems used in the past—interrupt handlers are divided into two parts: the First-Level Interrupt Han[5] Tom Herbert; Willem de Bruijn (May 9, 2014). dler (FLIH) and the Second-Level Interrupt Handlers “Documentation/networking/scaling.txt”. Linux kernel (SLIH). FLIHs are also known as hard interrupt handlers documentation. kernel.org. Retrieved November 16, or fast interrupt handlers, and SLIHs are also known as 2014. slow/soft interrupt handlers, Deferred Procedure Call. [4] “Eliminating receive livelock in an interrupt-driven kernel”. doi:10.1145/263326.263335. Retrieved 2010-1111. 3.3. INTERRUPT REQUEST (PC ARCHITECTURE) 49 A FLIH implements at minimum platform-specific inter• Red zone rupt handling similar to interrupt routines. In response to an interrupt, there is a context switch, and the code for the interrupt is loaded and executed. The job of a FLIH 3.2.3 References is to quickly service the interrupt, or to record platformspecific critical information which is only available at the [1] “The Linux Kernel Module Programming Guide, Chapter 12. Interrupt Handlers”. The Linux Documentation time of the interrupt, and schedule the execution of a Project. May 18, 2007. Retrieved February 20, 2015. [2] SLIH for further long-lived interrupt handling. FLIHs cause jitter in process execution. FLIHs also mask [2] Jonathan Corbet; Alessandro Rubini; Greg KroahHartman (January 27, 2005). “Linux Device Drivers, interrupts. Reducing the jitter is most important for realChapter 10. Interrupt Handling” (PDF). O'Reilly Media. time operating systems, since they must maintain a guarRetrieved February 20, 2015. antee that execution of specific code will complete within an agreed amount of time. To reduce jitter and to reduce the potential for losing data from masked interrupts, programmers attempt to minimize the execution time of a 3.3 Interrupt request (PC architecFLIH, moving as much as possible to the SLIH. With the ture) speed of modern computers, FLIHs may implement all device and platform-dependent handling, and use a SLIH In a computer, an interrupt request (or IRQ) is a hardfor further platform-independent long-lived handling. ware signal sent to the processor that temporarily stops FLIHs which service hardware typically mask their asso- a running program and allows a special program, an ciated interrupt (or keep it masked as the case may be) interrupt handler, to run instead. Hardware interrupts until they complete their execution. An (unusual) FLIH are used to handle events such as receiving data from a which unmasks its associated interrupt before it com- modem or network card, key presses, or mouse movepletes is called a reentrant interrupt handler. Reentrant ments. interrupt handlers might cause a stack overflow from multiple preemptions by the same interrupt vector, and so Interrupt lines are often identified by an index with the they are usually avoided. In a priority interrupt system, format of IRQ followed by a number. For example, on the FLIH also (briefly) masks other interrupts of equal or the Intel 8259 family of PICs there are eight interrupt inputs commonly referred to as IRQ0 through IRQ7. In lesser priority. x86 based computer systems that use two of these PICs, A SLIH completes long interrupt processing tasks simi- the combined set of lines are referred to as IRQ0 through larly to a process. SLIHs either have a dedicated kernel IRQ15. Technically these lines are named IR0 through thread for each handler, or are executed by a pool of ker- IR7, and the lines on the ISA bus to which they were hisnel worker threads. These threads sit on a run queue in torically attached are named IRQ0 through IRQ15 the operating system until processor time is available for them to perform processing for the interrupt. SLIHs may Newer x86 systems integrate an Advanced Prohave a long-lived execution time, and thus are typically grammable Interrupt Controller (APIC) that conforms to the Intel APIC Architecture. These APICs support a scheduled similarly to threads and processes. programming interface for up to 255 physical hardware In Linux, FLIHs are called upper half, and SLIHs are IRQ lines per APIC, with a typical system implementing called lower half or bottom half. This is different from support for only around 24 total hardware lines. naming used in other Unix-like systems, where both are a part of bottom half.[1][2] 3.3.1 Overview 3.2.2 • • • • See also When working with personal computer hardware, installing and removing devices, the system relies on interAdvanced Programmable Interrupt Controller rupt requests. There are default settings that are config(APIC) ured in the system BIOS and recognized by the operating system. These default settings can be altered by advanced Inter-processor interrupt (IPI) users. Modern plug and play technology has not only reduced the need for concern for these settings, but has also Interrupt latency virtually eliminated manual configuration. Interrupts in 65xx processors • IRQL (Windows) • Non-maskable interrupt (NMI) • Programmable Interrupt Controller (PIC) 3.3.2 x86 IRQs Typically, on systems using the Intel 8259, 16 IRQs are used. IRQs 0 to 7 are managed by one Intel 8259 PIC, and 50 CHAPTER 3. INTERRUPTS AND INTERRUPT HANDLING IRQs 8 to 15 by a second Intel 8259 PIC. The first PIC, the master, is the only one that directly signals the CPU. The second PIC, the slave, instead signals to the master on its IRQ 2 line, and the master passes the signal on to the CPU. There are therefore only 15 interrupt request lines available for hardware. • IRQ 11 – The Interrupt is left open for the use of peripherals (open interrupt/available, SCSI or NIC) • IRQ 12 – mouse on PS/2 connector • IRQ 13 – CPU co-processor or integrated floating point unit or inter-processor interrupt (use depends on OS) On newer systems using the Intel APIC Architecture, typically there are 24 IRQs available, and the extra 8 IRQs • IRQ 14 – primary ATA channel are used to route PCI interrupts, avoiding conflict between dynamically configured PCI interrupts and stati• IRQ 15 – secondary ATA channel (ATA interface cally configured ISA interrupts. On early APIC systems usually serves hard disks and CD drives) with only 16 IRQs or with only Intel 8259 interrupt controllers, PCI interrupt lines were routed to the 16 IRQs using a PIR integrated into the southbridge. 3.3.3 Conflicts The easiest way of viewing this information on Microsoft Windows is to use Device Manager or System Information (msinfo32.exe). On Linux, IRQ mappings can be viewed by executing cat /proc/interrupts or using the procinfo utility. Master PIC • IRQ 0 – system timer (cannot be changed) • IRQ 1 – keyboard controller (cannot be changed) • IRQ 2 – cascaded signals from IRQs 8–15 (any devices configured to use IRQ 2 will actually be using IRQ 9) • IRQ 3 – serial port controller for serial port 2 (shared with serial port 4, if present) • IRQ 4 – serial port controller for serial port 1 (shared with serial port 3, if present) • IRQ 5 – parallel port 2 and 3 or sound card • IRQ 6 – floppy disk controller • IRQ 7 – parallel port 1. It is used for printers or for any parallel port if a printer is not present. It can also be potentially be shared with a secondary sound card with careful management of the port. Slave PIC • IRQ 8 – real-time clock (RTC) • IRQ 9 – Advanced Configuration and Power Interface system control interrupt on Intel chipsets.[1] Other chipset manufacturers might use another interrupt for this purpose, or make it available for the use of peripherals (any devices configured to use IRQ 2 will actually be using IRQ 9) • IRQ 10 – The Interrupt is left open for the use of peripherals (open interrupt/available, SCSI or NIC) In early IBM-compatible personal computers, an IRQ conflict is a once common hardware error, received when two devices were trying to use the same interrupt request (or IRQ) to signal an interrupt to the Programmable Interrupt Controller (PIC). The PIC expects interrupt requests from only one device per line, thus more than one device sending IRQ signals along the same line will generally cause an IRQ conflict that can freeze a computer. For example, if a modem expansion card is added into a system and assigned to IRQ4, which is traditionally assigned to the serial port 1, it will likely cause an IRQ conflict. Initially, IRQ 7 was a common choice for the use of a sound card, but later IRQ 5 was used when it was found that IRQ 7 would interfere with the printer port (LPT1). The serial ports are frequently disabled to free an IRQ line for another device. IRQ 2/9 is the traditional interrupt line for an MPU-401 MIDI port, but this conflicts with the ACPI system control interrupt (SCI is hardwired to IRQ9 on Intel chipsets);[1] this means ISA MPU-401 cards with a hardwired IRQ 2/9, and MPU401 device drivers with a hardcoded IRQ 2/9, cannot be used in interrupt-driven mode on a system with ACPI enabled. In some rare conditions, two devices could share the same IRQ as long as they were not used simultaneously. To solve this problem, the later PCI bus specification allows for IRQ sharing, with the additional support for Message Signaled Interrupts (MSI) in its later revisions. PCI Express does not have physical interrupt lines at all, and uses MSI exclusively. 3.3.4 See also • Advanced Programmable Interrupt Controller (APIC) • Programmable Interrupt Controller (PIC) • Intel 8259 • Interrupt handler • Input/Output Base Address 3.4. NON-MASKABLE INTERRUPT • Plug and play • Polling • Interrupt 3.3.5 References [1] Oshins, Jake (December 30, 2001). “RE: ACPI Machines and IRQ 9 [was: Communicating with the NT developers]". Retrieved April 17, 2014. 51 In modern architectures, NMIs are typically used to handle non-recoverable errors which need immediate attention. Therefore, such interrupts should not be masked in the normal operation of the system. These errors include non-recoverable internal system chipset errors, corruption in system memory such as parity and ECC errors, and data corruption detected on system and peripheral buses. On some systems, an NMI can be triggered by the computer’s user through hardware and software debugging interfaces and system reset buttons. Debugging NMIs are typically used to diagnose and fix faulty code. In such cases an NMI is used to execute an 3.3.6 Further reading interrupt handler that transfers control to a special moni• Gilluwe, Frank van. The Undocumented PC, Second tor program. From this program a developer can inspect Edition, Addison-Wesley Developers Press, 1997. the machine’s memory, and examine the internal state of the program at the instant of its interruption. This also alISBN 0-201-47950-8 lows computers which appear to be hung to be debugged • Shanley, Tom. ISA System Architecture, Third Edi- or diagnosed. tion, Addison-Wesley Publishing Company, 1995. ISBN 0-201-40996-8 3.4.2 History • Solari, Edward. PCI & PCI-X Hardware and Software Architecture & Design, Sixth Edition, Research In older architectures, NMIs were used for interrupts Tech Inc., 2004. ISBN 0-9760865-0-6 which were typically never disabled because of the required response time. They were hidden signals. Exam• IRQ interrupt request ples include the floppy disk controller on the Amstrad PCW, the 8087 coprocessor on the x86 when used in • Expansion Bus Configuration the IBM PC or its compatibles (even though Intel recommended connecting it to a normal interrupt[1] ), and the Low Battery signal on the HP 95LX. 3.3.7 External links • IA-32 Intel Architecture Software Developer’s Manual, Volume 3A: System Programming Guide, Part 1 – more information on the Intel 8259 PIC and its IRQ lines • Ralf Brown’s Interrupt List 3.4 Non-maskable interrupt A non-maskable interrupt (NMI) is a hardware interrupt that cannot be ignored by standard interrupt masking techniques in the system. It is typically used to signal attention for non-recoverable hardware errors. (Some NMIs may be masked, but only by using proprietary methods specific to the particular NMI.) 3.4.1 Overview An NMI is often used when response time is critical or when an interrupt should never be disabled during normal system operation. Such uses include reporting nonrecoverable hardware errors, system debugging and profiling, and handling of special cases like system resets. In the original IBM PC, an NMI was triggered if a parity error was detected in system memory, or reported by an external device. In either case, the PC would display an error message and halt. Some later PC clones used an NMI to conceal the hardware differences from that of a standard PC. On such computers, an NMI would be generated when a program attempted to access incompatible hardware. A BIOS interrupt handler would then translate the program’s request to match the hardware that was actually present. The SMM in the 386SL is a better way to do this. Some 8-bit home computers used the NMI line to permit a “warm start” if the system had locked up. Typically, this would restore the control registers to known good values stored in ROM, without destroying whatever data that the user might currently have loaded. On the Commodore 8-bit machines, the RESTORE key was hooked up directly to the NMI line on the 6510 CPU, but the reset would take place only if RUN/STOP was also being held down when RESTORE was struck (this combination being the Commodore version of a three finger salute). Commodore also connected the MOS Technology 6526 CIA #2 in the C64 and C128 to the processor’s NMI line, which was part of the means by which software emulation of the 6551 ACIA was accomplished. Atari's 8-bit line used a SYSTEM RESET button for this same 52 CHAPTER 3. INTERRUPTS AND INTERRUPT HANDLING purpose. [2] “How to generate a complete crash dump file or a kernel crash dump file by using an NMI on a Windows-based system”. Microsoft. 2011-06-08. Retrieved 2013-08-31. Debugging NMIs have appeared in a number of forms, including the Apple Macintosh's “programmers’ button”, and certain key combinations on SUN workstations. With [3] “PCI Dump Switch Card”. Connect Tech Inc. Retrieved 2013-08-31. the introduction of Windows 2000, Microsoft allowed the use of an NMI to cause a system to either break into a debugger, or dump the contents of memory to disk and 3.4.5 External links reboot.[2] Debugging NMIs have also been used by devices that allow leisure users and gamers to manipulate running programs. Devices which added a button to generate an NMI, such as Romantic Robot’s Multiface, were a popular accessory for 1980s 8-bit and 16-bit home computers. These peripherals had a small amount of ROM and an NMI button. Pressing the button transferred control to the software in the peripheral’s ROM, allowing the suspended program to be saved to disk (very useful for tape-based games with no disk support, but also for saving games in progress), screenshots to be saved or printed, or values in memory to be manipulated—a cheating technique to acquire extra lives, for example. Not all computers provide a mechanism for triggering NMIs; however, many machines (typically rackmount servers) provide a physical button specifically for this purpose. Other machines may expose this functionality via an expansion card.[3] Miles Gordon Technology's DISCiPLE and +D products for the ZX Spectrum featured an NMI-producing “magic button”. On the Nintendo Entertainment System, an NMI is generated during each vertical blanking interval. Because these NMIs (often referred to as “vblank interrupts”) occur at frequent, regular intervals, code that manipulates game graphics and audio is often executed inside of the NMI handler routine. Clearing the 7th bit of the PPU’s $2000 register disables vblank interrupts, and setting it enables them. 3.4.3 See also • Advanced Programmable Interrupt Controller (APIC) • Inter-processor interrupt (IPI) • Interrupt • Interrupt handler • Interrupt latency • Programmable Interrupt Controller (PIC) 3.4.4 Notes [1] “8.7.2: MS-DOS* Compatibility Sub-mode”. Intel® 64 and IA-32 Architectures Software Developer’s Manual 1. Intel Corporation. June 2013. p. 8–31. • “Dump Switch Support for Windows”. Microsoft Developer Network. 2001-12-04. Retrieved 201308-31. • “CGA Mode CRTC initialization”. Amstrad PPC Technical Manual. seasip.info. Retrieved 2013-0831. Chapter 4 User Interfaces 4.1 Programmable Interrupt Con- 4.1.2 Well-known types troller One of the best known PICs, the 8259A, was included in the x86 PC. In modern times, this is not included as a separate chip in an x86 PC, but rather as part of the motherboard’s southbridge chipset. In other cases, it has been replaced by the newer Advanced Programmable InIn computing, a programmable interrupt controller terrupt Controllers which support more interrupt outputs (PIC) is a device that is used to combine several sources and more flexible priority schemas. of interrupt onto one or more CPU lines, while allowing priority levels to be assigned to its interrupt outputs. When the device has multiple interrupt outputs to assert, 4.1.3 More information it asserts them in the order of their relative priority. Common modes of a PIC include hard priorities, rotating pri- More information on the Intel APIC can be found in orities, and cascading priorities. PICs often allow the cas- the IA-32 Intel Architecture Software Developer’s Manual, cading of their outputs to inputs between each other. Volume 3A: System Programming Guide, Part 1, Chapter Not to be confused with PIC microcontroller. 10, freely available on the Intel website. 4.1.1 4.1.4 See also Common features • Intel 8259 PICs typically have a common set of registers: Interrupt Request Register (IRR), In-Service Register (ISR), Interrupt Mask Register (IMR). The IRR specifies which interrupts are pending acknowledgement, and is typically a symbolic register which can not be directly accessed. The ISR register specifies which interrupts have been acknowledged, but are still waiting for an End Of Interrupt (EOI). The IMR specifies which interrupts are to be ignored and not acknowledged. A simple register schema such as this allows up to two distinct interrupt requests to be outstanding at one time, one waiting for acknowledgement, and one waiting for EOI. • Advanced Programmable Interrupt Controller (APIC) There are a number of common priority schemas in PICs including hard priorities, specific priorities, and rotating priorities. • Interrupt latency • OpenPIC and IBM MPIC • Inter-processor interrupt (IPI) • Interrupt • Interrupt handler • Interrupt request (IRQ) • Non-maskable interrupt (NMI) Interrupts may be either edge triggered or level triggered. There are a number of common ways of acknowledging 4.1.5 External links an interrupt has completed when an EOI is issued. These include specifying which interrupt completed, using an • IA-32 Intel Architecture Software Developer’s implied interrupt which has completed (usually the highManual, Volume 3A est priority pending in the ISR), and treating interrupt ac• Interrupt controller and associated registers. knowledgement as the EOI. 53 54 CHAPTER 4. USER INTERFACES 4.2 Command-line interface Not to be confused with Text-based user interface. A command-line interface or command lan- Screenshot of a sample bash session in GNOME Terminal 3, Fedora 15 Screenshot of Windows PowerShell 1.0, running on Windows Vista they often provide a more concise and powerful means to control a program or operating system. Programs with command-line interfaces are generally easier to automate via scripting. Alternatives to the command line include, but are not limited to text user interface menus (see IBM AIX SMIT for example), keyboard shortcuts, and various other desktop metaphors centered on the pointer (usually controlled with a mouse). 4.2.1 Operating system command-line interfaces Screenshot of Apple Computer's CommandShell in A/UX 3.0.1 guage interpreter (CLI), also known as command-line user interface, console user interface,[1] and character user interface (CUI), is a means of interacting with a computer program where the user (or client) issues commands to the program in the form of successive lines of text (command lines). The CLI was the primary means of interaction with most computer systems until the introduction of the video display terminal in the mid-1960s, and continued to be used throughout the 1970s and 1980s on OpenVMS, Unix systems and personal computer systems including MS-DOS, CP/M and Apple DOS. The interface is usually implemented with a command line shell, which is a program that accepts commands as text input and converts commands to appropriate operating system functions. Command-line interfaces to computer operating systems are less widely used by casual computer users, who favor graphical user interfaces. Command-line interfaces are often preferred by more advanced computer users, as Operating system (OS) command line interfaces are usually distinct programs supplied with the operating system. A program that implements such a text interface is often called a command-line interpreter, command processor or shell. The term 'shell', often used to describe a command-line interpreter, can be in principle any program that constitutes the user-interface, including fully graphically oriented ones—for example, the default Windows GUI is created by a shell program named EXPLORER.EXE, as defined in the SHELL=EXPLORER.EXE line in the WIN.INI configuration file. Examples of command-line interpreters include DEC’s DIGITAL Command Language (DCL) in OpenVMS and RSX-11, the various Unix shells (sh, ksh, csh, tcsh, bash, etc.), the historical CP/M CCP, and MS-DOS/IBMDOS/DR-DOS's COMMAND.COM, as well as the OS/2 and the Windows CMD.EXE programs, the latter groups being based heavily on DEC’s RSX-11 and RSTS CLIs. Under most operating systems, it is possible to replace 4.2. COMMAND-LINE INTERFACE 55 the default shell program with alternatives; examples in- The early Sierra games, like the first three King’s Quest clude 4DOS for DOS, 4OS2 for OS/2, and 4NT or Take games (1984–1986), used commands from an interCommand for Windows. nal command line to move the character around in the graphic window. 4.2.2 Application command-line interfaces Application programs (as opposed to operating systems) 4.2.3 History may also have command line interfaces. The command-line interface evolved from a form of diAn application program may support none, any, or all of alog once conducted by humans over teleprinter (TTY) these three major types of command line interface mech- machines, in which human operators remotely exchanged anisms: information, usually one line of text at a time. Early computer systems often used teleprinter machines as the 1. Parameters: Most operating systems support a means of interaction with a human operator. The commeans to pass additional information to a program puter became one end of the human-to-human teleprinter when it is launched. When a program is launched model. So instead of a human communicating with anfrom an OS command line shell, additional text pro- other human over a teleprinter, a human communicated vided along with the program name is passed to the with a computer. launched program. In time, the actual mechanical teleprinter was replaced 2. Interactive command line sessions: After launch, by a “glass tty” (keyboard and screen, but emulating a program may provide an operator with an inde- the teleprinter), and then by a “smart” terminal (where pendent means to enter commands in the form of a microprocessor in the terminal could address all of text. the screen, rather than only print successive lines). As the microcomputer revolution replaced the traditional – 3. OS inter-process communication: Most operatminicomputer + terminals – time sharing architecture, ing systems support means of inter-process commuhardware terminals were replaced by terminal emulanication (for example; standard streams or named tors — PC software that interpreted terminal signals sent pipes). Command lines from client processes may through the PC’s serial ports. These were typically used be redirected to a CLI program by one of these to interface an organization’s new PC’s with their existing methods. mini- or mainframe computers, or to connect PC to PC. Some of these PCs were running Bulletin Board System software. CLI software Early operating system CLIs were implemented as part Some applications support only a CLI, presenting a CLI of resident monitor programs, and could not easily be reprompt to the user and acting upon command lines as they placed. The concept of implementing the shell as a reare entered. Some examples of CLI-only applications are: placeable component is usually attributed to Multics.[2] • DEBUG • Diskpart • Ed • Edlin • Fdisk • Ping Hybrid software Early microcomputers themselves were based on a command-line interface such as CP/M, MS-DOS or AppleSoft BASIC. Throughout the 1980s and 1990s— especially after the introduction of the Apple Macintosh and Microsoft Windows—command line interfaces were replaced in popular usage by the Graphical User Interface. The command line remains in use, however, by system administrators and other advanced users for system administration, computer programming, and batch processing. In November 2006, Microsoft released version 1.0 of Windows PowerShell (formerly codenamed Monad), which combined features of traditional Unix shells with their proprietary object-oriented .NET Framework. MinGW and Cygwin are open-source packages for Windows that offer a Unix-like CLI. Microsoft provides MKS Inc.'s ksh implementation MKS Korn shell for Windows through their Services for UNIX add-on. Some computer programs support both a CLI and a GUI. In some cases, a GUI is simply a wrapper around a separate CLI executable file. In other cases, a program may provide a CLI as an optional alternative to its GUI. Both interfaces do not always offer similar functionality. For example, MATLAB, a numerical analysis computer program, provides no GUI for some calculations, but the CLI Since 2001, the Macintosh operating system is based on a variation of Unix called Darwin. On these computcan handle any calculation MATLAB supports. 56 CHAPTER 4. USER INTERFACES ers, users can access a Unix-like command-line interface called Terminal found in the Applications Utilities folder. This terminal uses bash by default. 3. External — External executable files not part of the basic OS, but added by other parties for specific purposes and applications. • param1 ...paramN — Optional parameters provided by the client. The format and meaning of the parameters depends upon the command issued. In the case of Included or External commands, the values of the parameters are delivered to the program (specified by the Command) as it is launched by the OS. Parameters may be either Arguments or Options. In this example, the delimiters between command line elements are whitespace characters and the end-of-line delimiter is the newline delimiter. This is a widely used (but not universal) convention for command-line interfaces. Screenshot of the MATLAB 7.4 command-line interface and GUI 4.2.4 Usage A CLI can generally be considered as consisting of syntax and semantics. The syntax is the grammar that all commands must follow. In the case of operating systems (OS), MS-DOS and Unix each define their own set of rules that all commands must follow. In the case of embedded systems, each vendor, such as Nortel, Juniper Networks or Cisco Systems, defines their own proprietary set of rules that all commands within their CLI conform to. These rules also dictate how a user navigates through the system of commands. The semantics define what sort of operations are possible, on what sort of data these operations can be performed, and how the grammar represents these operations and data—the symbolic meaning in the syntax. A CLI is used whenever a large vocabulary of commands or queries, coupled with a wide (or arbitrary) range of options, can be entered more rapidly as text than with a pure GUI. This is typically the case with operating system command shells. CLIs are also used by systems with insufficient resources to support a graphical user interface. Some computer language systems (such as Python, Forth, LISP, Rexx, and many dialects of BASIC) provide an interactive command-line mode to allow for rapid evaluaTwo different CLIs may agree on either syntax or semantion of code. tics, but it is only when they agree on both that they can be CLIs are often used by programmers and system ad- considered sufficiently similar to allow users to use both ministrators, in engineering and scientific environments, CLIs without needing to learn anything, as well as to enand by technically advanced personal computer users. able re-use of scripts. CLIs are also popular among people with visual disabilA simple CLI will display a prompt, accept a “command ity, since the commands and responses can be displayed line” typed by the user terminated by the Enter key, then using Refreshable Braille displays. execute the specified command and provide textual display of results or error messages. Advanced CLIs will validate, interpret and parameter-expand the command line 4.2.5 Anatomy of a shell CLI before executing the specified command, and optionally [3] capture or redirect its output. The general pattern of an OS command line interface [4] is: Prompt command param1 param2 param3 ... paramN • Prompt - generated by the program to provide context for the client. • Command — provided by the client. Commands are usually one of three classes: 1. Internal — recognized and processed by the command line interpreter itself and not dependent upon any external executable file. Unlike a button or menu item in a GUI, a command line is typically self-documenting, stating exactly what the user wants done. In addition, command lines usually include many defaults that can be changed to customize the results. Useful command lines can be saved by assigning a character string or alias to represent the full command, or several commands can be grouped to perform a more complex sequence – for instance, compile the program, install it, and run it — creating a single entity, called a command procedure or script which itself can be treated as a command. These advantages mean that a user must figure out a complex command or series of commands only once, because they can be saved, to be used again. 2. Included — A separate executable file generally considered part of the operating environ- The commands given to a CLI shell are often in one of ment and always included with the OS. the following forms: 4.2. COMMAND-LINE INTERFACE • doSomething how toFiles • doSomething how sourceFile destinationFile • doSomething how < inputFile > outputFile • doSomething how | doSomething how | doSomething how > outputFile 57 A command prompt (or just prompt) is a sequence of (one or more) characters used in a command-line interface to indicate readiness to accept commands. Its intent is to literally prompt the user to take action. A prompt usually ends with one of the characters $, %, #, :, > and often includes other information, such as the path of the current working directory. On many Unix system and derivative systems, it is common for the prompt to end in a $ or % character if the where doSomething is, in effect, a verb, how an adverb (for user is a normal user, but in a # character if the user is a example, should the command be executed “verbosely” or superuser (“root” in Unix terminology). “quietly”) and toFiles an object or objects (typically one or more files) on which the command should act. The It is common for prompts to be modifiable by the user. > in the third example is a redirection operator, telling Depending on the environment, they may include colors, the command-line interpreter to send the output of the special characters, and other elements like variables and command not to its own standard output (the screen) but functions for the current time, user, shell number or workto the named file. This will overwrite the file. Using >> ing directory, in order, for instance, to make the prompt will redirect the output and append it to the file. Another more informative or visually pleasing, to distinguish sesredirection operator is the vertical bar (|), which creates a sions on various machines, or to indicate the current level pipeline where the output of one command becomes the of nesting of commands. On some systems, special tokens in the definition of the prompt can be used to cause input to the next command. external programs to be called by the command-line interpreter while displaying the prompt. CLI and resource protection In DOS’s COMMAND.COM and in the Windows NT’s command-line interpreter cmd.exe the prompt is modOne can modify the set of available commands by modi- ifiable by issuing a prompt command or by directly fying which paths appear in the PATH environment vari- changing the value of the corresponding %PROMPT% able. Under Unix, commands also need be marked as environment variable. The default of most modern sysexecutable files. The directories in the path variable are tems, the C:\> style is obtained, for instance, with prompt searched in the order they are given. By re-ordering the $P$G. The default of older DOS systems, C> is obtained path, one can run e.g. \OS2\MDOS\E.EXE instead of by just prompt, although on some systems this produces \OS2\E.EXE, when the default is the opposite. Renam- the newer C:\> style, unless used on floppy drives A: or B:; ing of the executables also works: people often rename on those systems prompt $N$G can be used to override their favourite editor to EDIT, for example. the automatic default and explicitly switch to the older The command line allows one to restrict available com- style. mands, such as access to advanced internal commands. On many Unix systems, the $PS1 variable can be used, The Windows CMD.EXE does this. Often, shareware although other variables also may have an impact on the programs will limit the range of commands, including prompt (depending on what shell is being used). In the printing a command 'your administrator has disabled run- bash shell, a prompt of the form: ning batch files’ from the prompt. [time] user@host: work_dir $ Some CLIs, such as those in network routers, have a hierarchy of modes, with a different set of commands supported in each mode. The set of commands are grouped could be set by issuing the command by association with security, system, interface, etc. In export PS1='[\t] \u@\H: \W $' these systems the user might traverse through a series of sub-modes. For example, if the CLI had two modes called interface and system, the user might use the com- In zsh the $RPROMPT variable controls an optional mand interface to enter the interface mode. At this point, “prompt” on the right hand side of the display. It is not commands from the system mode may not be accessible a real prompt in that the location of text entry does not and the user exits the interface mode and enters the sys- change. It is used to display information on the same line as the prompt, but right justified. tem mode. In RISC OS, the command prompt is a * symbol, and thus (OS)CLI commands are often referred to as “star Command prompt commands”.[5] It is also possible to access the same commands from other command lines (such as the BBC BA“Command prompt” redirects here. For the Windows SIC command line), by preceding the command with a component named Command Prompt, see cmd.exe. *. 58 CHAPTER 4. USER INTERFACES Arguments COMMAND FILESPEC SWITCHES C:\work>dir e:\photo\*.jpg/os/s/p PROMPT COMMAND LINE An MS DOS command line, illustrating parsing into command and arguments Abbreviating commands In Multics, command-line options and subsystem keywords may be abbreviated. This idea appears to derive from the PL/I programming language, with its shortened keywords (e.g., STRG for STRINGRANGE and DCL for DECLARE). For example, in the Multics “forum” subsystem, the -long_subject parameter can be abbreviated -lgsj. It is also common for Multics commands to be abbreviated, typically corresponding to the initial letters of the words that are strung together with underscores to form command names, such as the use of did for delete_iacl_dir. A command-line argument or parameter is an item of information provided to a program when it is started. A program can have many command-line arguments that identify sources or destinations of information, or that alter the operation of the program. In some other systems abbreviations are automatic, such as permitting enough of the first characters of a command name to uniquely identify it (such as SU as an abbreviation for SUPERUSER) while others may have some specific abbreviations pre-programmed (e.g. MD When a command processor is active a program is typi- for MKDIR in COMMAND.COM) or user-defined via cally invoked by typing its name followed by command- batch scripts and aliases (e.g. alias md mkdir in tcsh). line arguments (if any). For example, in Unix and Unix- See also: Tab completion. like environments, an example of a command-line argument is: Option conventions in DOS, Windows, OS/2 On rm file.s DOS, OS/2 and Windows, different programs called from their COMMAND.COM or CMD.EXE (or inter“file.s” is a command-line argument which tells the pro- nal their commands) may use different syntax within the same operating system. For example: gram rm to remove the file “file.s”. Some programming languages, such as C, C++ and Java, allow a program to interpret the command-line arguments by handling them as string parameters in the main function. Other languages, such as Python, expose these arguments as global variables. In Unix-like operating systems, a single hyphen-minus by itself is usually a special value specifying that a program should handle data coming from the standard input or send data to the standard output. Command-line option A command-line option or simply option (also known as a flag or switch) modifies the operation of a command; the effect is determined by the command’s program. Options follow the command name on the command line, separated by spaces. A space before the first option is not always required, for example Dir/? and DIR /? have the same effect in DOS (list the DIR command’s options) whereas dir --help (in many versions of Unix) does require the option to be preceded by at least one space (and is case-sensitive). The format of options varies widely between operating systems. In most cases the syntax is by convention rather than an operating system requirement; the entire command line is simply a string passed to a program, which can process it in any way the programmer wants, so long as the interpreter can tell where the command name ends and its arguments and options begin. A few representative samples of command-line options, all relating to listing files in a directory, to illustrate some conventions: • Options may be indicated by either of the “switch characters": -, /, or either may be allowed. See below. • They may or may not be case-sensitive. • Sometimes options and their arguments are run together, sometimes separated by whitespace, and sometimes by a character, typically : or =; thus Prog -fFilename, Prog -f Filename, Prog -f:Filename, Prog -f=Filename. • Some programs allow single-character options to be combined; others do not. The switch -fA may mean the same as -f -A, or it may be incorrect, or it may even be a valid but different parameter. In DOS, OS/2 and Windows, the forward slash (/) is most prevalent, although the hyphen-minus is also sometimes used. In many versions of DOS (MS-DOS/PC DOS 2.xx and higher, all versions of DR-DOS since 5.0, as well as PTS-DOS, Embedded DOS, FreeDOS and RxDOS) the switch character (sometimes abbreviated switchar or switchchar) to be used is defined by a value returned from a system call (INT 21h/AH=37h). The default character returned by this API is /, but can be changed to a hyphen-minus on the above-mentioned systems, except for Datalight ROM-DOS and MS-DOS/PC DOS 5.0 and higher, which always return / from this call (unless one of many available TSRs to reenable the SwitChar feature is loaded). In some of these systems (MS-DOS/PC DOS 2.xx, DOS Plus 2.1, DR-DOS 4.2. COMMAND-LINE INTERFACE 7.02 and higher, PTS-DOS, Embedded DOS, FreeDOS and RxDOS), the setting can also be pre-configured by a SWITCHAR directive in CONFIG.SYS. Embedded DOS provides a SWITCH command for the same purpose, whereas 4DOS allows the setting to be changed via SETDOS /W:n. Under DR-DOS, if the setting has been changed from /, the first directory separator \ in the display of the PROMPT parameter $G will change to a forward slash / (which is also a valid directory separator in DOS, FlexOS, 4680 OS, 4690 OS, OS/2 and Windows) thereby serving as a visual clue to indicate the change. Some versions of DR-DOS COMMAND.COM also support a PROMPT token $/ to display the current setting. COMMAND.COM since DR-DOS 7.02 and 4DOS also provide a pseudo-environment variable named %/% to allow portable batchjobs to be written. Several external DR-DOS commands additionally support an environment variable %SWITCHAR% to override the system setting. However, many programs are hardwired to use / only, rather than retrieving the switch setting before parsing command line arguments. A very small number, mainly ports from Unix-like systems, are programmed to accept "-" even if the switch character is not set to it (for example netstat and ping, supplied with Windows, will accept the /? option to list available options, and yet the list will specify the "-" convention). 59 Conversational Monitor System (CMS) uses a single left parenthesis to separate options at the end of the command from the other arguments. For example, in the following command the options indicate that the target file should be replaced if it exists, and the date and time of the source file sholuld be retained on the copy: COPY source file a target file b (REPLACE OLDDATE Data General's CLI under their RDOS, AOS, etc. operating systems, as well as the version of CLI that came with their Business Basic, uses only / as the switch character, is case-insensitive, and allows “local switches” on some arguments to control the way they are interpreted, such as MAC/U LIB/S A B C $LPT/L has the global option “U” to the macro assembler command to appemd user symbols, but two local switches, one to specify LIB should be skipped on pass 2 and the other to direct listing to the printer, $LPT. Built-in usage help See also: help (command) One of the criticisms of a CLI is the lack of cues to the user as to the available actions. In contrast, GUIs usually inform the user of available actions with menus, icons, or other visual cues. To overcome this limitation, many CLI programs display a brief summary of its valid parameters, Option conventions in Unix-like systems In Unixtypically when invoked with no arguments or one of ?, -?, like systems, the ASCII hyphen-minus begins options; the -h, -H, /?, /h, /H, -help, or --help. new (and GNU) convention is to use two hyphens then a word (e.g. --create) to identify the option’s use while However, entering a program name without parameters in the old convention (and still available as an option for the hope that it will display usage help can be hazardous, frequently-used options) is to use one hyphen then one as some programs and scripts execute without further noletter (e.g. -c); if one hyphen is followed by two or more tice. letters it may mean two options are being specified, or it Although desirable at least for the help parameter, promay mean the second and subsequent letters are a param- grams may not support all option lead-in characters exeter (such as filename or date) for the first option. emplified above. Under DOS, where the default command line option character can be changed from / to -, programs may query the SwitChar API in order to determine the current setting. So, if a program is not hardwired to support them all, a user may need to know the current setting even to be able to reliably request help. If the SwitChar has been changed to - and therefore the / character is accepted as alternative path delimiter also at the DOS command line, programs may misinterpret options like /h or /H as paths rather than help parameters. However, if given as first or only parameter, most DOS programs will, by convention, accept it as request for help Unix command names, arguments and options are caseregardless of the current SwitChar setting. sensitive (except in a few examples, mainly where popular commands from other operating systems have been In some cases, different levels of help can be selected for a program. Some programs supporting this allow to give ported to Unix). a verbosity level as an optional argument to the help parameter (as in /H:1, /H:2, etc.) or they give just a short Options conventions in other systems FlexOS, 4680 help on help parameters with question mark and a longer OS and 4690 OS use −. help screen for the other help options. Two hyphen-minus characters without following letters (-) may indicate that the remaining arguments should not be treated as options, which is useful for example if a file name itself begins with a hyphen, or if further arguments are meant for an inner command (e.g. sudo). Double hyphen-minuses are also sometimes used to prefix “long options” where more descriptive option names are used. This is a common feature of GNU software. The getopt function and program, and the getopts command are usually used for parsing command-line options. CP/M typically used [. Depending on the program, additional or more specific 60 CHAPTER 4. USER INTERFACES help on accepted parameters is sometimes available by either providing the parameter in question as an argument to the help parameter or vice versa (as in /H:W or in /W:? (assuming /W would be another parameter supported by the program)). In a similar fashion to the help parameter, but much less common, some programs provide additional information about themselves (like mode, status, version, author, license or contact information) when invoked with an “about” parameter like -!, /!, -about, or --about. Since the ? and ! characters typically also serve other purposes at the command line, they may not be available in all scenarios, therefore, they should not be the only options to access the corresponding help information. The space character In many areas of computing, but particularly in the command line, the space character can cause problems as it has two distinct and incompatible functions: as part of a command or parameter, or as a parameter or name separator. Ambiguity can be prevented either by prohibiting embedded spaces in file and directory names in the first place (for example, by substituting them with underscores _), or by enclosing a name with embedded spaces between quote characters or using an escape character before the space, usually a backslash (\). For example Long path/Long program name Parameter one Parameter two ... If more detailed help is necessary than provided by a program’s built-in internal help, many systems support a dedicated external "HELP command" command (or similar), is ambiguous (is “program name” part of the program which accepts a command name as calling parameter and name, or two parameters?); however will invoke an external help system. Long_path/Long_program_name ParameIn the DR-DOS family, typing /? or /H at the ter_one Parameter_two ..., COMMAND.COM prompt instead of a command itself LongPath/LongProgramName ParameterOne will display a dynamically generated list of available inParameterTwo ..., ternal commands; 4DOS and NDOS support the same feature by typing ? at the prompt (which is also accepted “Long path/Long program name” “Parameter by newer versions of DR-DOS COMMAND.COM); inone” “Parameter two” ... ternal commands can be individually disabled or reenabled via SETDOS /I. In addition to this, some newer ver- and sions of DR-DOS COMMAND.COM also accept a ?% command to display a list of available built-in pseudoLong\ path/Long\ program\ name Parameter\ environment variables. Besides their purpose as quick one Parameter\ two ... help reference this can be used in batchjobs to query the facilities of the underlying command line processor. are not ambiguous. Unix-based operating systems minimize the use of embedded spaces to minimize the need for quotes. In Microsoft Windows, one often has to use quotes because embedded spaces (such as in directory names) are common. Command description syntax Built-in usage help and man pages commonly employ a small syntax to describe the valid command form:[6][7] 4.2.6 Command-line interpreter • angle brackets for required parameters: ping <host- See also: List of command-line interpreters name> • square brackets for optional parameters: mkdir [-p] <dirname> • ellipses for repeated items: [source2...] <dest> cp <source1> • vertical bars for choice of items: netstat {-t|-u} Notice that these characters have different meanings than when used directly in the shell. Angle brackets may be omitted when confusing the parameter name with a literal string is not likely. Although most users think of the shell as an interactive command interpreter, it is really a programming language in which each statement runs a command. Because it must satisfy both the interactive and programming aspects of command execution, it is a strange language, shaped as much by history as by design. — Brian Kernighan & Rob Pike[8] The terms command-line interpreter, command line shell, command language interpreter, or identical abbreviation CLI, are applied to computer programs designed to interpret a sequence of lines of text which may 4.2. COMMAND-LINE INTERFACE 61 be entered by a user, read from a file or another kind of ented microcomputers arrived with CP/M and later MSdata stream. The context of interpretation is usually one DOS computers such as the IBM PC, the command-line of a given operating system or programming language. began to borrow some of the syntax and features of the Command-line interpreters allow users to issue various Unix shells such as globbing and piping of output. commands in a very efficient (and often terse) way. This requires the user to know the names of the commands and their parameters, and the syntax of the language that is interpreted. The command-line was first seriously challenged by the PARC GUI approach used in the 1983 Apple Lisa and the 1984 Apple Macintosh. The majority of IBM PC users did not replace their command.com shell with a GUI until [11][12] The unix #! and OS/2 EXTPROC commands facilitate Windows 95 was released in 1995. the passing of batch files to external processors. One can use this to write specific command processors for dedi- Modern usage as an operating system shell cated uses, and process external data files which reside in batch files. While most computer users now use a GUI almost exMany graphical interfaces, such as the OS/2 Presentation clusively, more advanced users have access to powerful Manager and early versions of Microsoft Windows use command-line environments: command-lines to call helper programs to open docu• The default VAX/VMS command shell, using the ments and programs. The commands are stored in the DCL language, has ben ported to Windows systems graphical shell or in files like the registry or the OS/2 at least three times, inculding PC-DCL and Acos2user.ini file. celer8 DCL Lite. MS-DOS 6.22 has been ported to Linux type systems, Unix command shells have been ported to VMS and MS-DOS/Windows 95 and Early history Windows NT types of operating systems. Command.com and Windows NT cmd.exe have been The earliest computers did not support interactive inported to Windows CE and presumably works on put/output devices, often relying on sense switches and Microsoft Windows NT Embedded 4.0 lights to communicate with the computer operator. This was adequate for batch systems that ran one program at a time, often with the programmer acting as operator. This also had the advantage of low overhead, since lights and switches could be tested and set with one machine instruction. Later a single system console was added to allow the operator to communicate with the system. From the 1960s onwards, user interaction with computers was primarily by means of command-line interfaces, initially on machines like the Teletype Model 33 ASR, but then on early CRT-based computer terminals such as the VT52. All of these devices were purely text based, with no ability to display graphic or pictures.[9] For business application programs, text-based menus were used, but for more general interaction the command line was the interface. Around 1964 Louis Pouzin introduced the concept and the name shell in Multics, building on earlier, simpler facilities in the Compatible Time-Sharing System (CTSS).[10] From the early 1970s the Unix operating system adapted the concept of a powerful command-line environment, and introduced the ability to pipe the output of one command in as input to another. Unix also had the capability to save and re-run strings of commands as "shell scripts" which acted like custom commands. The command-line was also the main interface for the early home computers such as the Commodore PET, Apple II and BBC Micro – almost always in the form of a BASIC interpreter. When more powerful business ori- • Windows Resource Kit and Windows Services for Unix include Korn and the Bourne shells along with a Perl interpreter (Services of Unix contains Active State ActivePerl in later versions and Interix for versions 1 and 2 and a shell compiled by Microsoft) • IBM OS/2 has the cmd.exe processor. This copies the command.com commands, with extensions to REXX. • A different interpreter Cmd.exe is, along with Command.com are part of the Windows NT stream operating systems. • Yet another Cmd.exe is a stripped-down shell for Windows CE 3.0 • An MS-DOS type interpreter called PocketDOS has been ported to Windows CE machines; the most recent release is almost identical to MS-DOS 6.22 and can also run Windows 1, 2, and 3.0, QBasic and other development tools, 4NT and 4DOS. The latest release incldes several shells, namely MS-DOS 6.22, PC-DOS 7, DR DOS 3, and others • PocketConsole is a Windows NT 4.0 shell for Windows CE that is much like 4NT • Windows users have a CLI environment named Windows Command Prompt, which might use the CScript interface to alternate programs. PowerShell provides a command-line interface, but its applets are not written in shell-script. Implementations 62 CHAPTER 4. USER INTERFACES of the Unix shell are also available as part of the POSIX sub-system,[13] Cygwin, MKS Toolkit, UWIN, Hamilton C shell and other software packages. Available shells for these interoperability tools include csh, ksh, sh, bash, rsh, tclsh and less commonly zsh, ysh, psh • Command.com (4DOS), Windows NT cmd.exe (4NT, TCC), and OS/2 cmd.exe (4OS2) and others based on them are enhanced shells which can be a replacement for the native shell or a means of enhancement of the default shell interpreter provides a more flexible command line interface than the one supplied. In other cases, such a command interpreter can present a highly customised user interface employing the user interface and input/output facilities of the language. 4.2.8 Other command-line interfaces The command line provides an interface between programs as well as the user. In this sense, a command line is an alternative to a dialog box. Editors and databases present a command line, in which alternate com• Implementations of PHP have a shell for interactive mand processors might run. On the other hand, one might use called php-cli have options on the command line which opens a dialog box. The latest version of 'Take Command' has this • Standard Tcl/Tk has two interactive shells, Tclsh and feature. DBase used a dialog box to construct command Wish, that latter being the GUI version. lines, which could be further edited before use. • Python, Ruby, Lua, XLNT, and other interpreters Programs like Basic, Diskpart, Edlin, and QBasic all provide command-line interfaces, some of which use the sysalso have command shells for interactive use tem shell. Basic is modeled on the default interface for 8bit Intel computers. Calculators can be run as command• FreeBSD uses csh as its default interactive shell. line or dialog interfaces. • Apple Mac OS X[14] and many Linux distributions Emacs provides a command line interface in the form of have the Bash implementation of the Unix shell. its minibuffer. Commands and arguments can be entered Early versions of OS X used tcsh as the default shell. using Emacs standard text editing support, and output is • Embedded Linux (and other embedded Unix-like) displayed in another buffer. devices often use the Ash implementation of the There are a number of pre-mouse games, like Adventure Unix shell, as part of Busybox. or King’s Quest 1-3, which relied on the user typing commands at the bottom of the screen. One controls the char• Android uses the mksh shell,[15][16] (a shell derived acter by typing commands like 'get ring' or 'look'. The from ash[17] in older versions) with commands from program returns a text which describes how the charthe separate toolbox.[18] acter sees it, or makes the action happen. The text adventure The Hitchhiker’s Guide to the Galaxy, a piece of • Routers with Cisco IOS,[19] Junos[20] and many oth- interactive fiction based on Douglas Adam’s book of the ers are commonly configured from the command same name, is a teletype-style command-line game. line. The most notable of these interfaces is the standard streams interface, which allows the output of one command to be passed to the input of another. Text files can 4.2.7 Scripting serve either purpose as well. This provides the interfaces Most command-line interpreters support scripting, to var- of piping, filters and redirection. Under Unix, devices are files too, so the normal type of file for the shell used for ious extents. (They are, after all, interpreters of an interpreted programming language, albeit in many cases stdin,stdout and stderr is a tty device file. the language is unique to the particular command-line interpreter.) They will interpret scripts (variously termed shell scripts or batch files) written in the language that they interpret. Some command-line interpreters also incorporate the interpreter engines of other languages, such as REXX, in addition to their own, allowing the executing of scripts, in those languages, directly within the command-line interpreter itself. Another command-line interface allows a shell program to launch helper programs, either to launch documents or start a program. The command is processed internally by the shell, and then passed on to another program to launch the document. The graphical interface of Windows and OS/2 rely heavily on command-lines passed through to other programs – console or graphical, which then usually process the command line without presenting a userConversely, scripting programming languages, in par- console. ticular those with an eval function (such as REXX, Programs like the OS/2 E editor and some other IBM Perl, Python, Ruby or Jython), can be used to imple- editors, can process command-lines normally meant for ment command-line interpreters and filters. For a few the shell, the output being placed directly in the docuoperating systems, most notably DOS, such a command ment window. 4.2. COMMAND-LINE INTERFACE 63 A web browser’s URL input field can be used as a 4.2.10 References command line. It can be used to “launch” web apps, access browser configuration, as well as perform a search. [1] “Text mode programs (CUI: Console User Interface)". Wine User Guide. Retrieved Sep 22, 2013. Google, which has been called “the command line of the internet” will perform a domain-specific search when it [2] “Unix Shells”. the notion of having a replaceable “comdetects search parameters in a known format.[21] This mand shell” rather than a “monitor” tightly integrated with funcionality is present whether the search is trigged from the OS kernel tends to be attributed to Multics. a browser field or one on Google’s web site. [3] “GNU BASH Reference”. 4.2.9 See also • Comparison of command shells • List of command-line interpreters • Orthodox file manager, also known as commandbased file manager Concepts • Batch processing • Batch file • Console application • Interpreter directive • Read-eval-print loop [4] “Microsoft Windows Command Shell Overview”. [5] RISC OS 3 User Guide, Part 3: Outside the desktop (page 125) Published by Acorn Computers Limited, , Edition 2 Part number 0496,075 Issue 1 March 1992 [6] Conventions for describing commands on Unix-like operating systems: “The Open Group Base Specifications Issue 7, Chapter 12.1 Utility Argument Syntax”. The Open Group. 2008. Retrieved 2013-04-07. man-pages(7) – Linux Conventions and Miscellany Manual [7] Conventions for describing commands on MS-DOSlike operating systems. Notable difference: The Windows Server 2003 R2 documentation uses italic letters for “Information that the user must supply”, while the Server 2008 documentation uses angle brackets. Italics can not be displayed by the internal “help” command while there is no problem with angle brackets. “Command shell overview”. Windows Server 2003 Product Help. Microsoft. 2005-01-21. Retrieved 2013-0407. “Command-Line Syntax Key”. Windows Server 2008 R2 TechNet Library. Microsoft. 2010-01-25. Retrieved 2013-04-07. • Shell (computing) [8] Brian W. Kernighan and Rob Pike, “The UNIX Programming Environment”, Prentice-Hall (1984). • Scripting language [9] With the exception of ASCII art • Shell script [10] Pouzin, Louis. “The Origin of the Shell”. Multicians.org. Retrieved Sep 22, 2013. [11] “Remembering Windows 95’s launch 15 years later”. Uses [12] “A history of Windows”. • clig [13] “Windows POSIX shell compatibility”. • Computer terminal [14] via Finder, Applications, Utilities, Terminal • Terminal emulator • Run command [15] android/platform/external/mksh/ [16] http://stackoverflow.com/questions/11950131/ android-adb-shell-ash-or-ksh [17] “Android sh source”. Misc [18] “Android toolbox source”. • Graphical user interface § Comparison to other interfaces [19] “The Cisco IOS command-line interface (CLI) is the primary user interface...” • In the Beginning... Was the Command Line [20] "...the software that you use whenever you access the router...” • Natural user interface [21] “Google strange goodness”. 64 4.2.11 CHAPTER 4. USER INTERFACES External links • The Roots of DOS David Hunter, Softalk for the IBM Personal Computer March 1983. Archived at Patersontech.com since 2000. 4.3 Text-based user interface Not to be confused with Command-line interface. Text-based user interface (TUI), also called textual cmus, an audio player with a TUI Snapshot of a TUI used in a BBS system called Synchronet. VisiCalc is an early example of a TUI[1] processes events from command-line interfaces that operate sequentially. An advanced TUI may, like GUIs, use the entire screen area and accept mouse input. A TUI does not necessarily provide line-by-line output, although TUIs only use text, symbols and colors available on a given text environment. VisiCalc and the Emacs and Some file managers implement a TUI (here: Midnight Commanvi visual editors are the earliest examples of TUIs.[2] der) 4.3.1 Types of text terminals From text application's point of view, a text screen (and communications with it) can belong to one of three types (here ordered in order of decreasing accessibility): The configuration menu of the Linux kernel of OpenWrt before compilation is based on ncurses 1. A genuine text mode display, controlled by a video adapter or the central processor itself. This is a normal condition for a locally-running application on various types of personal computers and mobile devices. If not deterred by the operating system, a smart program may exploit the full power of a hardware text mode. user interface or terminal user interface, is a retronym that was coined sometime after the invention of graphical user interfaces, to distinguish a text-based interface that 2. A text mode emulator. Examples are xterm for X Window System and win32 console (in a window mode) for Microsoft Windows. This usually sup- 4.3. TEXT-BASED USER INTERFACE 65 ports programs which expect a real text mode display, but may run considerably slower. Certain functions of an advanced text mode, such as an own font uploading, almost certainly become unavailable. tain EGA/VGA text mode features, particularly a random access to the text buffer, even if the application runs in a window. On the other hand, programs running under Windows (both native and DOS applications) have much less control of the display and keyboard than Linux 3. A remote text terminal. The communication capa- and DOS programs can have, because of aforementioned bilities usually become reduced to a serial line or win32 console layer. its emulation, possibly with few ioctl()s as an outof-band channel in such cases as Telnet and Secure Shell. This is the worst case, because software restrictions hinder the use of capabilities of a remote display device. Under Linux and other Unix-like systems, a program easily accommodates to any of the three cases because the same interface (namely, standard streams) controls the display and keyboard. Also, specialized programming libraries help to output the text in a way appropriate to the given display device and interface to it. See below for a comparison to Windows. 4.3.2 On ANSI-compatible terminals American National Standards Institute (ANSI) standard ANSI X3.64 defines a standard set of escape sequences that can be used to drive terminals to create TUIs (see ANSI escape code). Escape sequences may be supported for all three cases mentioned in the above section, allowing random cursor movements and color changes. However, not all terminals follow this standard, and many noncompatible but functionally equivalent sequences exist. 4.3.3 Under DOS and Microsoft Windows Mouse cursor in Impulse Tracker. A more precise cursor (perpixel resolution) was achieved by regenerating the glyphs of characters used where the cursor was visible, at each mouse movement in real-time. Most often those programs used a blue background for the main screen, with white or yellow characters, although commonly they had also user color customization. Later, the interface became deeply influenced by graphical user interfaces (GUI), adding pull-down menus, overlapping windows, dialog boxes and GUI widgets operated by mnemonics or keyboard shortcuts. Soon mouse input was added – either at text resolution as a simple colored box or at graphical resolution thanks to the ability of the Enhanced Graphics Adapter (EGA) and Video Graphics Array (VGA) display adapters to redefine the text character shapes by software – providing additional functions. Some notable programs of this kind were Microsoft Word, DOS Shell, WordPerfect, Norton Commander, Turbo Vision based Borland Turbo Pascal and Turbo C (the latter included the conio library), Lotus 1-2-3 and many others. Some of these interfaces survived even during the Microsoft Windows 3.1x period in the early The FreeDOS Edit user interface 1990s. For example, the Microsoft C 6.0 compiler, used On IBM Personal Computers and compatibles, the Basic to write true GUI programs under 16-bit Windows, still Input Output System (BIOS) and DOS system calls pro- has its own TUI. vide a way to write text on the screen, and the ANSI.SYS Since its start, Microsoft Windows includes a console to driver could process standard ANSI escape sequences. display DOS software. Later versions added the Win32 However, programmers soon learned that writing data di- console as a native interface for command-line interface rectly to the screen buffer was far faster and simpler to and TUI programs. The console usually opens in window program, and less error-prone; see VGA-compatible text mode, but it can be switched to full true text mode screen mode for details. This change in programming methods and vice versa by pressing the Alt and Enter keys together. resulted in many DOS TUI programs. The win32 con- Full-screen mode is not available in Windows Vista and sole environment is notorious for its emulation of cer- later, but may be used with some workarounds.[3] 66 4.3.4 CHAPTER 4. USER INTERFACES Under Unix-like systems tional” or display a garbled interface. 4.3.5 In embedded systems Snapshot of 'XFdrake', a TUI used in Mandriva Linux to configure the graphical system. In Unix-like operating systems, TUIs are often constructed using the terminal control library curses, or Embedded system displaying menu on an LCD screen ncurses, a mostly compatible library. The advent of the curses library with Berkeley Unix created a portable and stable API for which to write TUIs. The ability to talk to various text terminal types using the same interfaces led to more widespread use of “visual” Unix programs, which occupied the entire terminal screen instead of using a simple line interface. This can be seen in text editors such as vi, mail clients such as pine or mutt, system management tools such as SMIT, SAM, FreeBSD's Sysinstall and web browsers such as lynx. Some applications, such as w3m, and older versions of pine and vi use the less-able termcap library, performing many of the functions associated with curses within the application. Modern embedded systems are capable of displaying TUI on a monitor like personal computers. This functionality is usually implemented using specialized integrated circuits, modules, or using FPGA. Video circuits or modules are usually controlled using VT100-compatible command set over UART, FPGA designs usually allow direct video memory access. 4.3.6 Other uses In addition, the rise in popularity of Linux brought many former DOS users to a Unix-like platform, which has fostered a DOS influence in many TUIs. The program minicom, for example, is modeled after the popular DOS program Telix. Some other TUI programs, such as the Twin desktop, were ported over. • The full screen editor of the Commodore 64 8-bit computers was advanced in its market segment for its time. Users could move the cursor over the entire screen area, entering and editing BASIC program lines, as well as direct mode commands. All Commodore 8-bit computers used the PETSCII character set, which included character glyphs suitable for making a TUI. The Linux kernel supports virtual consoles, typically accessed through a Ctrl-Alt-Fkey combination. Up to 10 consoles may be accessed, each displaying in full-screen text mode. • Apple’s Macintosh Programmer’s Workshop programming environment included Commando, a TUI shell. It was the inspiration for BBEdit’s shell worksheet. The free software program GNU Screen provides for managing multiple sessions inside a single TUI, and so can be thought of as being like a window manager for text-mode and command-line interfaces. Tmux can also do this. • Later Apple II models included MouseText, a set of graphical glyphs used for making a TUI. • The Corvus Concept computer of 1982 used a function key-based text interface on a full-page pivoting display. The proprietary OS X text editor BBEdit includes a shell worksheet function that works as a full-screen shell window. The free Emacs text editor can run a shell inside of 4.3.7 See also one of its buffers to provide similar functionality. There • Command-line interface are several shell implementations in Emacs, but only ansiterm is suitable for running TUI apps. The other common • Console application shell modes, shell and eshell only emulate command lines • Roguelike, a type of game typically using a TUI and TUI apps will complain “Terminal is not fully func- 4.4. GRAPHICAL USER INTERFACE 67 Examples of programming libraries The actions in a GUI are usually performed through direct manipulation of the graphical elements.[5] In addition to computers, GUIs can be found in hand-held devices such as MP3 players, portable media players, gaming devices and smaller household, office and industry equipment. The term “GUI” tends not to be applied to other low-resolution types of interfaces with display resolutions, such as video games (where HUD[6] is preferred), or not restricted to flat screens, like volumetric displays[7] because the term is restricted to the scope of two-dimensional display screens able to describe generic information, in the tradition of the computer science research at the PARC (Palo Alto Research Center). • CDK • Dialog • ncurses • Newt, a widget-based toolkit • PDCurses • SMG$ • Turbo Vision • Visual Basic for DOS (with drag'n'drop TUI editor) 4.3.8 References [1] “Programming with Curses”. [2] “Programming with Curses”. 4.4.1 User interface and interaction design Main article: User interface design Designing the visual composition and temporal behavior Human Brain Senses Hardware Peripheral hardware Software Integrated circuits Kernel space TFT-Display VR-TFT-Display 1280×800@95Hz ≙ 10,5ms / frame Pixel persistence ≤ 3ms [3] cmd prompt full screen in Windows 7. Social.technet.microsoft.com. Retrieved on 2013-06-15. Pixel response time = latency Latency? OUTPUT Graphics accelerator 1920×1080@60fps 60fps ≙ 16,6ms between 2 frames 1280×800@95fps for VR 95fps ≙ 10,5ms between 2 frames KMS Audio subsystem Gamepad Actuators Video subsystem (GEM/TTM) DRM Speaker/Headphone 3D Positional Audio, etc ForceFeedback et al. Desktop computer or Mobile computer or Video game console ALSA OpenGL user space device drivers Gesture recognition Keyboard 4.4 Graphical user interface User space Latency? 1920×1080@60Hz ≙ 16,6ms / frame Pixel response time: 4-20ms Sample-and-Hold, problematic 60/95Hz Speech recognition Mouse RTOS = latency evdev Input subsystem Gamepad Accelerometers, Tilt-sensors, et al. Joystick INPUT “GUI” redirects here. For other uses, see Gui (disambiguation). In computer science, a graphical user interface The graphical user interface is presented (displayed) on the comMicrophone Linux kernel Middleware Game puter screen. It is the result of processed user input and usually the primary interface for human-machine interaction. The touch user interfaces popular on small mobile devices are an overlay of the visual output to the visual input. of a GUI is an important part of software application programming in the area of human-computer interaction. Its goal is to enhance the efficiency and ease of use for the underlying logical design of a stored program, a design discipline known as usability. Methods of user-centered design are used to ensure that the visual language introduced in the design is well tailored to the tasks. A Unix-based X Window System desktop or GUI, pronounced /ˈɡuːi/ (“gooey”)[1] is a type of interface that allows users to interact with electronic devices through graphical icons and visual indicators such as secondary notation, as opposed to text-based interfaces, typed command labels or text navigation. GUIs were introduced in reaction to the perceived steep learning curve of command-line interfaces (CLIs),[2][3][4] which require commands to be typed on the keyboard. The visible graphical interface features of an application are sometimes referred to as “chrome” or “GUI” (Gooee).[8][9] Typically, the user interacts with information by manipulating visual widgets that allow for interactions appropriate to the kind of data they hold. The widgets of a well-designed interface are selected to support the actions necessary to achieve the goals of the user. A model-viewcontroller allows for a flexible structure in which the interface is independent from and indirectly linked to application functionality, so the GUI can be easily customized. This allows the user to select or design a different skin at will, and eases the designer’s work to change the interface as the user needs evolve. Good user interface design relates to the user, not the system architecture. 68 CHAPTER 4. USER INTERFACES Large widgets, such as windows, usually provide a frame Main article: Elements of graphical user interfaces or container for the main presentation content such as a Further information: WIMP (computing), Window web page, email message or drawing. Smaller ones usu- manager and Desktop environment ally act as a user-input tool. A GUI may be designed for the requirements of a vertical market as application-specific graphical user interfaces. Examples of application-specific GUIs include automated teller machines (ATM), point-Of-Sale touchscreens at restaurants,[10] self-service checkouts used in a retail store, airline self-ticketing and check-in, information kiosks in a public space, like a train station or a museum, and monitors or control screens in an embedded industrial application which employ a real time operating system (RTOS). A GUI uses a combination of technologies and devices to provide a platform that the user can interact with, for the tasks of gathering and producing information. The latest cell phones and handheld game systems also employ application specific touchscreen GUIs. Newer automobiles use GUIs in their navigation systems and touch screen multimedia centers. The WIMP style of interaction uses a virtual input device to control the position of a pointer, most often a mouse, and presents information organized in windows and represented with icons. Available commands are compiled together in menus, and actions are performed making gestures with the pointing device. A window manager facilitates the interactions between windows, applications, and the windowing system. The windowing system handles hardware devices such as pointing devices and graphics hardware, as well as the positioning of the pointer. Examples • Sample Graphical Desktop Environments • GNOME Shell (Gnome‑3) A series of elements conforming a visual language have evolved to represent information stored in computers. This makes it easier for people with few computer skills to work with and use computer software. The most common combination of such elements in GUIs is the WIMP (“window, icon, menu, pointing device”) paradigm, especially in personal computers. In personal computers, all these elements are modeled through a desktop metaphor, to produce a simulation called a desktop environment in which the display represents a desktop, upon which documents and folders of documents can be placed. Window managers and other software combine to simulate the desktop environment with varying degrees of realism. • KDE Plasma (KDE 4) • Unity • Xfce • Enlightenment • Sugar • A twm X Window System environment Post-WIMP interfaces • Windows on a Wayland compositor Main article: Post-WIMP • The dwm tiling window manager Smaller mobile devices such as PDAs and smartphones typically use the WIMP elements with different unifying metaphors, due to constraints in space and available input devices. Applications for which WIMP is not well suited may use newer interaction techniques, collectively named as post-WIMP user interfaces.[11] Components user graphical interface display server kernel Examples: KDE Plasma, Aqua, GNOME Shell Examples: X11, Wayland, Quartz window manager Examples: awesome, Compiz, OpenBox As of 2011, some touchscreen-based operating systems such as Apple’s iOS (iPhone) and Android use the class of GUIs named post-WIMP. These support styles of interaction using more than one finger in contact with a display, which allows actions such as pinching and rotating, which are unsupported by one pointer and mouse.[12] Examples: X.Org Server, Weston, KWin, Mutter, Quarz Compositor, SurfaceFlinger Examples: Linux kernel, FreeBSD kernel, XNU kernel hardware Layers of a GUI based on a windowing system Interaction Human interface devices, for the efficient interaction with a GUI include a Computer keyboard, especially used in conjunction with Keyboard shortcuts, Pointing 4.4. GRAPHICAL USER INTERFACE 69 devices for the Cursor (or rather Pointer) control: Mouse, the creation and manipulation of objects in engineering Pointing stick, Touchpad, Trackball, Joystick, etc., drawings. Virtual keyboards, and Head-up displays, translucent information devices at the eye level. PARC user interface There are also actions performed by programs, that affect the GUI. For example, there are components like inotify or D-Bus to facilitate the communication of computer programs with each other. 4.4.2 History The Xerox Star 8010 workstation introduced the first commercial GUI. The PARC user interface consisted of graphical elements such as windows, menus, radio buttons, and check boxes. The concept of icons was later introduced by David Smith, who had written a thesis on the subject under the guidance of Kay.[13][14][15] The PARC user interface employs a pointing device in addition to a keyboard. These aspects can be emphasized by using the alternative acronym WIMP, which stands for windows, icons, menus and pointing device. The Xerox Alto was the first device to use a graphical user interface. Main article: History of the graphical user interface Precursors A precursor to GUIs was invented by researchers at the Stanford Research Institute, led by Douglas Engelbart. They developed the use of text-based hyperlinks manipulated with a mouse for the On-Line System (NLS). The concept of hyperlinks was further refined and extended to graphics by researchers at Xerox PARC and specifically Alan Kay, who went beyond text-based hyperlinks and used a GUI as the primary interface for the Xerox Alto computer, released in 1973. Most modern generalpurpose GUIs are derived from this system. Evolution Following PARC the first GUI-centric computer operating model was the Xerox 8010 Star Information System in 1981,[16][17] followed by the Apple Lisa (which presented the concept of menu bar as well as window controls) in 1983, the Apple Macintosh 128K in 1984, and the Atari ST and Commodore Amiga in 1985. Visi On was released in 1983 for the IBM PC compatible computers, but didn't became popular due to its high hardware demands.[18] Nevertheless, it was a crucial influence on the contemporary development of Microsoft Windows.[19] Apple, IBM and Microsoft used many of Xerox’s ideas to develop products, and IBM’s Common User Access specifications formed the basis of the user interface found in Microsoft Windows, IBM OS/2 Presentation Manager, and the Unix Motif toolkit and window manager. These ideas evolved to create the interface found in current verIvan Sutherland developed a pointer-based system called sions of Microsoft Windows, as well as in various desktop the Sketchpad in 1963. It used a light-pen to guide environments for Unix-like operating systems, such as 70 CHAPTER 4. USER INTERFACES Mac OS X and Linux. Thus most current GUIs have Microsoft Windows, Mac OS X, and the X Window Syslargely common idioms. tem interfaces for desktop and laptop computers, and Apple’s iOS, Android, Symbian, BlackBerry OS, Windows Phone, Palm OS / Web OS, and Firefox OS for handheld ("smartphone") devices. 4.4.3 Comparison to other interfaces Command-line interfaces Macintosh 128K, the first Macintosh (1984) Popularization GUIs were a hot topic in the early 1980s. The Apple Lisa was released in 1983 and various windowing systems existed for MS-DOS. Individual applications for a number of platforms presented their own take on the GUI.[20] Despite the GUIs advantages, many reviewers questioned the value of the entire concept,[21] citing hardware limitations as well as the difficulty in finding compatible soft- A modern CLI ware. Since the commands available in command line interIn 1984, Apple released a television commercial which faces can be numerous, complicated operations can be introduced the Apple Macintosh during the telecast of completed using a short sequence of words and symSuper Bowl XVIII by CBS,[22] with allusions to George bols. This allows for greater efficiency and productivOrwell's noted novel, Nineteen Eighty-Four. The com- ity once many commands are learned,[2][3][4] but reaching mercial was aimed at making people think about com- this level takes some time because the command words puters, identifying the user-friendly interface as a per- may not be easily discoverable or mnemonic. In addition, sonal computer which departed from previous businessusing the command line can become slow and error-prone oriented systems,[23] and becoming a signature represen- for inexperienced users who need to enter very long com[24] tation of Apple products. mands comprising many parameters and/or several difAccompanied by an extensive marketing campaign,[25] ferent filenames at once. WIMPs (“window, icon, menu, Windows 95 was a major success in the marketplace at pointing device”), on the other hand, present the user with launch and shortly became the most popular desktop op- numerous widgets that represent and can trigger some of the system’s available commands. erating system. In 2007, with the iPhone[26] and later in 2010 with the introduction of the iPad,[27] Apple popularized the postWIMP style of interaction for multi-touch screens, and those devices were considered to be milestones in the development of mobile devices.[28][29] On the other hand, GUIs can be made quite hard by burying dialogs deep in the system, or moving dialogs from place to place. Also, dialog boxes are considerably harder for the user to script. WIMPs extensively use modes as the meaning of all keys The GUIs familiar to most people as of the mid-2010s are and clicks on specific positions on the screen are rede- 4.4. GRAPHICAL USER INTERFACE 71 fined all the time. Command line interfaces use modes less of an obstacle to a smooth user experience. only in limited forms, such as the current directory and Three-dimensional graphics are currently mostly used in environment variables. computer games, art and computer-aided design (CAD). Most modern operating systems provide both a GUI and A three-dimensional computing environment could also some level of a CLI, although the GUIs usually receive be useful in other scenarios, like molecular graphics and more attention. The GUI is usually WIMP-based, al- aircraft design. though occasionally other metaphors surface, such as Several attempts have been made to create a multi-user those used in Microsoft Bob, 3dwm or File System Vi- three-dimensional environment, including the Croquet sualizer (FSV). Project and Sun’s Project Looking Glass. GUI wrappers Graphical user interface (GUI) wrappers circumvent the command-line interface versions (CLI) of (typically) Linux and Unix-like software applications and their text-based interfaces or typed command labels. While command-line or text-based application allow users to run the program non-interactively, GUIs wrappers on top of them avoid the steep learning curve of the command-line,[2][3][4] which requires commands to be typed on the keyboard. By starting a GUI wrapper, users can intuitively interact with polipo, start, stop, and change its working parameters, through graphical icons and visual indicators of a desktop environment, for example. Applications may also provide both interfaces, and when they do the GUI is usually a WIMP wrapper around the command-line version. This is especially common with applications designed for Unix-like operating systems. The latter used to be implemented first because it allowed the developers to focus exclusively on their product’s functionality without bothering about interface details such as designing icons and placing buttons. Designing programs this way also allows users to run the program in a shell script. An example of this basic design could be the specialized polipo command-line web proxy server, which has some connected GUI wrapper projects, e.g. for Windows OS (solipo[30] ), Mac OS X (dolipo[31] ), and Android (polipoid[32] ). 4.4.4 Three-dimensional user interfaces For typical computer displays, three-dimensional is a misnomer—their displays are two-dimensional. Semantically, however, most graphical user interfaces use three dimensions – in addition to height and width, they offer a third dimension of layering or stacking screen elements over one another. This may be represented visually on screen through an illusionary transparent effect, which offers the advantage that information in background windows may still be read, if not interacted with. Or the environment may simply hide the background information, possibly making the distinction apparent by drawing a drop shadow effect over it. Some environments use the methods of 3D graphics to project virtual three dimensional user interface objects onto the screen. These are often shown in use in sci-fi films (see below for examples). As the processing power of computer graphics hardware increases, this becomes Technologies The use of three-dimensional graphics has become increasingly common in mainstream operating systems, from creating attractive interfaces—eye candy— to functional purposes only possible using three dimensions. For example, user switching is represented by rotating a cube whose faces are each user’s workspace, and window management is represented via a Rolodex-style flipping mechanism in Windows Vista (see Windows Flip 3D). In both cases, the operating system transforms windows on-thefly while continuing to update the content of those windows. Interfaces for the X Window System have also implemented advanced three-dimensional user interfaces through compositing window managers such as Beryl, Compiz and KWin using the AIGLX or XGL architectures, allowing for the usage of OpenGL to animate the user’s interactions with the desktop. Another branch in the three-dimensional desktop environment is the three-dimensional GUIs that take the desktop metaphor a step further, like the BumpTop, where a user can manipulate documents and windows as if they were “real world” documents, with realistic movement and physics. The Zooming User Interface (ZUI) is a related technology that promises to deliver the representation benefits of 3D environments without their usability drawbacks of orientation problems and hidden objects. It is a logical advancement on the GUI, blending some threedimensional movement with two-dimensional or "2.5D" vector objects. In 2006, Hillcrest Labs introduced the first zooming user interface for television.[33] In science fiction Three-dimensional GUIs appeared in science fiction literature and movies before they were technically feasible or in common use. For example; the 1993 American film Jurassic Park features Silicon Graphics' threedimensional file manager File System Navigator, a reallife file manager for Unix operating systems. The film Minority Report has scenes of police officers using specialized 3d data systems. In prose fiction, threedimensional user interfaces have been displayed as im- 72 CHAPTER 4. USER INTERFACES mersible environments like William Gibson's Cyberspace [9] Jakob Nielsen. “Browser and GUI Chrome”. or Neal Stephenson's Metaverse. Many futuristic imagin[10] The ViewTouch restaurant system by Giselle Bisson ings of user interfaces rely heavily on object-oriented user interface (OOUI) style and especially object-oriented [11] IEEE.org. graphical user interface (OOGUI) style.[34] [12] Reality-Based Interaction: A Framework for Post-WIMP Interfaces 4.4.5 See also • Apple Computer, Inc. v. Microsoft Corp. • Console user interface • Computer icon • Distinguishable interfaces • Ergonomics • General Graphics Interface (software project) • Look and feel • Natural user interface • Ncurses • Object-oriented user interface • Organic user interface • Rich Internet application • Skeuomorph • Skin (computing) • Theme (computing) • Text entry interface • User interface design • Vector-based graphical user interface 4.4.6 References [1] Longman Pronunciation Dictionary, 3rd edition, 2008, Pearson Education Ltd., Harlow, page 357 [13] Lieberman, Henry. “A Creative Programming Environment, Remixed”, MIT Media Lab, Cambridge. [14] Salha, Nader. “Aesthetics and Art in the Early Development of Human-Computer Interfaces”, October 2012. [15] Smith, David. “Pygmalion: A Creative Programming Environment”, 1975. [16] The first GUIs [17] Xerox Star user interface demonstration, 1982 [18] “VisiCorp Visi On”. The Visi On product was apparently not intended for the home user. It was designed and priced for high end corporate workstations. The hardware it required was quite a bit for 1983. It required a minimum of 512k of ram and a hard drive (5 megs of space). [19] A Windows Retrospective, PC Magazine Jan 2009. [20] “Magic Desk I for Commodore 64”. [21] “VALUE OF WINDOWING IS QUESTIONED”. [22] Friedman, Ted (October 1997). “Apple’s 1984: The Introduction of the Macintosh in the Cultural History of Personal Computers”. Archived from the original on October 5, 1999. [23] Friedman, Ted (2005). “Chapter 5: 1984”. Electric Dreams: Computers in American Culture. New York University Press. ISBN 0-8147-2740-9. Retrieved October 6, 2011. [24] Grote, Patrick (October 29, 2006). “Review of Pirates of Silicon Valley Movie”. DotJournal.com. Archived from the original on November 7, 2006. Retrieved January 24, 2014. [25] Washington Post (August 24, 1995). Windows “With Windows 95’s Debut, Microsoft Scales Heights of Hype” Check |url= scheme (help). Washington Post. Retrieved November 8, 2013. [2] Computerhope.com [3] Technet.com [4] Technet.com [5] “window manager Definition”. PC Magazine. Ziff Davis Publishing Holdings Inc. Retrieved 12 November 2008. [6] Greg Wilson (2006). “Off With Their HUDs!: Rethinking the Heads-Up Display in Console Game Design”. Gamasutra. Retrieved February 14, 2006. [7] “GUI definition”. Linux Information Project. October 1, 2004. Retrieved 12 November 2008. [8] The Jargon Book, “Chrome” [26] Mather, John. iMania, Ryerson Review of Journalism, (February 19, 2007) Retrieved February 19, 2007 [27] “the iPad could finally spark demand for the hitherto unsuccessful tablet PC” --Eaton, Nick The iPad/tablet PC market defined?, Seattle Post-Intelligencer, 2010 [28] Bright, Peter Ballmer (and Microsoft) still doesn't get the iPad, Ars Technica, 2010 [29] “The iPad’s victory in defining the tablet: What it means”. Infoworld. [30] “Solipo”. Retrieved 2010-09-23. [31] “Dolipo”. Retrieved 2010-09-23. 4.4. GRAPHICAL USER INTERFACE [32] “Polipoid”. Retrieved 2014-04-21. [33] Macworld.com November 11, 2006. Dan Moren. CES Unveiled@NY ‘07: Point and click coming to set-top boxes? [34] Dayton, Tom. “Object-Oriented GUIs are the Future”. OpenMCT Blog. Retrieved 23 August 2012. 4.4.7 External links • Evolution of Graphical User Interface in last 50 years by Raj Lal • The men who really invented the GUI by Clive Akass • Graphical User Interface Gallery, screenshots of various GUIs • Marcin Wichary’s GUIdebook, Graphical User Interface gallery: over 5500 screenshots of GUI, application and icon history • The Real History of the GUI by Mike Tuck • In The Beginning Was The Command Line by Neal Stephenson • 3D Graphical User Interfaces (PDF) by Farid BenHajji and Erik Dybner, Department of Computer and Systems Sciences, Stockholm University 73 Chapter 5 Operating System Examples 5.1 Disk operating system interpreter; when power was turned off after running the program, the information so entered vanished. For the family of disk operating systems for the IBM PC Both hard disks and floppy disk drives require software compatible platform, see DOS. For other uses, see DOS to manage rapid access to block storage of sequential (disambiguation). and other data. When microcomputers rarely had expensive disk drives of any kind, the need to have software Disk Operating System (specifically) and disk operat- to manage such devices (the disks) carried much status. ing system (generically), most often reveal themselves in To have one or the other was a mark of distinction and abbreviated form as DOS, refer to an operating system prestige, and so was having the Disk sort of an Operating software used in most computers that provides the ab- System. As prices for both disk hardware and operating straction and management of secondary storage devices system software decreased, there were many such microand the information on them (e.g., file systems for orga- computer systems. nizing files of all sorts). Such software is referred to as a disk operating system when the storage devices it manages are made of rotating platters, such as floppy disks or hard disks. In the early days of microcomputers, computer memory space was often limited, so the disk operating system was an extension of the operating system. This component was only loaded if needed. Otherwise, disk access would be limited to low-level operations such as reading and writing disks at the sector-level. In some cases, the disk operating system component (or even the operating system) was known as DOS. Sometimes, a disk operating system can refer to the entire operating system if it is loaded off a disk and supports the abstraction and management of disk devices. Examples include DOS/360. On the PC compatible platform, an entire family of operating systems was called DOS. 5.1.1 History Mature versions of the Commodore, SWTPC, Atari and Apple home computer systems all featured a disk operating system (actually called 'DOS' in the case of the Commodore 64 (CBM DOS), Atari 800 (Atari DOS), and Apple II machines (Apple DOS)), as did (at the other end of the hardware spectrum, and much earlier) IBM's System/360, 370 and (later) 390 series of mainframes (e.g., DOS/360: Disk Operating System / 360 and DOS/VSE: Disk Operating System / Virtual Storage Extended). Most home computer DOS'es were stored on a floppy disk always to be booted at start-up, with the notable exception of Commodore, whose DOS resided on ROM chips in the disk drives themselves (the computer itself had no DOS, just a form of a BIOS for communicating with peripherals). The Lt. Kernal hard disk subsystem for the Commodore 64 and Commodore 128 models stored its DOS on the disk, as is the case with modern systems, and loaded the DOS into RAM at boot time. In large machines there were other disk operating systems, such as IBM’s VM, DEC’s RSTS / RT-11 / VMS / TOPS-10 / TWENEX, MIT’s ITS / CTSS, Control Data’s assorted NOS variants, Harris’s Vulcan, Bell Labs’ Unix, and so on. In microcomputers, SWTPC’s 6800 and 6809 machines used TSC's FLEX disk operating system, Radio Shack's TRS-80 machines used TRS-DOS, their Color Computer used OS-9, and most of the Intel 8080 based machines from IMSAI, MITS (makers of the legendary Altair 8800), Cromemco, North Star, etc., used the CP/M-80 disk operating system. See list of operating systems. In the early days of computers, there were no disk drives, floppies or modern flash storage devices. Early storage devices such as delay lines, punched cards, paper tape, magnetic tape, and magnetic drums were used instead. And in the early days of microcomputers, paper tape or audio cassette tape (see Kansas City standard) or nothing were used instead. In the latter case, program and data entry was done at front panel switches directly into memory or through a computer terminal / keyboard, some- Usually, a disk operating system was loaded from a disk. times controlled by a read-only memory (ROM) BASIC 74 5.2. CP/M Only a very few comparable DOSes were stored elsewhere than floppy disks; among these exceptions were the British BBC Micro's optional Disc Filing System, DFS, offered as a kit with a disk controller chip, a ROM chip, and a handful of logic chips, to be installed inside the computer; and Commodore's CBM DOS, located in a ROM chip in each disk drive. 5.1.2 Disk operating systems that were extensions to the OS • The DOS operating system was the primary operating system for the Apple Computer's Apple II family of computers, from 1979 with the introduction of the floppy disk drive, until 1983 with the introduction of ProDOS; many people continued using it long after that date. Usually, it was called Apple DOS to distinguish it from MS-DOS. • Commodore DOS, which was used by 8-bit Commodore computers. Unlike most other DOS systems, it was integrated into the disk drives, not loaded into the computer’s own memory. • Atari DOS, which was used by the Atari 8-bit family of computers. The Atari OS only offered low-level disk-access, so an extra layer called DOS was booted off a floppy that offered higher level functions such as filesystems. • MSX-DOS, for the MSX computer standard. Initial version, released in 1984, was nothing but MS-DOS 1.0 ported to Z80; but in 1988 it evolved to version 2, offering facilities such as subdirectories, memory management and environment strings. The MSXDOS kernel resided in ROM (built-in on the disk controller) so basic file access capacity was available even without the command interpreter, by using BASIC extended commands. 75 • The DOS/360 initial/simple operating system for the IBM System/360 family of mainframe computers (it later became DOS/VSE, and was eventually just called VSE). • The DOS operating system for DEC PDP-11 minicomputers. This OS and the computers it ran on were nearly obsolete by the time PCs became common, with various descendants and other replacements. • DOS for the IBM PC compatible platform Main article: DOS The best known family of operating systems named “DOS” is that running on IBM PCs type hardware using Intel x86 CPUs or their compatible cousins from other makers. Any DOS in this family is usually just referred to as DOS. The original was 86-DOS, which would later become Microsoft MS-DOS. It was also licensed to IBM by Microsoft, and marketed by them as PC DOS. Digital Research produced a compatible variant known as DR DOS, which was eventually taken over (after a buyout of Digital Research) by Novell, then by Caldera. This became Novell DOS, then the open source OpenDOS, before being changed back to DRDOS. There is also a free and open source version named FreeDOS. 5.2 CP/M This article is about the Digital Research operating system. For the similarly named IBM and Microsoft operating system, see CP/DOS. “BDOS” redirects here. For the DOS kernel, see BDOS (DOS). For the MSX-DOS kernel, see BDOS (MSX). • Disc Filing System (DFS) This was an optional component for the Acorn BBC Micro, offered as a kit with a disk controller chip, a ROM chip, and a hand- CP/M, short for Control Program for Microcomputful of logic chips, to be installed inside the computer ers,[3] was a mass-market operating system created for Intel 8080/85-based microcomputers by Gary Kildall of • Advanced Disc Filing System (ADFS) was a succes- Digital Research, Inc. Initially confined to single-tasking sor to Acorn’s DFS. on 8-bit processors and no more than 64 kilobytes of memory, later versions of CP/M added multi-user vari• AMSDOS, for the Amstrad CPC computers. ations and were migrated to 16-bit processors. • GDOS and G+DOS, for the +D and DISCiPLE disk The combination of CP/M and S-100 bus computers interfaces for the ZX Spectrum. loosely patterned on the MITS Altair was an early industry standard for microcomputers, and this computer platform was widely used in business through the late 5.1.3 Disk operating systems that were the 1970s and into the mid-1980s.[4] By greatly reducing the main OS amount of programming required to install an application on a new manufacturer’s computer, CP/M increased Some disk operating systems were the operating system the market size for both hardware and software.[5][6] The advent of (comparatively) low-cost microcomputers runfor the entire computer system. 76 CHAPTER 5. OPERATING SYSTEM EXAMPLES ning CP/M was an important driver of software innovation as independent programmers and hackers bought them and shared their creations in user groups.[7] CP/M was displaced by MS-DOS soon after the 1982 introduction of the IBM PC. • Basic Input/Output System or BIOS, • Basic Disk Operating System or BDOS, • Console Command Processor or CCP. The BIOS and BDOS were memory resident, while the CCP was memory resident unless overwritten by an application, in which case it was automatically reloaded after A minimal 8-bit CP/M system would contain the follow- the application finished running. A number of transient ing components: commands for standard utilities were also provided. The transient commands resided in files with the extension • A computer terminal using the ASCII character set .COM on disk. 5.2.1 Hardware model • An Intel 8080 (and later the 8085) or Zilog Z80 mi- The BIOS directly controlled hardware components other croprocessor than the CPU and main memory. It contained functions such as character input and output and the read• At least 16 kilobytes of RAM (beginning at address ing and writing of disk sectors. The BDOS implemented 0) the CP/M file system and some input/output abstractions • A means to bootstrap the first sector of the diskette (such as redirection) on top of the BIOS. The CCP took user commands and either executed them directly (inter• At least one floppy disk drive nal commands such as DIR to show a directory or ERA to delete a file) or loaded and started an executable file of The only hardware system that CP/M, as sold by Digi- the given name (transient commands such as PIP.COM to tal Research, would support was the Intel 8080 Develop- copy files or STAT.COM to show various file and system ment System. Manufacturers of CP/M compatible sys- information). Third-party applications for CP/M were tems customized portions of the operating system for also essentially transient commands. their own combination of installed memory, disk drives, and console devices. CP/M would also run on systems The BDOS, CCP and standard transient commands were based on the Zilog Z80 processor since the Z80 was com- (ideally) the same in all installations of a particular revipatible with 8080 code. While the Digital Research dis- sion of CP/M, but the BIOS portion was always adapted tributed core of CP/M (BDOS, CCP, core transient com- to the particular hardware. Adding memory to a commands) did not use any of the Z80-specific instructions, puter, for example, meant that the CP/M system had to be many Z80 based systems used Z80 code in the system reinstalled with an updated BIOS capable of addressing specific BIOS, and many applications were dedicated to the additional memory. A utililty was provided to patch the supplied BIOS, BDOS and CCP to allow them to be Z80 based CP/M machines. run from higher memory. Once installed, the operating On most machines the bootstrap was a minimal system (BIOS, BDOS and CCP) was stored in reserved bootloader in ROM combined with some means of min- areas at the beginning of any disk which would be used imal bank switching or a means of injecting code on the to boot the system. On start-up, the bootloader (usually bus (since the 8080 needs to see boot code at Address 0 contained in a ROM firmware chip) would load the operfor start-up, while CP/M needs RAM there); for others, ating system from the disk in drive A:. this bootstrap had to be entered into memory using front By modern standards CP/M was primitive, owing to the panel controls each time the system was started. extreme constraints on program size. With version 1.0 CP/M used the 7-bit ASCII set. The other 128 characters there was no provision for detecting a changed disk. If a made possible by the 8-bit byte were not standardized. user changed disks without manually rereading the disk For example, one Kaypro used them for Greek charac- directory the system would write on the new disk usters, and Osborne machines used the 8th bit set to indicate ing the old disk’s directory information, ruining the data an underlined character. WordStar used the 8th bit as an stored on the disk. Starting with 1.1 or 1.2 this danger end-of-word marker. International CP/M systems most was reduced: if one changed disks without reading the commonly used the ISO 646 norm for localized charac- new disk’s directory, and tried to write to it, the operating ter sets, replacing certain ASCII characters with local- system would signal a fatal error, avoiding overwriting but ized characters rather than adding them beyond the 7-bit requiring a reboot (which took no more than a few secboundary. onds, but implied losing whatever data you were trying to save). 5.2.2 Components of the operating system The majority of the complexity in CP/M was isolated in the BDOS, and to a lesser extent, the CCP and tranIn the 8-bit versions, while running, the CP/M operating sient commands. This meant that by porting the limited system loaded into memory had three components: number of simple routines in the BIOS to a particular 5.2. CP/M hardware platform, the entire OS would work. This significantly reduced the development time needed to support new machines, and was one of the main reasons for CP/M’s widespread use. Today this sort of abstraction is common to most OSs (a hardware abstraction layer), but at the time of CP/M’s birth, OSs were typically intended to run on only one machine platform, and multilayer designs were considered unnecessary. 77 put to the console, or printing. Application programs would load processor registers with a function code for the operation, and addresses for parameters or memory buffers, and call a fixed address in memory. Since the address was the same independent of the amount of memory in the system, application programs would run the same way for any type or configuration of hardware. Basic Input Output System Console Command Processor The Console Command Processor, or CCP, accepted input from the keyboard and conveyed results to the terminal. CP/M itself would work with either a printing terminal or a video terminal. All CP/M commands had to be typed in on the command line. The console would most often display the A> prompt, to indicate the current default disk drive. When used with a video terminal, this would usually be followed by a blinking cursor supplied by the terminal. The CCP would await input from the user. A CCP internal command, of the form drive letter followed by a colon, could be used to select the default drive. For example, typing B: and pressing enter at the command prompt would change the default drive to B, and the command prompt would then become B> to indicate this change. CP/M’s command line interface was patterned after the operating systems from Digital Equipment, such as RT11 for the PDP-11 and OS/8 for the PDP-8. Commands took the form of a keyword followed by a list of parameters separated by spaces or special characters. Similar to a Unix shell builtin, if an internal command was recognized, it was carried out by the CCP itself. Otherwise it would attempt to find an executable file on the currently logged disk drive and (in later versions) user area, load it, and pass it any additional parameters from the command line. These were referred to as “transient” programs. On completion, CP/M would reload the part of the CCP that had been overwritten by application programs — this allowed transient programs a larger memory space. CP/M advertisement in December 11, 1978 issue of InfoWorld magazine The Basic Input Output System,[8][9] or BIOS,[8][9] provided the lowest level functions required by the operating system. These included reading or writing single characters to the system console and reading or writing a sector of data from the disk. The BDOS handled some of the buffering of data from the diskette, but before CP/M 3.0 it assumed a disk sector size fixed at 128 bytes, as used on singledensity 8-inch floppy disks. Since most 5.25-inch disk formats used larger sectors, the blocking and deblocking and the management of a disk buffer area was handled by model-specific code in the BIOS. The commands themselves could sometimes be obscure. For instance, the command to duplicate files was named PIP (Peripheral-Interchange-Program), the name of the old DEC utility used for that purpose. The format of parameters given to a program was not standardized, so that there was no single option character that differentiated options from file names. Different programs could and Customization was required because hardware choices were not constrained by compatibility with any one popudid use different characters lar standard. For example, some manufacturers used separate computer terminal, while others designed a built-in Basic Disk Operating System integrated video display system. Serial ports for printers and modems could use different types of UART chips, The Basic Disk Operating System,[8][9] or BDOS,[8][9] and port addresses were not fixed. Some machines used provided access to such operations as opening a file, out- memory-mapped I/O instead of the 8080 I/O address 78 space. All of these variations in the hardware were concealed from other modules of the system by use of the BIOS, which used standard entry points for the services required to run CP/M such as character I/O or accessing a disk block. Since support for serial communication to a modem was very rudimentary in the BIOS or may have been absent altogether, it was common practice for CP/M programs that used modems to have a user-installed overlay containing all the code required to access a particular machine’s serial port. File system File names were specified as a string of up to eight characters, followed by a period, followed by a file name extension of up to three characters (“8.3” filename format). The extension usually identified the type of the file. For example, .COM indicated a binary executable program file, and .TXT indicated a file containing ASCII text. Each disk drive was identified by a drive letter, for example drive A and drive B. To refer to a file on a specific drive, the drive letter was prefixed to the file name, separated by a colon, e.g. A:FILE.TXT. With no drive letter prefixed, access was to files on the current default drive.[10] The “8.3” filename format and the drive letter + colon combination survived into MS-DOS. The drive letter + colon convention has survived in Microsoft Windows and is still used today. In addition, file extensions (for example, .txt) are still used to identify file types on many operating systems. CHAPTER 5. OPERATING SYSTEM EXAMPLES File modification time stamps were not supported in releases up to CP/M 2.2, but were an optional feature in MP/M and CP/M 3.0. CP/M 2.2 had no sub-directories in the file structure, but provided 16 user areas to organize files on a disk. The user area concept was to make the single-user version of CP/M somewhat compatible with multi-user MP/M systems. A common patch for the CP/M and derivative operating systems was to make one user area accessible to the user independent of the currently set user area. A USER command allowed the user area to be changed to any area from 0 to 15. User 0 was the default. If one changed to another user, such as USER 1, the material saved on the disk for this user would only be available to USER 1; USER 2 would not be able to see it or access it. Since CP/M was a single-user operating system, no security was provided for the user command; nothing would prevent any user from accessing any of the 16 user areas. The user area feature arguably had little utility on small floppy disks, but it was useful for organizing files on machines with hard drives. The intent of the feature was to ease use of the same computer for different tasks. For example, a secretary could do data entry, then, after switching USER areas, another employee could use the machine to do billing without their files intermixing. Transient Program Area The read/write memory between address 0100 hexadecimal and the lowest address of the BDOS was the Transient Program Area (TPA) available for CP/M application programs. Although all Z80 and 8080 processors could address 64 kilobytes of memory, the amount available for application programs could vary, depending on the design of the particular computer. Some computers used large parts of the address space for such things as BIOS ROMs, or video display memory. As a result some systems had more TPA memory available than others. Bank switching was a common technique that allowed systems to have a large TPA while switching out ROM or video memory space as needed. CP/M 3.0 allowed parts of the BDOS to be in bank-switched memory as well. File size was specified as the number of 128-byte records (directly corresponding to disk sectors on 8-inch drives) occupied by a file on the disk. There was no generally supported way of specifying byte-exact file sizes. The current size of a file was maintained in the file’s file control block (FCB) by the operating system. Since many application programs (such as text editors) prefer to deal with files as sequences of characters rather than as sequences of records, by convention text files were terminated with a control-Z character (ASCII SUB, hexadecimal 1A). Determining the end of a text file therefore involved examining the last record of the file to locate the terminating Debugging application control-Z. This also meant that inserting a control-Z character into the middle of a file usually had the effect of CP/M came with a Dynamic Debugging Tool, nicktruncating the text contents of the file. named DDT (an insecticide, i.e. a bug-killer), which alWith the advent of larger removable and fixed disk drives, lowed memory and program modules to be examined and disk de-blocking formulas were employed which resulted manipulated.[11] in more disk blocks per logical file allocation block. While this allowed for larger file sizes, it also meant that the smallest file which could be allocated increased in size TSR (Terminate and Stay Resident) programs from 1KB (on single-density drives) to 2KB (on doubledensity drives) and so on, up to 32KB for a file containing CP/M was not a multitasking operating system. Howonly a single byte. This made for inefficient use of disk ever, it did accommodate device drivers, specialized code space if the disk contained a large number of small files. that might be required by an attached peripheral. Using 5.2. CP/M 79 this capability, programmers developed and sold auxil- suggesting IBM’s PL/I; and IBM’s CP/CMS operating iary desk accessory programs, such as SmartKey, a key- system, which Kildall had used when working at the board utility to assign any string of bytes to a key.[12] Naval Postgraduate School. 5.2.3 History This renaming of CP/M was part of a larger effort by Kildall and his wife/business partner to convert Kildall’s personal project of CP/M and the Intel-contracted PL/M compiler into a commercial enterprise. The Kildalls astutely intended to establish the Digital Research brand and its product lines as synonymous with “microcomputer” in the consumer’s mind, similar to what IBM and Microsoft together later successfully accomplished in making “personal computer” synonymous with IBM and Microsoft product offerings. Intergalactic Digital Research, Inc. was later renamed via a corporation changeof-name filing to Digital Research, Inc. Portability CP/M was described as a “software bus”, allowing multiple programs to interact with different hardware in a standardized way.[16] CP/M advertisement in the November 29, 1982 issue of InfoWorld magazine. Companies chose to support CP/M because of its large library of software. The Xerox 820 ran it because “where there are literally thousands of programs written for it, it would be unwise not to take advantage of it”, Xerox said.[17] Programs written for CP/M were typically portable among different machines, usually requiring only the specification of the escape sequences for control of the screen and printer. This portability made CP/M popular, and much more software was written for CP/M than for operating systems that ran on only one brand of hardware. One restriction on portability was that certain programs used the extended instruction set of the Z80 processor and would not operate on an 8080 or 8085 processor. Gary Kildall originally developed CP/M during 197374, as an operating system to run on an Intel Intellec8 development system, equipped with a Shugart Associates 8-inch floppy disk drive interfaced via a custom floppy disk controller.[9] It was written in Kildall’s own PL/M (Programming Language for Microcomputers).[8] Various aspects of CP/M were influenced by the TOPS10 operating system of the DECsystem-10 mainframe computer, which Kildall had used as a development environment.[13][14][15] Bill Gates claimed that the Apple II family with a Z80 SoftCard was the single most-popular CP/M hardware platform.[18] Many different brands of machines ran the operating system, some notable examples being the Altair 8800, the IMSAI 8080, the Osborne 1 and Kaypro luggables, and MSX computers. The best-selling CP/Mcapable system of all time was probably the Amstrad PCW. In the UK, CP/M was also available on Research Machines educational computers (with the CP/M source code published as an educational resource), and for the BBC Micro when equipped with a Z80 co-processor. Furthermore, it was available for the Amstrad CPC series, the Commodore 128, TRS-80, and later models of the ZX Spectrum. The name CP/M originally stood for “Control Program/Monitor”. However, during the conversion of CP/M to a commercial product, trademark registration documents filed in November 1977 gave the product’s name as “Control Program for Microcomputers”. The CP/M name follows a prevailing naming scheme of the time, as in Kildall’s PL/M language, and Prime Computer’s PL/P (Programming Language for Prime), both Applications WordStar, one of the first widely used word processors, and dBASE, an early and popular database program for small computers, were originally written for CP/M. An early outliner, KAMAS (Knowledge and Mind Amplification System) was also written for CP/M, though later rewritten for MS-DOS. Turbo Pascal, the ancestor of Borland Delphi, and Multiplan, the ancestor of Microsoft Excel, also debuted The beginning and CP/M’s heyday 80 CHAPTER 5. OPERATING SYSTEM EXAMPLES on CP/M before MS-DOS versions became available. AutoCAD, a CAD application from Autodesk debuted on CP/M. A host of compilers and interpreters for popular programming languages of the time (such as BASIC and FORTRAN) were available, among them several of the earliest Microsoft products. Graphics Although graphics-capable S-100 systems existed from the commercialization of the S-100 bus, CP/M did not provide any standardized graphics support until 1982 with GSX (Graphic System eXtension). Owing to the small memory available, graphics was never a common feature associated with 8-bit CP/M operating CP/M software often came with installers that adapted systems. Most systems could only display rudimentary it to a wide variety of computers.[19] The lack of stan- ascii art charts and diagrams in text mode or by using a custom character set. dardized graphics support limited video games, but various character and text-based games were ported, such as Telengard,[20] Hamurabi, Lunar Lander, along with early CP/M Plus interactive fiction including the Zork series and Colossal Cave Adventure. A text adventure specialist, Infocom The last 8-bit version of CP/M was version 3, often called was one of the few publishers to consistently release their CP/M Plus, released in 1983. It incorporated the bank games in CP/M format. Lifeboat Associates started col- switching memory management of MP/M in a single-user lecting and distributing user-written “free” software. One single-task operating system compatible with CP/M 2.2 of the first was XMODEM, which allowed reliable file applications. CP/M 3 could therefore use more than 64 transfers via modem and phone line. kB of memory on an 8080 or Z80 processor. The system could be configured to support date stamping of files. The operating system distribution software also included a relocating assembler and linker.[2] CP/M 3 was available for the last generation of 8-bit computers, notably Disk formats While the 8-inch single density floppy the Amstrad PCW and the Commodore 128. disk format (so-called “distribution format”) was standardized, various 5¼ inch formats were used depending on the characteristics of particular systems and to some The 16-bit world degree the choices of the designers. CP/M supported options to control the size of reserved and directory areas on There were versions of CP/M for some 16-bit CPUs as the disk, and the mapping between logical disk sectors (as well. seen by CP/M programs) and physical sectors as allocated The first version in the 16-bit family was CP/M-86 for the on the disk. There were very many ways to customize Intel 8086, which was soon followed by CP/M-68k for these parameters for every system[21] but once they had the Motorola 68000. At this point the original 8-bit CP/M been set, no standardized way existed for a system to load became known by the retronym CP/M-80 to avoid conparameters from a disk formatted on another system. fusion. There was also a port to the Zilog Z8000, named [24] Certain disk formats were more popular than others. CP/M-8000. The Xerox 820’s became widely supported, for exam- CP/M-86 was expected to be the standard operating sysple; much software was available on it, and other com- tem of the new IBM PCs, but DRI and IBM were unputers such as the Kaypro II were compatible with the able to negotiate development and licensing terms. IBM format.[22][23] No single manufacturer, however, pre- turned to Microsoft instead, and Microsoft delivered PC vailed in the 5¼ inch era of CP/M use, and disk for- DOS based on a CP/M clone, 86-DOS. Although CP/Mmats were not portable between hardware manufactur- 86 became an option for the IBM PC after DRI threaters. A software manufacturer had to prepare a separate ened legal action, it never overtook Microsoft’s system. version of the program for each brand of hardware on which it was to run. With some manufacturers (Kaypro When Digital Equipment Corporation put out the is an example), there was not even standardization across Rainbow 100 to compete with IBM, it came with CP/Mthe company’s different models. Because of this situa- 80 using a Z80 chip, CP/M-86 or MS-DOS using an both. The tion, disk format translation programs, which allowed a 8088 microprocessor, or CP/M-86/80 using [25] A benefit of Z80 and 8088 CPUs ran concurrently. machine to read many different formats, became popular the Rainbow was that it could continue to run 8-bit CP/M and reduced the confusion, as did programs like kermit software, preserving a user’s possibly sizable investment which allowed transfer of data and programs from one machine to another using the serial ports that most CP/M as they moved into the 16-bit world of MS-DOS. CP/M-68k was initially to be used in the Atari ST commachines had. The fragmented CP/M market, requiring distributors ei- puter, but Atari decided to go with a newer disk operating was used on the ther to stock multiple formats of disks or to invest in mul- system called GEMDOS. CP/M-68k also [26] SORD M68 and M68MX computers. tiformat duplication equipment, compared with the more standardized IBM PC disk formats, was a contributing These 16-bit versions of CP/M required application profactor to the rapid obsolescence of CP/M after 1981. grams to be re-compiled for the new CPUs—or, if they 5.2. CP/M 81 were written in assembly language, to be translated using tools like Digital Research’s XLT86, a program written by Gary Kildall in 1981, which translated .ASM source code for the Intel 8080 processor into .A86 source code for the Intel 8086. Using global data flow analysis on 8080 register usage, the translator would also optimize the output for code size and take care of calling conventions, so that CP/M-80 and MP/M-80 programs could be ported to the CP/M-86 and MP/M-86 platforms automatically. XLAT86 itself was written in PL/I-80 and was available for CP/M-80 platforms as well as for DEC VMS (for VAX 11/750 or 11/780).[27] Later versions of CP/M-86 made significant strides in performance and usability and were made compatible with MS-DOS. To reflect this compatibility the name was changed, and CP/M-86 became DOS Plus, which in turn became DR-DOS. sions of MS-DOS resembled those of CP/M. Internals like file-handling data structures were identical, and both referred to disk drives with a letter (A:, B:, etc.). MSDOS’s main innovation was its FAT file system. This similarity made it easier to port popular CP/M software like WordStar and dBase. However, CP/M’s concept of separate user areas for files on the same disk was never ported to MS-DOS. Since MS-DOS had access to more memory (as few IBM PCs were sold with less than 64 KB of memory, while CP/M had to run in 16 KB if necessary), more commands were built into the command-line shell, making MS-DOS somewhat faster and easier to use on floppy-based computers. ZCPR3 was released on Bastille Day, July 14, 1984, as a set of nine disks from SIG/M. The code for ZCPR3 could also be compiled (with reduced features) for the 8080 and would run on systems that did not have the requisite Z80 microprocessor. ZCPR ZCPR (the Z80 Command Processor Replacement) was introduced on February 2, 1982 as a drop-in replacement for the standard Digital Research console command processor (CCP) and was initially written by a group of computer hobbyists who called themselves “The CCP Group”. They were Frank Wancho, Keith Petersen (the archivist MS-DOS takes over behind Simtel at the time), Ron Fowler, Charlie Strom, Bob Mathias, and Richard Conn. Richard was, in fact, Many expected that CP/M would be the standard oper- the driving force in this group (all of whom maintained ating system for 16-bit computers.[28] In 1980 IBM ap- contact through email). proached Digital Research, at Bill Gates' suggestion,[29] to license a forthcoming version of CP/M for its new ZCPR1 was released on a disk put out by SIG/M (Special product, the IBM Personal Computer. Upon the failure to Interest Group/Microcomputers), a part of the Amateur obtain a signed non-disclosure agreement, the talks failed, Computer Club of New Jersey. and IBM instead contracted with Microsoft to provide ZCPR2 was released on February 14, 1983. It was rean operating system.[30] The resulting product, MS-DOS, leased as a set of ten disks from SIG/M. ZCPR2 was upsoon began outselling CP/M. graded to 2.3, and also was released in 8080 code, perMany of the basic concepts and mechanisms of early ver- mitting the use of ZCPR2 on 8080 and 8085 systems. Although one of the first peripherals for the IBM PC was a SoftCard-like expansion card that let it run 8-bit CP/M software,[31] CP/M rapidly lost market share as the microcomputing market moved to the IBM-compatible platform, and it never regained its former popularity. Byte magazine, at the time one of the leading industry magazines for microcomputers, essentially ceased covering CP/M products within a few years of the introduction of the IBM PC. For example, in 1983 there were still a few advertisements for S100 boards and articles on CP/M software, but by 1987 these were no longer found in the magazine. InfoWorld magazine described the unsuccessful efforts at introducing CP/M based home computers in 1983[32] and in 1986 stated that the Kaypro corporation had stopped production of their 8-bit CP/M-based models to concentrate on sales of MS-DOS compatible systems, long after most other vendors had ceased production of new equipment and software for CP/M.[33] In January 1987, Richard Conn stopped developing ZCPR, and Echelon asked Jay Sage (who already had a privately enhanced ZCPR 3.1) to continue work on it. Thus, ZCPR 3.3 was developed and released. ZCPR33 no longer supported the 8080 series of microprocessors, and added the most features of any upgrade in the ZCPR line. Features of ZCPR as of version 3 included: • shells • aliases • I/O redirection • flow control • named directories • search paths • custom menus • passwords • on line help 82 CHAPTER 5. OPERATING SYSTEM EXAMPLES ZCPR3.3 also included a full complement of utilities with considerably extended capabilities. While enthusiastically supported by the CP/M user base of the time, ZCPR alone was insufficient to slow the demise of CP/M. 5.2.4 Legacy A number of behaviors exhibited by modern versions of Microsoft Windows are a result of backwards compatibility to MS-DOS, which in turn attempted some backwards compatibility with CP/M. The drive letter and 8.3 filename standard in MS-DOS (and early Windows versions) was originally adopted from CP/M.[34] The wildcard matching algorithm used by Windows Command Prompt is based on that of CP/M,[35] as are the reserved filenames used to redirect output to a printer (“PRN”), and the console (“CON”).[36] Also, the character marking the end of some text files can also be attributed to CP/M.[37] Source code releases In 2001 Caldera released CP/M’s source code under an open source license, allowing redistribution and modification, via Tim Olmstead’s “The Unofficial CP/M Web site”.[38][39][40][41] In October 2014, to mark the 40th anniversary of the first presentation of CP/M, the Computer History Museum released early source code versions of CP/M.[42] 5.2.5 See also • 86-DOS • IMDOS • List of machines running CP/M • MP/M • Multiuser DOS • Pascal/mt • Eagle Computer 5.2.6 References [1] CP/M collection is back online with an Open Source licence The Register, November 26, 2001 [2] Mann, Stephen (15 August 1983). “CP/M Plus, a third, updated version of CP/M”. Info World 5 (33): 49ff. ISSN 0199-6649. [3] Newton, Harry (2000). Newton’s Telecom Dictionary. New York, NY: CMP Books. p. 228. ISBN 1-57820053-9. [4] “OLDCOMPUTERS.COM Compupro 8/16”. [5] Cole, Maggie (May 25, 1981). “Gary Kildall and the Digital Research Success Story”. InfoWorld (Palo Alto, CA: Popular Computing) 3 (10): 52–53. ISSN 0199-6649. [6] Freiberger, Paul (July 5, 1982). “History of microcomputing, part 3: software genesis”. InfoWorld (Palo Alto, CA: Popular Computing) 4 (26): 41. ISSN 0199-6649. [7] “The Official Book for the Commodore 128”. Since CP/M was one of the first operating systems, a large number of hobbyists, hackers, and esoteric programmers purchased CP/M computers and began to write programs for themselves... It was offered on the free market in the form of floppy disks distributed at computer “user groups”. [8] Kildall, Gary A. (June 1975), CP/M 1.1 or 1.2 BIOS and BDOS for Lawrence Livermore Laboratories, An excerpt of the BDOS.PLM file header in the PL/M source code of CP/M 1.1 or CP/M 1.2 for Lawrence Livermore Laboratories (LLL):[...] /* C P / M B A S I C I / O S Y S T E M (B I O S) COPYRIGHT (C) GARY A. KILDALL JUNE, 1975 */ [...] /* B A S I C D I S K O P E R A T I N G S Y S T E M (B D O S) COPYRIGHT (C) GARY A. KILDALL JUNE, 1975 */ [...] [9] Kildall, Gary A. (January 1980). “The History of CP/M, THE EVOLUTION OF AN INDUSTRY: ONE PERSON'S VIEWPOINT” (Vol. 5, No. 1, Number 41 ed.). Dr. Dobb’s Journal of Computer Calisthenics & Orthodontia. pp. 6–7. Retrieved 2013-06-03. [...] The first commercial licensing of CP/M took place in 1975 with contracts between Digital Systems and Omron of America for use in their intelligent terminal, and with Lawrence Livermore Laboratories where CP/M was used to monitor programs in the Octopus network. Little attention was paid to CP/M for about a year. In my spare time, I worked to improve overall facilities [...] By this time, CP/M had been adapted for four different controllers. [...] In 1976, Glenn Ewing approached me with a problem: Imsai, Incorporated, for whom Glenn consulted, had shipped a large number of disk subsystems with a promise that an operating system would follow. I was somewhat reluctant to adapt CP/M to yet another controller, and thus the notion of a separated Basic I/O System (BIOS) evolved. In principle, the hardware dependent portions of CP/M were concentrated in the BIOS, thus allowing Glenn, or anyone else, to adapt CP/M to the Imsai equipment. Imsai was subsequently licensed to distribute CP/M version 1.3 which eventually evolved into an operating system called IMDOS. [...] [10] “CP/M Builtin Commands”. discordia.org.uk. Retrieved 2009-01-28. [11] “CP/M Dynamic Debugging Tool”, http://www. gaby.de/cpm/manuals/archive/cpm22htm/ch4.htm; http://www.cpm.z80.de/randyfiles/DRI/DDT.pdf; http://www.shaels.net/index.php/cpm80-22-documents/ using-cpm/7-ddt-utility, all retrieved 2014-08-29 [12] “Whole Earth Software Catalog”. [13] Johnson, Herbert (2009-01-04). “CP/M and Digital Research Inc. (DRI) History”. www.retrotechnology.com. Retrieved 2009-01-28. 5.2. CP/M [14] Warren, Jim (April 1976). “First word on a floppy-disk operating system”. Dr. Dobbs Journal (Menlo Park, CA) 1 (4): 5. Subtitle: Command language & facilities similar to DECSYSTEM-10. [15] Digital Research (1978). "<CP/M>". Pacific Grove, Calif.: Digital Research. OCLC 221485970. [16] Swaine, Michael (1997-04-01). “Gary Kildall and Collegial Entrepreneurship”. Dr. Dobb’s Journal. Retrieved 2006-11-20. [17] Wise, Deborah (1982-05-10). “Mainframe makers court third-party vendors for micro software”. InfoWorld. pp. 21–22. Retrieved 25 January 2015. [18] Bunnell, David (Feb–Mar 1982). “The Man Behind The Machine? / A PC Exclusive Interview With Software Guru Bill Gates”. PC Magazine. p. 16. Retrieved February 17, 2012. [19] Mace, Scott (9–16 January 1984). “IBM PC clone makers shun total compatibility”. InfoWorld. pp. 79–81. Retrieved 4 February 2015. [20] Loguidice, Bill (2012-07-28). “More on Avalon Hill Computer Games on Heath/Zenith platforms”. Armchair Arcade. Retrieved 22 July 2015. [21] Johnson-Laird, Andy (1983). “3”. The programmer’s CP/M handbook. Berkeley, Ca: Osborne/McGraw-Hill. ISBN 0-88134-103-7. [22] Derfler, Frank J. (1982-10-18). “Kaypro II—a lowpriced, 26-pound portable micro”. InfoWorld. p. 59. Retrieved 22 October 2013. [23] Fager, Roger; Bohr, John (September 1983). “The Kaypro II”. BYTE. p. 212. Retrieved 20 October 2013. [24] Digital Research Source Code 83 [32] Scott Mace, CP/M Eludes Home Market, InfoWorld, June 1984 page 46 [33] Nancy Groth, Kaypro is retreating on CP/M, Info World Feb. 1986, page 6 [34] Chen, Raymond. “Why does MS-DOS use 8.3 filenames instead of, say, 11.2 or 16.16?". The Old New Thing. Retrieved December 17, 2010. [35] Chen, Raymond. “How did wildcards work in MSDOS?". The Old New Thing. Retrieved December 17, 2010. [36] Chen, Raymond. “What’s the deal with those reserved filenames like NUL and CON?". The Old New Thing. Retrieved December 17, 2010. [37] Chen, Raymond. “Why do text files end in Ctrl+Z?". The Old New Thing. Retrieved December 17, 2010. [38] The Unofficial CP/M Web site [39] CP/M collection is back online with an Open Source licence The Register, 26 November 2001 [40] [41] License agreement for the CP/M material presented on this site [42] Laws, David (2014-10-01). “Early Digital Research CP/M Source Code”. Computer History Museum. Retrieved 2015-07-25. • Zaks, Rodnay (1980). The CP/M Handbook With MP/M. SYBEX Inc. ISBN 0-89588-048-2. 5.2.7 Further reading [25] Snyder, John J. Ph.D. (June 1983). “A DEC on Every Desk?". BYTE. pp. 104–106. Retrieved 5 February 2015. • ZCPR3, The Manual by Richard Conn: ISBN 0918432-59-6 [26] “M 68 / M 68 MX”. • comp.os.cpm FAQ (also present at this Digital Research related site) [27] Digital Research (1981): XLT86 - 8080 to 8086 Assembly Language Translator - User’s Guide. Digital Research Inc, Pacific Grove [28] Pournelle, Jerry (March 1984). “New Machines, Networks, and Sundry Software”. BYTE. p. 46. Retrieved 22 October 2013. • Z-System Corner: Tenth Anniversary of ZCPR part of The Computer Journal, issue 54 5.2.8 External links [29] Walter Isaacson, The Innovators: How a Group of Inventors, Hackers, Geniuses, and Geeks Created the Digital Revolution (2014, Simon & Schuster, ISBN 9781476708690), page 358 • Digital Research official CP/M page [30] Mary Bellis, Inventors of the Modern Computer Series, The History of the MS-DOS Operating Systems, Microsoft, Tim Paterson, and Gary Kildall (accessed Sept 9, 2010) • The origin of CP/M’s name [31] Magid, Lawrence J. (Feb–Mar 1982). “Baby Blue”. PC. p. 49. Retrieved 4 January 2015. • The origin of CP/M’s name at the Wayback Machine (archived June 11, 2008) • CP/M at DMOZ • CP/M Main Page - Technical information site • CP/M Internals - CP/M internals 84 CHAPTER 5. OPERATING SYSTEM EXAMPLES • The Unofficial CP/M Web site - Includes source growth from a programming languages company to a dicode verse software development firm, providing the company with essential revenue and marketing resources. It was • Triumph of the Nerds - This PBS series includes the also the underlying basic operating system on which early details of IBM’s choice of Microsoft DOS over Dig- versions of Windows ran as a GUI. It is a flexible operatital Research’s CP/M for the IBM PC ing system, and consumes negligible installation space. • Gaby’s Homepage for CP/M and Computer History - includes ZCPR materials 5.3.1 History • N8VEM Google Group - An active group (2009) building open source CP/M boards, peripherals and Further information: DOS and Timeline of DOS operatwireless links. ing systems • Create a complete CP/M machine with RS-232 port [11] – owned by using only 9 ICs at the Wayback Machine (archived MS-DOS was a renamed form of 86-DOS Seattle Computer Products, written by Tim Paterson. DeJune 20, 2012) - By Grant Searle velopment of 86-DOS took only six weeks, as it was ba• Intel iPDS-100 Using CP/M-Video sically a clone of Digital Research's CP/M (for 8080/Z80 processors), ported to run on 8086 processors and with two notable differences compared to CP/M; an improved disk sector buffering logic and the introduction of FAT12 5.3 MS-DOS instead of the CP/M filesystem. This first version was shipped in August 1980.[5] Microsoft, which needed an This article is about Microsoft DOS. For other operating operating system for the IBM Personal Computer[7][8] systems of the DOS family, see DOS. hired Tim Paterson in May 1981 and bought 86-DOS 1.10 for $75,000 in July of the same year. Microsoft MS-DOS (/ˌɛmɛsˈdɒs/ EM-es-DOSS; acronym for Mi- kept the version number, but renamed it MS-DOS. They crosoft Disk Operating System) is an operating sys- also licensed MS-DOS 1.10/1.14 to IBM, who, in August tem for x86-based personal computers mostly developed 1981, offered it as PC DOS 1.0 as one of three operating by Microsoft. It was the most commonly used member systems[12] for the IBM 5150, or the IBM PC.[5] of the DOS family of operating systems, and was the Within a year Microsoft licensed MS-DOS to over 70 main operating system for IBM PC compatible personal other companies.[13] It was designed to be an OS that computers during the 1980s to the mid-1990s, when it could run on any 8086-family computer. Each computer was gradually superseded by operating systems offering would have its own distinct hardware and its own vera graphical user interface (GUI), in various generations sion of MS-DOS, similar to the situation that existed for of the graphical Microsoft Windows operating system by CP/M, and with MS-DOS emulating the same solution Microsoft Corporation. as CP/M to adapt for different hardware platforms. To MS-DOS resulted from a request in 1981 by IBM for an operating system to use in its IBM PC range of personal computers.[7][8] Microsoft quickly bought the rights to 86-DOS from Seattle Computer Products,[9] and began work on modifying it to meet IBM’s specification. IBM licensed and released it in August 1981 as PC DOS 1.0 for use in their PCs. Although MS-DOS and PC DOS were initially developed in parallel by Microsoft and IBM, in subsequent years the two products went their separate ways. During its life, several competing products were released for the x86 platform,[10] and MS-DOS went through eight versions, until development ceased in 2000. Initially MSDOS was targeted at Intel 8086 processors running on computer hardware using floppy disks to store and access not only the operating system, but application software and user data as well. Progressive version releases delivered support for other mass storage media in ever greater sizes and formats, along with added feature support for newer processors and rapidly evolving computer architectures. Ultimately it was the key product in Microsoft’s this end, MS-DOS was designed with a modular structure with internal device drivers, minimally for primary disk drives and the console, integrated with the kernel and loaded by the boot loader, and installable device drivers for other devices loaded and integrated at boot time. The OEM would use a development kit provided by Microsoft to build a version of MS-DOS with their basic I/O drivers and a standard Microsoft kernel, which they would typically supply on disk to end users along with the hardware. Thus, there were many different versions of “MS-DOS” for different hardware, and there is a major distinction between an IBM-compatible (or ISA) machine and an MS-DOS [compatible] machine. Some machines, like the Tandy 2000, were MS-DOS compatible but not IBMcompatible, so they could run software written exclusively for MS-DOS without dependence on the peripheral hardware of the IBM PC architecture. This design would have worked well for compatibility, if application programs had only used MS-DOS services to perform device I/O, and indeed the same design philosophy is embodied in Windows NT (see Hardware Ab- 5.3. MS-DOS straction Layer). However, in MS-DOS’s early days, the greater speed attainable by programs through direct control of hardware was of particular importance, especially for games, which often pushed the limits of their contemporary hardware. Very soon an IBM-compatible architecture became the goal, and before long all 8086-family computers closely emulated IBM’s hardware, and only a single version of MS-DOS for a fixed hardware platform was needed for the market. This version is the version of MS-DOS that is discussed here, as the dozens of other OEM versions of “MS-DOS” were only relevant to the systems they were designed for, and in any case were very similar in function and capability to some standard version for the IBM PC—often the same-numbered version, but not always, since some OEMs used their own proprietary version numbering schemes (e.g. labeling later releases of MS-DOS 1.x as 2.0 or vice versa)—with a few notable exceptions. On 25 March 2014, Microsoft made the code to SCP MS-DOS 1.25 and a mixture of Altos MS-DOS 2.11 and TeleVideo PC DOS 2.11 available to the public under the Microsoft Research License Agreement, which makes the code source-available, but not open source as defined by Open Source Initiative or Free Software Foundation standards.[2][3][4][14] As an April Fools joke in 2015, Microsoft Mobile launched a Windows Phone application called MS-DOS Mobile which was presented as a new mobile operating system and worked similar to MS-DOS.[15] 5.3.2 Versions Main articles: Comparison of DOS operating systems and Timeline of DOS operating systems Microsoft licensed or released versions of MS-DOS under different names like Lifeboat Associates “Software Bus 86”[16] aka SB-DOS,[10] COMPAQ-DOS,[16] NCRDOS or Z-DOS[10] before it eventually enforced the MSDOS name for all versions but the IBM one, which was originally called “IBM Personal Computer DOS”, later shortened to IBM PC DOS. (Competitors released compatible DOS systems such as DR DOS and PTS-DOS that could also run DOS applications.) The following versions of MS-DOS were released to the public:[17][18] • MS-DOS 1.x • Version 1.10 (OEM) – possible basis for IBM’s Personal Computer DOS 1.0 • Version 1.11 (OEM) – possible basis for IBM’s Personal Computer DOS 1.0 • Version 1.14 (OEM) – possible basis for IBM’s Personal Computer DOS 1.0 85 • Version 1.24 (OEM) – basis for IBM’s Personal Computer DOS 1.1 • Version 1.25 (OEM) – basis for non-IBM OEM versions of MS-DOS, including SCP MS-DOS 1.25 • Compaq-DOS 1.12, a Compaq OEM version of MS-DOS (1.25 or higher) • Zenith Z-DOS 1.19, a Zenith OEM version of MS-DOS (1.25 or higher)[19] • MS-DOS 2.x – Support for 10 MB hard disk drives and tree-structure filing system • Version 2.0 (OEM) • Version 2.1 (OEM) • Version 2.11 (OEM) • Altos MS-DOS 2.11, an Altos OEM version of MS-DOS 2.11 for the ACT-86C • TeleVideo PC DOS 2.11, an TeleVideo OEM version of MS-DOS 2.11 • MS-DOS 3.x • Version 3.0 (OEM) – Support for FAT16. First version to support 5.25 inch, 1.2 MB floppy drives and diskettes. • Version 3.1 (OEM) – Support for Microsoft Networks • Version 3.11 (OEM) - First version to support 3.5 inch, 720 kB floppy drives and diskettes. • Version 3.2 (OEM) • Version 3.21 (OEM) • Version 3.22 (OEM) - (HP 95LX) • Version 3.25 (OEM) • Version 3.3 (OEM) - First version to support 3.5 inch, 1.44 MB floppy drives and diskettes. • Version 3.3a (OEM) • Version 3.31 (OEM)[20] – supports FAT16B and larger drives.[21] • MS-DOS 4.0 (multitasking) and MS-DOS 4.1 A separate branch of development with additional multitasking features, released between 3.2 and 3.3, and later abandoned. It is unrelated to any later versions, including versions 4.00 and 4.01 listed below • MS-DOS 4.x (IBM-developed) – includes a graphical/mouse interface. It had many bugs and compatibility issues.[22] • Version 4.00 (OEM) - First version to support a single hard disk partition that is greater than 32 MiB and up to a maximum size of 2 GiB (SHARE.EXE was required to be loaded to access these partitions).[23] 86 CHAPTER 5. OPERATING SYSTEM EXAMPLES • Version 4.01 (OEM) – Microsoft rewritten Version 4.00 released under MS-DOS label but not IBM PC-DOS. First version to introduce volume serial number when formatting hard disks and floppy disks (Disk duplication also[24] and when using SYS to make a floppy disk or a partition of a hard drive bootable).[25] • Version 8.0 (Windows ME) – Integrated drivers for faster Windows loading. Four different kernels (IO.SYS) observed.[27] • Version 8.0 (Windows XP) – DOS boot disks created by XP and later contain files from Windows ME. The internal command prompt still reports version 5.0 • Version 4.01a (OEM) Microsoft DOS was released through the OEM channel, until DRI released DR DOS 5.0 as a retail upgrade. With PC DOS 5.00.1, the IBM-Microsoft agreement started to • Version 5.0 (Retail) – includes a full-screen end, and IBM entered the retail DOS market with IBM editor. A number of bugs required re is- DOS 5.00.1, 5.02, 6.00 and PC DOS 6.1, 6.3, 7, 2000 sue. First version to support 3.5 inch, 2.88 and 7.1. MB floppy drives and diskettes. Hard disk Localized versions of MS-DOS existed for different partitions greater than 32 MiB and up to a markets.[28] While Western issues of MS-DOS evolved maximum size of 2 GiB no longer required around the same set of tools and drivers just with localSHARE.EXE to be loaded in order to access ized message languages and differing sets of supported them. Support was now provided by the MScodepages and keyboard layouts, some language versions DOS kernel.[23] were considerably different from Western issues and were • AST Premium Exec DOS 5.0 (OEM) - a adapted to run on localized PC hardware with additional version for the AST Premium Exec series BIOS services not available in Western PCs, support mulof notebooks with various extensions, in- tiple hardware codepages for displays and printers, supcluding improved load-high and extended port DBCS, alternative input methods and graphics outcodepage support put. Affected issues include Japanese (DOS/V), Korean, • Version 5.0a (Retail) – With this release, IBM Arabic (ADOS 3.3/5.0), Hebrew (HDOS 3.3/5.0), Russian (RDOS 4.01/5.0) as well as some other Eastern Euand Microsoft versions diverge. ropean versions of DOS. • Version 5.0.500 (WinNT) – All Windows NT 32-bit versions ship with files from DOS 5.0 • MS-DOS 5.x • MS-DOS 6.x 5.3.3 Competition On microcomputers based on the Intel 8086 and 8088 • Version 6.0 (Retail) – Online help through processors, including the IBM PC and clones, the iniQBASIC. Disk compression, upper memory tial competition to the PC DOS/MS-DOS line came from optimization and antivirus included. Digital Research, whose CP/M operating system had in• Version 6.2 – Scandisk as replacement for spired MS-DOS. In fact, there remains controversy as CHKDSK. Fix serious bugs in DBLSPACE. to whether QDOS was more or less plagiarised from • Version 6.21 (Retail) – Stacker-infringing early versions of CP/M code. Digital Research released CP/M-86 a few months after MS-DOS, and it was ofDBLSPACE removed. fered as an alternative to MS-DOS and Microsoft’s licens• Version 6.22 (Retail) – New DRVSPACE ing requirements, but at a higher price. Executable procompression.[26] grams for CP/M-86 and MS-DOS were not interchangeable with each other; many applications were sold in both • MS-DOS 7.x MS-DOS and CP/M-86 versions until MS-DOS became • Version 7.0 (Windows 95, Windows 95A) – preponderant (later Digital Research operating systems Support for VFAT long file names and 32-bits could run both MS-DOS and CP/M-86 software). MSsigned integer errorlevel. New editor. JO.SYS DOS originally supported the simple .COM, which was is an alternative filename of the IO.SYS kernel modelled after a similar but binary incompatible format file and used as such for “special purposes”. known from CP/M-80. CP/M-86 instead supported a reJO.SYS allows booting from either CD-ROM locatable format using the file extension .CMD to avoid drive or hard disk. Last version to recognize name conflicts with CP/M-80 and MS-DOS .COM files. MS-DOS version 2.0 added a more advanced relocatable only the first 8.4 GB of a hard disk. .EXE executable file format. • Version 7.1 (Windows 95B – Windows 98SE) – Support for FAT32 file system. Last general Most of the machines in the early days of MS-DOS had differing system architectures and there was a certain depurpose DOS to load Windows. gree of incompatibility, and subsequently vendor lock• MS-DOS 8.0 in. Users who began using MS-DOS with their machines 5.3. MS-DOS 87 Microsoft and IBM together began what was intended as the follow-on to MS-DOS/PC DOS, called OS/2. When OS/2 was released in 1987, Microsoft began an advertising campaign announcing that “DOS is Dead” and stating that version 4 was the last full release. OS/2 was designed for efficient multi-tasking — an IBM speciality derived from deep experience with mainframe operating systems — and offered a number of advanced features that had been designed together with similar look and feel; it was seen as the legitimate heir to the “kludgy” DOS platform. MS-DOS had grown in spurts, with many significant features being taken or duplicated from Microsoft’s other products and operating systems. MS-DOS also grew by incorporating, by direct licensing or feature duplicating, the functionality of tools and utilities developed by independent companies, such as Norton Utilities, PC Tools (Microsoft Anti-Virus), QEMM expanded memory manager, Stacker disk compression, and others. The original MS-DOS advertisement in 1981. During the period when Digital Research was competing in the operating system market some computers, like Amstrad PC1512, were sold with floppy disks for two operating systems (only one of which could be used at a time), MS-DOS and CP/M-86 or a derivative of it. Digital Research produced DOS Plus, which was compatible with MS-DOS 2.11, supported CP/M-86 programs, had additional features including multi-tasking, and could read and write disks in CP/M and MS-DOS format. While OS/2 was under protracted development, Digital were compelled to continue using the version customized Research released the MS-DOS compatible DR DOS 5.0, for their hardware, or face trying to get all of their propriwhich included features only available as third-party addetary hardware and software to work with the new system. ons for MS-DOS. Unwilling to lose any portion of the In the business world the 808x-based machines that MS- market, Microsoft responded by announcing the “pendDOS was tied to faced competition from the Unix operat- ing” release of MS-DOS 5.0 in May 1990. This efing system which ran on many different hardware archi- fectively killed most DR DOS sales until the actual retectures. Microsoft itself sold a version of Unix for the lease of MS-DOS 5.0 in June 1991. Digital Research PC called Xenix. brought out DR DOS 6.0, which sold well until the “preIn the emerging world of home users, a variety of other announcement” of MS-DOS 6.0 again stifled the sales of computers based on various other processors were in se- DR DOS. rious competition with the IBM PC: the Apple II, early Apple Macintosh, the Commodore 64 and others did not use the 808x processor; many 808x machines of different architectures used custom versions of MS-DOS. At first all these machines were in competition. In time the IBM PC hardware configuration became dominant in the 808x market as software written to communicate directly with the PC hardware without using standard operating system calls ran much faster, but on true PC-compatibles only. Non-PC-compatible 808x machines were too small a market to have fast software written for them alone, and the market remained open only for IBM PCs and machines that closely imitated their architecture, all running either a single version of MS-DOS compatible only with PCs, or the equivalent IBM PC DOS. Most clones cost much less than IBM-branded machines of similar performance, and became widely used by home users, while IBM PCs had a large share of the business computer market. Microsoft had been accused of carefully orchestrating leaks about future versions of MS-DOS in an attempt to create what in the industry is called FUD (fear, uncertainty, and doubt) regarding DR DOS. For example, in October 1990, shortly after the release of DR DOS 5.0, and long before the eventual June 1991 release of MSDOS 5.0, stories on feature enhancements in MS-DOS started to appear in InfoWorld and PC Week. Brad Silverberg, Vice President of Systems Software at Microsoft and General Manager of its Windows and MS-DOS Business Unit, wrote a forceful letter to PC Week (November 5, 1990), denying that Microsoft was engaged in FUD tactics (“to serve our customers better, we decided to be more forthcoming about version 5.0”) and denying that Microsoft copied features from DR DOS: “The feature enhancements of MS-DOS version 5.0 were decided and development was begun long before we heard about DR DOS 88 CHAPTER 5. OPERATING SYSTEM EXAMPLES 5.0. There will be some similar features. With 50 million MS-DOS users, it shouldn't be surprising that DRI has heard some of the same requests from customers that we have.” – (Schulman et al. 1994).[29] ment to be $280m.[31] 5.3.5 Use of undocumented APIs Microsoft also used a variety of tactics in MS-DOS and The pact between Microsoft and IBM to promote OS/2 several of their applications and development tools that, began to fall apart in 1990 when Windows 3.0 became a while operating perfectly when running on genuine MSmarketplace success. Much of Microsoft’s further con- DOS (and PC DOS), would break when run on another tributions to OS/2 also went into creating a third GUI re- vendor’s implementation of DOS. Notable examples of this practice included: placement for DOS, Windows NT. IBM, which had already been developing the next version of OS/2, carried on development of the platform without Microsoft and sold it as the alternative to DOS and Windows. 5.3.4 Legal issues As a response to Digital Research's DR DOS 6.0, which bundled SuperStor disk compression, Microsoft opened negotiations with Stac Electronics, vendor of the most popular DOS disk compression tool, Stacker. In the due diligence process, Stac engineers had shown Microsoft part of the Stacker source code. Stac was unwilling to meet Microsoft’s terms for licensing Stacker and withdrew from the negotiations. Microsoft chose to license Vertisoft’s DoubleDisk, using it as the core for its DoubleSpace disk compression.[30] MS-DOS 6.0 and 6.20 were released in 1993, both including the Microsoft DoubleSpace disk compression utility program. Stac successfully sued Microsoft for patent infringement regarding the compression algorithm used in DoubleSpace. This resulted in the 1994 release of MS-DOS 6.21, which had disk-compression removed. Shortly afterwards came version 6.22, with a new version of the disk compression system, DriveSpace, which had a different compression algorithm to avoid the infringing code. Prior to 1995, Microsoft licensed MS-DOS (and Windows) to computer manufacturers under three types of agreement: per-processor (a fee for each system the company sold), per-system (a fee for each system of a particular model), or per-copy (a fee for each copy of MSDOS installed). The largest manufacturers used the perprocessor arrangement, which had the lowest fee. This arrangement made it expensive for the large manufacturers to migrate to any other operating system, such as DR DOS. In 1991, the U.S. government Federal Trade Commission began investigating Microsoft’s licensing procedures, resulting in a 1994 settlement agreement limiting Microsoft to per-copy licensing. Digital Research did not gain by this settlement, and years later its successor in interest, Caldera, sued Microsoft for damages in the Caldera v. Microsoft lawsuit. It was believed that the settlement ran in the order of $150m, but was revealed in November 2009 with the release of the Settlement Agree- • Microsoft’s QuickPascal released in early 1989 was the first MS product that checked for MS-DOS by modifying the program’s Program Segment Prefix using undocumented DOS functions, and then checked whether or not the associated value changed in a fixed position within the DOS data segment (also undocumented). This check also made it into later MS products, including Microsoft QuickC v2.5, Programmer’s Workbench and Microsoft C v6.0.[29] • The AARD code, a block of code in the windows launcher (WIN.COM) and a few other system files of Windows 3.1. It was XOR encrypted, selfmodifying, and deliberately obfuscated, using various undocumented DOS structures and functions to determine whether or not Windows really was running on MS-DOS.[29] In the beta versions, it displayed an “error” message if the test for genuine MSDOS failed, prompting the user to abort or continue, with abort the default. In the final release version, the code still ran, but the message and prompt were disabled by an added flag byte, rendering it (probably) ineffectual. • Note that the Windows 3.0 beta code only gave a warning that Windows would not operate properly on a “foreign” OS. It did in fact run just fine on DR DOS 6.0. • Interrupt routines called by Windows to inform MSDOS that Windows is starting/exiting, information that MS-DOS retained in an IN_WINDOWS flag, in spite of the fact that MS-DOS and Windows were supposed to be two separate products.[29] 5.3.6 End of MS-DOS With the release of Windows 95 (and continuing in the Windows 9x product line through to Windows ME), an integrated version of MS-DOS was used for bootstrapping, troubleshooting, and backwardscompatibility with old DOS software, particularly games, and no longer released as a standalone product. In Windows 95, the DOS, called MS-DOS 7, can be booted separately, without the Windows GUI; this capability was retained through Windows 98 Second Edition. Windows 5.3. MS-DOS 89 DOS and variously Win32, OS/2 1.x and POSIX command line utilities in the same command-line session, allowing piping between commands. The user interface, and the icon up to Windows 2000, followed the native MS-DOS interface. As of 2011, MS-DOS is still used in some enterprises to run legacy applications, such as this US Navy food service management system. The 16-bit versions of Windows (up to 3.11) ran as a Graphical User Interface (GUI) on top of MS-DOS. With Windows 95, 98, 98 SE and ME, the MS-DOS part was (superficially) integrated, treating both operating systems as a complete package, though the DOS component could actually stand alone. The command line accessed the DOS command line (usually COMMAND.COM), through a Windows module (WINOLDAP.MOD). A new line of Windows, (Windows NT), boot through a kernel whose sole purpose is to load Windows. One can not run Win32 applications in the loader system in the manner that OS/2, UNIX or Consumer Windows can Me removed the capability to boot its underlying MS- launch character mode sessions. DOS 8.0 alone from a hard disk, but retained the ability to make a DOS boot floppy disk (called an “Emergency The command session permits running of various supBoot Disk”) and can be hacked to restore full access to ported command line utilities from Win32, MS-DOS, OS/2 1.x and POSIX. The emulators for MS-DOS, OS/2 the underlying DOS. and POSIX use the host’s window in the same way that In contrast to the Windows 9x series, the Windows NT- Win16 applications use the Win32 explorer. Using the derived operating systems developed alongside the 9x se- host’s window allows one to pipe output between emularies (Windows NT, 2000, XP and newer) do not con- tions. tain MS-DOS as part of the operating system, but provide a subset of DOS emulation to run DOS applications The MS-DOS emulation is done through the NTVDM and provide DOS-like command prompt windows (“DOS (NT Virtual DOS Machine). This is a modified SoftPC boxes”). Windows XP contains a copy of the Windows (a former product similar to VirtualPC), running a modiME boot disk, stripped down to bootstrap only. This is fied MS-DOS 5 (NTIO.SYS and NTDOS.SYS). The outaccessible only by formatting a floppy as an “MS-DOS put is handled by the console DLLs, so that the program startup disk”. Files like the driver for the CD-ROM sup- at the prompt (CMD.EXE, 4NT.EXE, TCC.EXE), can port were deleted from the Windows ME bootdisk and see the output. 64-bit Windows does not have either the the startup files (AUTOEXEC.BAT and CONFIG.SYS) DOS emulation, or the DOS commands (EDIT, DEBUG, no longer had content. This modified disk was the base EDLIN), that come with 32-bit Windows. for creating the MS-DOS image for Windows XP. Some The DOS version returns 5.00 or 5.50, depending on of the deleted files can be recovered with an undelete which API function is used to determine it. Utilities from tool.[32] With Windows Vista the files on the startup disk MS-DOS 5.00 run in this emulation without modificaare dated 18 April 2005 but are otherwise unchanged, tion. The very early beta programs of NT show MS-DOS including the string “MS-DOS Version 8 © Copyright 30.00, but programs running in MS-DOS 30.00 would 1981–1999 Microsoft Corp” inside COMMAND.COM. assume that OS/2 was in control. The only versions of MS-DOS currently recognized as stand-alone OSs and supported as such by Microsoft are MS-DOS 6.0 and 6.22, both of which remain available for download via their MSDN, volume license, and OEM license partner websites, for customers with valid login credentials. MS-DOS is still used in embedded x86 systems due to its simple architecture and minimal memory and processor requirements, though some current products have switched to the still-maintained open-source alternative FreeDOS. The OS/2 emulation is handled through OS2SS.EXE and OS2.EXE, and DOSCALLS.DLL. OS2.EXE is a version of the OS/2 shell (CMD.EXE), which passes commands down to the OS2SS.EXE, and input-output to the Windows NT shell. Windows 2000 was the last version of NT to support OS/2. The emulation is OS/2 1.30. POSIX is emulated through the POSIX shell, but no emulated shell: the commands are handled directly in CMD.EXE. The Command Prompt is often called the MS-DOS prompt. In part, this was the official name for it in Windows 9x and early versions of Windows NT (NT 5.3.7 Windows command-line interface 3.5 and earlier), and in part because the SoftPC emuAll versions of Microsoft Windows have had an MS-DOS lation of DOS redirects output into it. Actually only like command-line interface (CLI). This could run many COMMAND.COM and other 16bit commands run in a 90 CHAPTER 5. OPERATING SYSTEM EXAMPLES NTVDM with AUTOEXEC.NT and CONFIG.NT initialisation determined by _default.pif, optionally permitting the use of Win32 console applications and internal commands with a NTCMDPROMPT directive. Win32 console applications use CMD.EXE as their command prompt shell. This confusion does not exist under OS/2 because there are separate DOS and OS/2 prompts, and running a DOS program under OS/2 will launch a separate DOS window to run the application. All versions of Windows for x86-64 and Itanium architectures no longer include the NTVDM and can therefore no longer natively run MS-DOS or 16-bit Windows applications. There are alternatives in the form of Virtual machine emulators such as Microsoft’s own Virtual PC, as well as VMware, DOSBox, and others. 5.3.8 Legacy compatibility with Novell DOS 7, DR DOS' successor, following the next month.[33] ) What made the difference in the end was Microsoft’s control of the Windows platform and their programming practices which intentionally made Windows appear as if it ran poorly on competing versions of DOS.[29] DRI had to release interim releases to circumvent Windows limitations inserted artificially,[29] designed specifically to provide Microsoft with an unfair competitive advantage.[29] • PC DOS, • DR DOS / Novell DOS / OpenDOS, • GNU/DOS / FreeDOS • PTS-DOS, • ROM-DOS. From 1983 onwards, various companies worked on graphical user interfaces (GUIs) capable of running on PC hardware. However, this required duplication of ef- These products are collectively referred to as DOS. Howfort and did not provide much consistency in interface ever, MS-DOS can be a generic reference to DOS on design (even between products from the same company). IBM-PC compatible computers. Later, in 1985, Microsoft Windows was released as Microsoft’s first attempt at providing a consistent user interface (for applications). The early versions of Windows 5.3.10 See also ran on top of MS-DOS and its clones. At first Windows met with little success, but this was also true for most • 4DOS – designed to replace the default command other companies’ efforts as well, for example GEM. After interpreter COMMAND.COM version 3.0 (1990), Windows gained market acceptance. Windows 9x used the DOS boot process to launch into protected mode. Basic features related to the file system, such as long file names, were only available to DOS when running as a subsystem of Windows. Windows NT runs independently of DOS but includes NTVDM, a component for simulating a DOS environment for legacy applications. • Bad command or file name 5.3.9 • List of DOS commands Related systems Main article: DOS Several similar products were produced by other companies. In the case of PC DOS and DR DOS, it is common but incorrect to call these “clones”. Given that Microsoft manufactured PC DOS for IBM, PC DOS and MS-DOS were (to continue the genetic analogy) “identical twins” that diverged only in adulthood and eventually became quite different products. Although DR DOS is regarded as a clone of MS-DOS, the DR DOS versions appeared months and years before Microsoft’s products. (For example, MS-DOS 4, released in July 1988, was followed by DR DOS 5.0 in May 1990. MS-DOS 5.0 came in April 1991, with DR DOS 6.0 being released the following June. MS-DOS 6.0 did not arrive until April 1993, • Comparison of DOS operating systems • DOSBox • History of Microsoft Windows • List of Microsoft Windows versions • List of MS-DOS games • Microsoft Windows • MS-DOS API • Tao ExDOS – Commercial solution for DOS software on new Windows systems. • Timeline of DOS operating systems • Win32 console – a text-rendering system akin to MS-DOS 5.3. MS-DOS 5.3.11 References [1] Paterson, Tim. “An Inside Look at MS-DOS”. Seattle Computer Products. Seattle. Archived from the original on 4 February 2001. [2] Paterson, Tim (2013-12-19) [1983]. “Microsoft DOS V1.1 and V2.0: /msdos/v11source/MSDOS.ASM”. Computer History Museum, Microsoft. Retrieved 2014-03-25. (NB. While the publishers claim this would be MS-DOS 1.1 and 2.0, it actually is SCP MS-DOS 1.25 and a mixture of Altos MS-DOS 2.11 and TeleVideo PC DOS 2.11.) [3] Shustek, Len (2014-03-24). “Microsoft MS-DOS early source code”. Software Gems: The Computer History Museum Historical Source Code Series. Retrieved 201403-29. (NB. While the author claims this would be MSDOS 1.1 and 2.0, it actually is SCP MS-DOS 1.25 and a mixture of Altos MS-DOS 2.11 and TeleVideo PC DOS 2.11.) [4] Levin, Roy (2014-03-25). “Microsoft makes source code for MS-DOS and Word for Windows available to public”. Official Microsoft Blog. Retrieved 2014-03-29. (NB. While the author claims this would be MS-DOS 1.1 and 2.0, it actually is SCP MS-DOS 1.25 and a mixture of Altos MS-DOS 2.11 and TeleVideo PC DOS 2.11.) [5] “MS-DOS: A Brief Introduction”. The Linux Information Project. Retrieved 24 December 2012. [6] “Obsolete Products Life-Cycle Policy”. Microsoft. July 30, 2009. Retrieved 6 April 2010. [7] “A history of Windows”. Microsoft. Retrieved 6 May 2015. [8] “Digital Research - History of MS-DOS”. Digital Research. Retrieved 6 May 2015. [9] “A Short History of MS-DOS”. Archived from the original on 2013-08-01. [10] Allan, Roy A. (2001). “Microsoft in the 1980s, part III 1980s — The IBM/Macintosh era”. A history of the personal computer: the people and the technology. London, Ontario: Allan Pub. p. 14. ISBN 0-9689108-0-7. Retrieved December 5, 2009. [11] Conner, Doug. “Father of DOS Still Having Fun at Microsoft”. Micronews. Retrieved December 5, 2009. [12] “Personal Computer Announced by IBM” (PDF). Retrieved September 27, 2014. [13] Freiberger, Paul (1982-08-23). “Bill Gates, Microsoft and the IBM Personal Computer”. InfoWorld. p. 22. Retrieved 29 January 2015. [14] Phipps, Simon (2014-03-26). “Psych! Microsoft didn't really open-source MS-DOS”. InfoWorld. Retrieved 2014-03-27. [15] Luke Peters (2015-04-01). “Microsoft launches MS-DOS Mobile”. Microsoft Lumia. Retrieved 2015-04-02. The MS-DOS Mobile preview is an essential download 91 [16] Ray Duncan (1988). The MS-DOS Encyclopedia – version 1.0 through 3.2. Microsoft Press. ISBN 1-55615-049-0. [17] “MS-DOS Versions Information”. Emsps.com. Retrieved 2012-09-27. [18] DAN. “DOS history”. Pcmuseum.tripod.com. Retrieved 2012-09-27. [19] “ultrawindows.nl”. ultrawindows.nl. Retrieved 2012-0927. [20] Confirmed that there was Compaq Personal Computer DOS 3.31 aside from MS-DOS 3.31 . [21] Up to 512 MiB only. [22] Shultz, Greg (2006-11-06). “Dinosaur Sightings: Installing MS-DOS 4”. TechRepublic. CBS Interactive. Retrieved 2014-03-30. [23] “MS-DOS Partitioning Summary”. support.microsoft.com. Microsoft Corporation. Retrieved 17 June 2015. [24] Only if boot record of source floppy disk contains volume serial number also. [25] “DOS 4.0: About volume serial number”. Faqs.org. Retrieved 2012-09-27. [26] “MS-DOS 6 Technical Reference”. Microsoft TechNet. Retrieved 2014-02-13. [27] One for the floppy disk, one for a bootable partition of a hard disk, the other two are not known. [28] “Country”. MS-DOS 6 Technical Reference. TechNet. ANSI.SYS. Retrieved 2014-04-01. [29] Schulman, Andrew (1994). Undocumented DOS: A Programmer’s Guide to Reserved MS-DOS Functions and Data Structures (2nd ed.). Addison-Wesley. ISBN 0-20163287-X. [30] BYTE Magazine, How Safe is Disk Compression?, February, 1994. [31] “Exhibits to Microsoft’s Cross Motion for Summary Judgment in Novell WordPerfect Case”. Groklaw. 2009-1123. Retrieved 2011-10-22. [32] Sedory, Daniel B. (8 December 2004). “Windows XP MS-DOS Startup Disk”. The Starman’s Realm. Archived from the original on 24 October 2010. [33] Comerford, M. “DOS Timeline ~ Part One ~ 1980 to 1993”. PowerLoad. Archived from the original on 24 February 2006. Retrieved 18 June 2015. 5.3.12 External links • MS-DOS Source - MS-DOS 1.1 and MS-DOS 2.0 Source Code at Computer History Museum • MS-DOS overview - on Microsoft website 92 CHAPTER 5. OPERATING SYSTEM EXAMPLES • Current License Agreement Policies for MS-DOS and Windows As of July 2015, the most recent version of Windows for personal computers, tablets and smartphones is Windows 10. The most recent versions for server computers and • Tim Paterson on DOS – Paterson wrote the QDOS embedded devices are respectively Windows Server 2012 OS R2 and Windows Embedded 8. A specialized version of Windows runs on the Xbox One game console.[5] • Richard Bonner’s DOS website The next server version of Windows is Windows Server • Batfiles – the DOS batch file programming hand- 2016, which is expected to be released in early 2016. book and tutorial • Arachne graphical browser for DOS • Linux/dosemu 5.4.1 Genealogy By marketing role • Ralf Brown’s Interrupt List Microsoft, the developer of Windows, has registered several trademarks each of which denote a family of Windows operating systems that target a specific sector of the • Garbo – An MS-DOS program distribution library computing industry. As of 2014, the following Windows at the University of Vaasa, Finland families are being actively developed: • DOSBox, a multiplatform DOS emulator • MS-DOS 6 Technical Reference at Microsoft TechNet • Promotional video for MS-DOS 5 • Testing MS-DOS limitations. 5.4 Microsoft Windows “Windows” redirects here. For the part of a building, see window. For other uses, see Windows (disambiguation). Microsoft Windows (or simply Windows) is a metafamily of graphical operating systems developed, marketed, and sold by Microsoft. It consists of several families of operating systems, each of which cater to a certain sector of the computing industry. Active Windows families include Windows NT, Windows Embedded and Windows Phone; these may encompass subfamilies, e.g. Windows Embedded Compact (Windows CE) or Windows Server. Defunct Windows families include Windows 9x and Windows Mobile. Microsoft introduced an operating environment named Windows on November 20, 1985, as a graphical operating system shell for MS-DOS in response to the growing interest in graphical user interfaces (GUIs).[4] Microsoft Windows came to dominate the world’s personal computer market with over 90% market share, overtaking Mac OS, which had been introduced in 1984. However, since 2012, thanks to massive grow of smartphones, it sells less than Android, which became the most popular operating system in 2014, when counting all of the computing platforms Windows runs on (same as Android); in 2014, the number of Windows devices sold were less than 25% of Android devices sold. But comparison across different markets is not fully relevant, and for personal computer is Windows still number one platform. • Windows NT: Started as a family of operating system with Windows NT 3.1, an operating system for server computers and workstations. It now consists of three operating system subfamilies that are released almost at the same time and share the same kernel • Windows: The operating system for mainstream personal computers. The latest version is Windows 10. It is almost impossible for someone unfamiliar with the subject to identify the members of this family by name because they do not adhere to any specific rule; e.g. Windows Vista, Windows 7, Windows 8/8.1 and Windows RT are members of this family but Windows 3.1 is not. The main competitor of this family is OS X by Apple Inc. (c.f. Usage share of operating systems § Market share by category) • Windows Server: The operating system for server computers. The latest version is Windows Server 2012 R2. Unlike its clients sibling, it has adopted a strong naming scheme. The main competitor of this family is Linux. (c.f. Usage share of operating systems § Market share by category) • Windows PE: A lightweight version of its Windows sibling meant to operate as a live operating system, used for installing Windows on bare-metal computers (especially on many computers at once), recovery or troubleshooting purposes. The latest version is Windows PE 5.1. • Windows Phone: An operating system sold only to manufacturers of smartphones. The first version was Windows Phone 7. The latest version is Windows Phone 8.1. The main competitor of this family is 5.4. MICROSOFT WINDOWS 93 Android by Google. (c.f. Usage share of operating systems § Market share by category) • Windows Embedded: Initially, Microsoft developed Windows CE as a general-purpose operating system for every device that was too resourcelimited to be called a full-fledged computer. Eventually, however, Windows CE was renamed Windows Embedded Compact and was folded under Windows Compact trademark which also consists of Windows Embedded Industry, Windows Embedded Professional, Windows Embedded Standard, Windows 1.0, the first version, released in 1985 Windows Embedded Handheld and Windows Embedded Automotive.[6] Executive. Components included Calculator, CalenThe following Windows families are no longer being de- dar, Cardfile, Clipboard viewer, Clock, Control Panel, Notepad, Paint, Reversi, Terminal and Write. Windows veloped: 1.0 does not allow overlapping windows. Instead all windows are tiled. Only modal dialog boxes may appear over • Windows 9x: An operating system that targeted other windows. consumers market. Discontinued because of suboptimal performance. (PC World called its last ver- Windows 2.0 was released in December 1987, and was sion, Windows ME, one of the worst products of more popular than its predecessor. It features several imall times.)[7] Microsoft now caters to the consumers provements to the user interface and memory management. Windows 2.03 changed the OS from tiled windows market with Windows NT. to overlapping windows. The result of this change led • Windows Mobile: The predecessor to Windows to Apple Computer filing a suit against Microsoft allegPhone, it was a mobile phone operating system. The ing infringement on Apple’s copyrights.[9][10] Windows first version was called Pocket PC 2000; the third 2.0 also introduced more sophisticated keyboard shortversion, Windows Mobile 2003 is the first version cuts and could make use of expanded memory. to adopt the Windows Mobile trademark. The last Windows 2.1 was released in two different versions: version is Windows Mobile 6.5. Windows/286 and Windows/386. Windows/386 uses the 5.4.2 Version history Main article: History of Microsoft Windows See also: List of Microsoft Windows versions virtual 8086 mode of the Intel 80386 to multitask several DOS programs and the paged memory model to emulate expanded memory using available extended memory. Windows/286, in spite of its name, runs on both Intel 8086 and Intel 80286 processors. It runs in real mode but can make use of the high memory area. In addition to full Windows-packages, there were The term Windows collectively describes any or all of sev- runtime-only versions that shipped with early Windows eral generations of Microsoft operating system products. software from third parties and made it possible to run These products are generally categorized as follows: their Windows software on MS-DOS and without the full Windows feature set. Early versions Main articles: Windows 1.0, Windows 2.0 and Windows 2.1x The history of Windows dates back to September 1981, when Chase Bishop, a computer scientist, designed the first model of an electronic device and project Interface Manager was started. It was announced in November 1983 (after the Apple Lisa, but before the Macintosh) under the name “Windows”, but Windows 1.0 was not released until November 1985.[8] Windows 1.0 was to compete with Apple's operating system, but achieved little popularity. Windows 1.0 is not a complete operating system; rather, it extends MS-DOS. The shell of Windows 1.0 is a program known as the MS-DOS The early versions of Windows are often thought of as graphical shells, mostly because they ran on top of MS-DOS and use it for file system services.[11] However, even the earliest Windows versions already assumed many typical operating system functions; notably, having their own executable file format and providing their own device drivers (timer, graphics, printer, mouse, keyboard and sound). Unlike MS-DOS, Windows allowed users to execute multiple graphical applications at the same time, through cooperative multitasking. Windows implemented an elaborate, segment-based, software virtual memory scheme, which allows it to run applications larger than available memory: code segments and resources are swapped in and thrown away when memory became scarce; data segments moved in memory when a 94 CHAPTER 5. OPERATING SYSTEM EXAMPLES given application had relinquished processor control. Windows 95, was released on August 24, 1995. While still remaining MS-DOS-based, Windows 95 introduced support for native 32-bit applications, plug and play hardWindows 3.x ware, preemptive multitasking, long file names of up to 255 characters, and provided increased stability over Main articles: Windows 3.0 and Windows 3.1x its predecessors. Windows 95 also introduced a reWindows 3.0, released in 1990, improved the design, designed, object oriented user interface, replacing the previous Program Manager with the Start menu, taskbar, and Windows Explorer shell. Windows 95 was a major commercial success for Microsoft; Ina Fried of CNET remarked that “by the time Windows 95 was finally ushered off the market in 2001, it had become a fixture on computer desktops around the world.”[17] Microsoft published four OEM Service Releases (OSR) of Windows 95, each of which was roughly equivalent to a service pack. The first OSR of Windows 95 was also the first version of Windows to be bundled with Microsoft’s web browser, Internet Explorer.[18] Mainstream support for Windows 95 ended on December 31, 2000, and extended support for Windows 95 ended on December 31, 2001.[19] Windows 3.0, released in 1990 Windows 95 was followed up with the release of Windows 98 on June 25, 1998, which introduced the Windows Driver Model, support for USB composite devices, support for ACPI, hibernation, and support for multi-monitor configurations. Windows 98 also included integration with Internet Explorer 4 through Active Desktop and other aspects of the Windows Desktop Update (a series of enhancements to the Explorer shell which were also made available for Windows 95). In May 1999, Microsoft released Windows 98 Second Edition, an updated version of Windows 98. Windows 98 SE added Internet Explorer 5.0 and Windows Media Player 6.2 amongst other upgrades. Mainstream support for Windows 98 ended on June 30, 2002, and extended support for Windows 98 ended on July 11, 2006.[20] mostly because of virtual memory and loadable virtual device drivers (VxDs) that allow Windows to share arbitrary devices between multi-tasked DOS applications. Windows 3.0 applications can run in protected mode, which gives them access to several megabytes of memory without the obligation to participate in the software virtual memory scheme. They run inside the same address space, where the segmented memory provides a degree of protection. Windows 3.0 also featured improvements to the user interface. Microsoft rewrote critical operations from C into assembly. Windows 3.0 is the first Microsoft Windows version to achieve broad commercial success, selling 2 million copies in the first six months.[12][13] On September 14, 2000, Microsoft released Windows Windows 3.1, made generally available on March 1, ME (Millennium Edition), the last DOS-based version 1992, featured a facelift. In August 1993, Windows for of Windows. Windows ME incorporated visual interface Workgroups, a special version with integrated peer-to- enhancements from its Windows NT-based counterpart peer networking features and a version number of 3.11, Windows 2000, had faster boot times than previous verwas released. It was sold along Windows 3.1. Support sions (which however, required the removal of the ability to access a real mode DOS environment, removing for Windows 3.1 ended on December 31, 2001.[14] compatibility with some older programs),[21] expanded Windows 3.2, released 1994, is an updated version of multimedia functionality (including Windows Media the Chinese version of Windows 3.1.[15] The update was Player 7, Windows Movie Maker, and the Windows Imlimited to this language version, as it fixed only issues age Acquisition framework for retrieving images from related to the complex writing system of the Chinese scanners and digital cameras), additional system utilities language.[16] Windows 3.2 was generally sold by com- such as System File Protection and System Restore, and puter manufacturers with a ten-disk version of MS-DOS updated home networking tools.[22] However, Windows that also had Simplified Chinese characters in basic out- ME was faced with criticism for its speed and instability, put and some translated utilities. along with hardware compatibility issues and its removal of real mode DOS support. PC World considered Windows ME to be one of the worst operating systems MiWindows 9x crosoft had ever released, and the 4th worst tech product of all time.[7] Main article: Windows 9x The next major consumer-oriented release of Windows, 5.4. MICROSOFT WINDOWS Windows NT Main article: Windows NT Early versions In November 1988, a new development team within Microsoft (which included former Digital Equipment Corporation developers Dave Cutler and Mark Lucovsky) began work on a revamped version of IBM and Microsoft’s OS/2 operating system known as “NT OS/2”. NT OS/2 was intended to be a secure, multiuser operating system with POSIX compatibility and a modular, portable kernel with preemptive multitasking and support for multiple processor architectures. However, following the successful release of Windows 3.0, the NT development team decided to rework the project to use an extended 32-bit port of the Windows API known as Win32 instead of those of OS/2. Win32 maintained a similar structure to the Windows APIs (allowing existing Windows applications to easily be ported to the platform), but also supported the capabilities of the existing NT kernel. Following its approval by Microsoft’s staff, development continued on what was now Windows NT, the first 32-bit version of Windows. However, IBM objected to the changes, and ultimately continued OS/2 development on its own.[23][24] The first release of the resulting operating system, Windows NT 3.1 (named to associate it with Windows 3.1) was released in July 1993, with versions for desktop workstations and servers. Windows NT 3.5 was released in September 1994, focusing on performance improvements and support for Novell's NetWare, and was followed up by Windows NT 3.51 in May 1995, which included additional improvements and support for the PowerPC architecture. Windows NT 4.0 was released in June 1996, introducing the redesigned interface of Windows 95 to the NT series. On February 17, 2000, Microsoft released Windows 2000, a successor to NT 4.0. The Windows NT name was dropped at this point in order to put a greater focus on the Windows brand.[24] 95 editions: the “Home” edition was targeted towards consumers, while the “Professional” edition was targeted towards business environments and power users, and included additional security and networking features. Home and Professional were later accompanied by the “Media Center” edition (designed for home theater PCs, with an emphasis on support for DVD playback, TV tuner cards, DVR functionality, and remote controls), and the “Tablet PC” edition (designed for mobile devices meeting its specifications for a tablet computer, with support for stylus pen input and additional pen-enabled applications).[26][27][28] Mainstream support for Windows XP ended on April 14, 2009. Extended support ended on April 8, 2014.[29] After Windows 2000, Microsoft also changed its release schedules for server operating systems; the server counterpart of Windows XP, Windows Server 2003, was released in April 2003.[24] It was followed in December 2005, by Windows Server 2003 R2. Windows Vista After a lengthy development process, Windows Vista was released on November 30, 2006, for volume licensing and January 30, 2007, for consumers. It contained a number of new features, from a redesigned shell and user interface to significant technical changes, with a particular focus on security features. It was available in a number of different editions, and has been subject to some criticism, such as drop of performance, longer boot time, criticism of new UAC, and stricter license agreement. Vista’s server counterpart, Windows Server 2008 was released in early 2008. Windows 7 On July 22, 2009, Windows 7 and Windows Server 2008 R2 were released as RTM (release to manufacturing) while the former was released to the public 3 months later on October 22, 2009. Unlike its predecessor, Windows Vista, which introduced a large number of new features, Windows 7 was intended to be a more focused, incremental upgrade to the Windows line, with the goal of being compatible with applications and hardware with which Windows Vista was already [30] Home versions of Windows NT The next major ver- compatible. Windows 7 has multi-touch support, a retaskbar, a home sion of Windows NT, Windows XP, was released on Oc- designed Windows shell with an updated [31] HomeGroup, and perfornetworking system called tober 25, 2001. The introduction of Windows XP aimed mance improvements. to unify the consumer-oriented Windows 9x series with the architecture introduced by Windows NT, a change which Microsoft promised would provide better perfor- Windows 8 and 8.1 Windows 8, the successor to Winmance over its DOS-based predecessors. Windows XP dows 7, was released generally on October 26, 2012. A would also introduce a redesigned user interface (includ- number of significant changes were made on Windows ing an updated Start menu and a “task-oriented” Windows 8, including the introduction of a user interface based Explorer), streamlined multimedia and networking fea- around Microsoft’s Metro design language with optimizatures, Internet Explorer 6, integration with Microsoft’s tions for touch-based devices such as tablets and all-in.NET Passport services, modes to help provide compat- one PCs. These changes include the Start screen, which ibility with software designed for previous versions of uses large tiles that are more convenient for touch interacWindows, and Remote Assistance functionality.[25] tions and allow for the display of continually updated inAt retail, Windows XP was now marketed in two main formation, and a new class of apps which are designed pri- 96 marily for use on touch-based devices. Other changes include increased integration with cloud services and other online platforms (such as social networks and Microsoft’s own SkyDrive and Xbox Live services), the Windows Store service for software distribution, and a new variant known as Windows RT for use on devices that utilize the ARM architecture.[32][33][34][35][36][37] An update to Windows 8, called Windows 8.1,[38] was released on October 17, 2013, and includes features such as new live tile sizes, deeper SkyDrive integration, and many other revisions. Windows 8 and Windows 8.1 has been subject to some criticism, such as removal of Start Menu. CHAPTER 5. OPERATING SYSTEM EXAMPLES The interface language of installed applications are not affected by changes in the Windows interface language. Availability of languages depends on the application developers themselves. Windows 8 and Windows Server 2012 introduces a new Language Control Panel where both the interface and input languages can be simultaneously changed, and language packs, regardless of type, can be downloaded from a central location. The PC Settings app in Windows 8.1 and Windows Server 2012 R2 also includes a counterpart settings page for this. Changing the interface language also changes the language of preinstalled Windows Store apps (such as Mail, Maps and News) and certain other Microsoft-developed apps (such as Remote Desktop). The above limitations for language packs are however still in effect, except that full language packs can be installed for any edition except Single Language, which caters to emerging markets. Windows 10 On September 30, 2014, Microsoft announced Windows 10 as the successor to Windows 8.1. It was released on July 29, 2015, and addresses shortcomings in the user interface first introduced with Windows 8. Changes include the return of the Start Menu, a virtual desktop system, and the ability to run Windows Store apps within windows on the desktop rather than in full-screen mode. Windows 10 is said to be available to update from qualified Windows 7 with SP1 and Windows 8.1 computers from the Get Windows 10 Application (for Windows 7, Windows 8.1) or Windows Up- Platform support Windows NT included support for several different platforms before the x86-based date (Windows 7).[39] personal computer became dominant in the professional world. Windows NT 4.0 and its predecessors supported Multilingual support Multilingual support is built PowerPC, DEC Alpha and MIPS R4000. (Although into Windows. The language for both the keyboard and some these platforms implement 64-bit computing, the the interface can be changed through the Region and Lan- operating system treated them as 32-bit.) However, Winguage Control Panel. Components for all supported input dows 2000, the successor of Windows NT 4.0, dropped languages, such as Input Method Editors, are automati- support for all platforms except the third generation x86 cally installed during Windows installation (in Windows (known as IA-32) or newer in 32-bit mode. The client XP and earlier, files for East Asian languages, such as line of Window NT family still runs on IA-32, although Chinese, and right-to-left scripts, such as Arabic, may the Windows Server line has ceased supporting this platneed to be installed separately, also from the said Con- form with the release of Windows Server 2008 R2. trol Panel). Third-party IMEs may also be installed if a With the introduction of the Intel Itanium architecture user feels that the provided one is insufficient for their (IA-64), Microsoft released new versions of Windows needs. to support it. Itanium versions of Windows XP and Interface languages for the operating system are free for Windows Server 2003 were released at the same time as download, but some languages are limited to certain edi- their mainstream x86 counterparts. Windows XP 64-Bit tions of Windows. Language Interface Packs (LIPs) are Edition, released in 2005, is the last Windows client opredistributable and may be downloaded from Microsoft’s erating systems to support Itanium. Windows Server line Download Center and installed for any edition of Win- continued to support this platform until Windows Server dows (XP or later) - they translate most, but not all, of the 2012; Windows Server 2008 R2 is the last Windows opWindows interface, and require a certain base language erating system to support Itanium architecture. (the language which Windows originally shipped with). This is used for most languages in emerging markets. Full On April 25, 2005, Microsoft released Windows XP ProLanguage Packs, which translates the complete operating fessional x64 Edition and Windows Server 2003 x64 Edisystem, are only available for specific editions of Win- tions to support the x86-64 (or simply x64), the eighth dows (Ultimate and Enterprise editions of Windows Vista generation of x86 architecture. Windows Vista was the and 7, and all editions of Windows 8, 8.1 and RT ex- first client version of Windows NT to be released simultacept Single Language). They do not require a specific neously in IA-32 and x64 editions. x64 is still supported. base language, and are commonly used for more popular An edition of Windows 8 known as Windows RT was languages such as French or Chinese. These languages specifically created for computers with ARM architecture cannot be downloaded through the Download Center, but and while ARM is still used for Windows smartphones available as optional updates through the Windows Up- with Windows 10, tablets with Windows RT will not be date service (except Windows 8). updated. 5.4. MICROSOFT WINDOWS Windows CE Main articles: Windows CE and Windows Phone Windows CE (officially known as Windows Embed- 97 Windows timeline: Bar chart • view • talk • edit The latest current version of Windows CE, Windows Embedded Compact 7, displaying a concept media player UI. ded Compact), is an edition of Windows that runs on minimalistic computers, like satellite navigation systems and some mobile phones. Windows Embedded Compact is based on its own dedicated kernel, dubbed Windows CE kernel. Microsoft licenses Windows CE to OEMs and device makers. The OEMs and device makers can modify and create their own user interfaces and experiences, while Windows CE provides the technical foundation to do so. Windows CE was used in the Dreamcast along with Sega’s own proprietary OS for the console. Windows CE was the core from which Windows Mobile was derived. Its successor, Windows Phone 7, was based on components from both Windows CE 6.0 R3 and Windows CE The Windows family tree 7.0. Windows Phone 8 however, is based on the same NT-kernel as Windows 8. Windows Embedded Compact is not to be confused with Windows XP Embedded or Windows NT 4.0 Embedded, 5.4.4 Usage share modular editions of Windows based on Windows NT kerMain article: Usage share of operating systems nel. Xbox OS ♥ ^ Note: W3Counter, includes so-called “mobile” operating systems, not only “desktop” ones. Xbox OS is an unofficial name given to the version of Windows that runs on the Xbox One.[40] It is a more spe♣ ^ Not a subtotal. Not all versions are listed cific implementation with an emphasis on virtualization in this table. (using Hyper-V) as it is three operating systems running at once, consisting of the core operating system, a second Gartner estimates the installed base of PCs reached 1.4 implemented for games and a more Windows-like envi- billion in 2010[49] they also estimate increase to 2.3 bilronment for applications.[41] lion by 2015. CNN Money on June 2015 also claims that Windows currently powers 1.5 billion PCs around the world.[50] NetMarketShare on June 2015 estimate 5.4.3 Timeline of releases 90.85% PC devices is running Windows OS.[51] Gartner also estimate small grow in PC market in year 2014, Main article: Timeline of Microsoft Windows 2015 and 2016 thanks to Ultramobile Premium devices Windows timeline: Table like 2in1 tables/notebooks.[52] 98 5.4.5 CHAPTER 5. OPERATING SYSTEM EXAMPLES Security Consumer versions of Windows were originally designed for ease-of-use on a single-user PC without a network connection, and did not have security features built in from the outset.[53] However, Windows NT and its successors are designed for security (including on a network) and multi-user PCs, but were not initially designed with Internet security in mind as much, since, when it was first developed in the early 1990s, Internet use was less prevalent.[54] two separate tokens are assigned. The first token contains all privileges typically awarded to an administrator, and the second is a restricted token similar to what a standard user would receive. User applications, including the Windows Shell, are then started with the restricted token, resulting in a reduced privilege environment even under an Administrator account. When an application requests higher privileges or “Run as administrator” is clicked, UAC will prompt for confirmation and, if consent is given (including administrator credentials if the account requesting the elevation is not a member of the administrators group), start the process using the unrestricted token.[60] These design issues combined with programming errors (e.g. buffer overflows) and the popularity of Windows means that it is a frequent target of computer worm and virus writers. In June 2005, Bruce Schneier's Counterpane Internet Security reported that it had seen over 1,000 File permissions new viruses and worms in the previous six months.[55] In 2005, Kaspersky Lab found around 11,000 malicious programs—viruses, Trojans, back-doors, and exploits All Windows versions from Windows NT 3 have been based on a file system permission system referred to as written for Windows.[56] AGLP (Accounts, Global, Local, Permissions) AGDLP Microsoft releases security patches through its Windows which in essence where file permissions are applied to the Update service approximately once a month (usually the file/folder in the form of a 'local group' which then has second Tuesday of the month), although critical updates other 'global groups’ as members. These global groups are made available at shorter intervals when necessary.[57] then hold other groups or users depending on differIn versions of Windows after and including Windows ent Windows versions used. This system varies from 2000 SP3 and Windows XP, updates can be automatically other vendor products such as Linux and NetWare due downloaded and installed if the user selects to do so. As to the 'static' allocation of permission being applied dia result, Service Pack 2 for Windows XP, as well as Serrectory to the file or folder. However using this provice Pack 1 for Windows Server 2003, were installed by cess of AGLP/AGDLP/AGUDLP allows a small numusers more quickly than it otherwise might have been.[58] ber of static permissions to be applied and allows for easy While the Windows 9x series offered the option of having changes to the account groups without reapplying the file profiles for multiple users, they had no concept of access permissions on the files and folders. privileges, and did not allow concurrent access; and so were not true multi-user operating systems. In addition, they implemented only partial memory protection. They were accordingly widely criticised for lack of security. Windows Defender The Windows NT series of operating systems, by contrast, are true multi-user, and implement absolute mem- On January 6, 2005, Microsoft released a Beta version ory protection. However, a lot of the advantages of being of Microsoft AntiSpyware, based upon the previously rea true multi-user operating system were nullified by the leased Giant AntiSpyware. On February 14, 2006, Mifact that, prior to Windows Vista, the first user account crosoft AntiSpyware became Windows Defender with created during the setup process was an administrator the release of Beta 2. Windows Defender is a freeware account, which was also the default for new accounts. program designed to protect against spyware and other Though Windows XP did have limited accounts, the ma- unwanted software. Windows XP and Windows Server jority of home users did not change to an account type 2003 users who have genuine copies of Microsoft Winwith fewer rights – partially due to the number of pro- dows can freely download the program from Microsoft’s grams which unnecessarily required administrator rights web site, and Windows Defender ships as part of Win– and so most home users ran as administrator all the dows Vista and 7.[61] In Windows 8, Windows Defender time. and Microsoft Security Essentials have been combined Windows Vista changes this[59] by introducing a privilege elevation system called User Account Control. When logging in as a standard user, a logon session is created and a token containing only the most basic privileges is assigned. In this way, the new logon session is incapable of making changes that would affect the entire system. When logging in as a user in the Administrators group, into a single program, named Windows Defender. It is based on Microsoft Security Essentials, borrowing its features and user interface. Although it is enabled by default, it can be turned off to use another anti-virus solution.[62] Windows Malicious Software Removal Tool and the optional Microsoft Safety Scanner are two other free security products offered by Microsoft. 5.4. MICROSOFT WINDOWS Third-party analysis In an article based on a report by Symantec,[63] internetnews.com has described Microsoft Windows as having the “fewest number of patches and the shortest average patch development time of the five operating systems it monitored in the last six months of 2006.”[64] A study conducted by Kevin Mitnick and marketing communications firm Avantgarde in 2004, found that an unprotected and unpatched Windows XP system with Service Pack 1 lasted only 4 minutes on the Internet before it was compromised, and an unprotected and also unpatched Windows Server 2003 system was compromised after being connected to the internet for 8 hours.[65] This study does not apply to Windows XP systems running the Service Pack 2 update (released in late 2004), which vastly improved the security of Windows XP. The computer that was running Windows XP Service Pack 2 was not compromised. The AOL National Cyber Security Alliance Online Safety Study of October 2004, determined that 80% of Windows users were infected by at least one spyware/adware product. Much documentation is available describing how to increase the security of Microsoft Windows products. Typical suggestions include deploying Microsoft Windows behind a hardware or software firewall, running anti-virus and anti-spyware software, and installing patches as they become available through Windows Update.[66] 5.4.6 99 base. Cedega ceased its service in February 2011. • Darwine – a port of Wine for OS X and Darwin. Operates by running Wine on QEMU. • Linux Unified Kernel – A set of patches to the Linux kernel allowing first-class Windows executable files in Linux (using Wine DLLs) to use Windows drivers and be faster than interpreted Wine. • ReactOS – an open-source OS intended to run the same software as Windows, originally designed to simulate Windows NT 4.0, now aiming at Windows 7 compatibility. It has been in the development stage since 1996. • Linspire – formerly LindowsOS, a commercial Linux distribution initially created with the goal of running major Windows software. Changed its name to Linspire after Microsoft v. Lindows. Discontinued in favor of Xandros Desktop. • Freedows OS – an open-source attempt at creating a Windows clone for x86 platforms, intended to be released under the GNU General Public License. Started in 1996, by Reece K. Sellin, the project was never completed, getting only to the stage of design discussions which featured a number of novel concepts until it was suspended in 2002.[68][69][70] Alternative implementations Owing to the operating system’s popularity, a number of applications have been released that aim to provide compatibility with Windows applications, either as a compatibility layer for another operating system, or as a standalone system that can run software written for Windows out of the box. These include: 5.4.7 See also • Architecture of Windows NT • Wintel • De facto standard • Dominant design • Wine – a free and open-source implementation of the Windows API, allowing one to run many Windows applications on x86-based platforms, includ- 5.4.8 References ing UNIX, Linux and OS X. Wine developers refer to it as a “compatibility layer”[67] and use Windows- [1] “Lesson 2 - Windows NT System Overview”. Microsoft TechNet. Microsoft. Retrieved November 25, 2014. style APIs to emulate Windows environment. • CrossOver – a Wine package with licensed fonts. Its developers are regular contributors to Wine, and focus on Wine running officially supported applications. • Cedega – proprietary fork of Wine by TransGaming Technologies, designed specifically for running Microsoft Windows games on Linux. A version of Cedega known as Cider allows Windows games to run on OS X. Since Wine was licensed under the LGPL, Cedega has been unable to port the improvements made to Wine to their proprietary code- [2] “Listing of available Windows 7 language packs”. Msdn.microsoft.com. Retrieved April 5, 2014. [3] “App packages and deployment (Windows Store apps) (Windows)". Msdn.microsoft.com. Retrieved April 5, 2014. [4] “The Unusual History of Microsoft Windows”. Retrieved April 22, 2007. [5] http://wccftech.com/ xbox-one-architecture-explained-runs-windows-8-virtually-indistinguishable [6] “RTOS: Embedded Real Time Operating Systems”. microsoft.com. Microsoft. Retrieved 7 November 2014. 100 CHAPTER 5. OPERATING SYSTEM EXAMPLES [7] “The 25 Worst Tech Products of All Time”. PC World. IDG. Retrieved February 10, 2012. [8] A history of Windows (at microsoft.com) [9] “The Apple vs. Microsoft GUI Lawsuit”. 2006. Retrieved March 12, 2008. [10] “Apple Computer, Inc. v. MicroSoft Corp., 35 F.3d 1435 (9th Cir. 1994)". Retrieved March 12, 2008. [29] “Windows XP Professional Lifecycle Support”. Retrieved January 3, 2011. [30] Mike Nash (October 28, 2008). “Windows 7 Unveiled Today at PDC 2008”. Windows Team Blog. Microsoft. Retrieved November 11, 2008. [31] Brandon LeBlanc (October 28, 2008). “How Libraries & HomeGroup Work Together in Windows 7”. Windows Team Blog. Microsoft. Retrieved November 11, 2008. [11] “Windows Evolution”. Soft32.com News. [12] “Chronology of Personal Computer Software”. [13] “Microsoft Company”. [14] “Windows 3.1 Standard Edition Support Lifecycle”. Retrieved January 3, 2011. [15] “Microsoft Windows Simplified Chinese 3.2 Upgrade Is Available”. microsoft.com. Microsoft. [16] “Microsoft Windows Simplified Chinese 3.2 Upgrade Is Available”. Microsoft. October 30, 2003. Retrieved September 4, 2009. [17] “Windows 95 turns 15: Has Microsoft’s OS peaked?". CNET/CNN Tech. August 25, 2010. Archived from the original on August 26, 2010. Retrieved August 22, 2012. [18] “Microsoft Internet Explorer Web Browser Available on All Major Platforms, Offers Broadest International Support” (Press release). Microsoft. April 30, 1996. Retrieved February 14, 2011. [19] “Windows 95 Support Lifecycle”. Microsoft. Retrieved January 3, 2011. [20] “Windows 98 Standard Edition Support Lifecycle”. Microsoft. Retrieved January 3, 2011. [21] “Improving “Cold Boot” Time for System Manufacturers”. Microsoft. December 4, 2001. Archived from the original on February 13, 2010. Retrieved August 26, 2010. [22] “Windows Millennium Edition: All About Me”. World. Retrieved May 21, 2013. [28] “A Look at Freestyle and Mira”. Paul Thurrott’s SuperSite for Windows. Penton. September 3, 2002. Retrieved January 3, 2011. PC [32] Case, Loyd. “Test Driving Windows 8 RTM”. PC World. IDG. Retrieved September 9, 2012. [33] Rosoff, Matt. “Here’s Everything You Wanted To Know About Microsoft’s Upcoming iPad Killers”. Business Insider. Retrieved February 10, 2012. [34] “Announcing the Windows 8 Editions”. Microsoft. April 16, 2012. Retrieved April 17, 2012. [35] “Building Windows for the ARM processor architecture”. Microsoft. Retrieved November 21, 2012. [36] “Microsoft talks Windows Store features, Metro app sandboxing for Windows 8 developers”. The Verge. Vox Media. Retrieved September 8, 2012. [37] Miller, Michael. “Build: More Details On Building Windows 8 Metro Apps”. PC Magazine. Retrieved February 10, 2012. [38] Windows 8.1 now available!. Blogs.windows.com. Retrieved on October 31, 2013. [39] “Announcing Windows 10 - Windows Blog”. September 30, 2014. Retrieved September 30, 2014. [40] Anand Lal Shimpi. “The Xbox One - Mini Review & Comparison to Xbox 360/PS4”. anandtech.com. [41] “Xbox One: Hardware and software specs detailed and analyzed - Three operating systems in one”. ExtremeTech. Retrieved 2013-12-01. [42] “Microsoft Support Lifecycle”. Microsoft. [23] Custer, Helen (1993). Inside Windows NT. Redmond: Microsoft Press. ISBN 1-55615-481-X. [43] “Microsoft Delivers New Wave of Technologies to Help Businesses Thrive in Today’s Economy” (Press release). Microsoft. May 11, 2009. Retrieved May 22, 2009. [24] Thurrott, Paul (January 24, 2003). “Windows Server 2003: The Road To Gold - Part One: The Early Years”. Archived from the original on January 1, 2005. Retrieved May 28, 2012. [44] “Windows 10 Features - Microsoft” (Press release). Microsoft. Retrieved July 23, 2015. [25] “Windows XP review”. CNET. Retrieved May 24, 2013. [26] David Coursey (October 25, 2001). “The 10 top things you MUST know about Win XP”. ZDNet. Retrieved July 22, 2008. [27] David Coursey (August 31, 2001). “Your top Windows XP questions answered! (Part One)". ZDNet. CNET Networks. Archived from the original on December 19, 2007. Retrieved January 3, 2011. [45] “Microsoft Support Lifecycle” (Press release). Microsoft. Retrieved July 23, 2015. [46] “Operating System Market Share”. Net Market Share. Net Applications. September 2015. Retrieved 2 October 2015. [47] “StatCounter Global Stats”. Global Stats. StatCounter. September 2015. Retrieved 2 October 2015. [48] “Global Web Stats”. W3Counter. Awio Web Services. September 2015. Retrieved 2 October 2015. 5.5. LINUX [49] https://www.gartner.com/doc/1602818/ forecast-pc-installed-base-worldwide [50] http://money.cnn.com/2015/06/24/technology/ windows-microsoft-sales/index.html 101 [68] “A Student’s Dream of Creating A New Operating System Encounters Problems”. The Chronicle of Higher Education. September 18, 1998. Retrieved May 17, 2013. [69] “Older blog entries for chipx86”. Advogato.org. Advogato. June 27, 2002. Retrieved May 17, 2013. [51] http://www.netmarketshare.com/ [52] http://www.gartner.com/newsroom/id/2954317 [53] Multi-user memory protection was not introduced until Windows NT and XP, and a computer’s default user was an administrator until Windows Vista. Source: UACBlog. [54] “Telephones and Internet Users by Country, 1990 and 2005”. Information Please Database. Retrieved June 9, 2009. [55] Bruce Schneier (June 15, 2005). “Crypto-Gram Newsletter”. Counterpane Internet Security, Inc. Retrieved April 22, 2007. [56] Andy Patrizio (April 27, 2006). “Linux Malware On The Rise”. InternetNews. QuinStreet. Retrieved January 3, 2011. [57] Ryan Naraine (June 8, 2005). “Microsoft’s Security Response Center: How Little Patches Are Made”. eWeek. Ziff Davis Enterprise. Retrieved January 3, 2011. [58] John Foley (October 20, 2004). “Windows XP SP2 Distribution Surpasses 100 Million”. InformationWeek. UBM TechWeb. Retrieved January 3, 2011. [59] Microsoft describes in detail the steps taken to combat this in a TechNet bulletin. Source: Windows Vista Security and Data Protection Improvements. [60] Kenny Kerr (September 29, 2006). “Windows Vista for Developers – Part 4 – User Account Control”. Retrieved March 15, 2007. [61] “Windows Vista: Security & Safety”. Microsoft. Retrieved April 16, 2012. [62] “Microsoft Answers: How do I keep Windows 8 Consumer Preview secure from malware?". Microsoft. Retrieved April 16, 2012. [63] “Symantec Internet Security Threat Report Trends for July – December 2006” (PDF). Internet Security Threat Report Volume XI. Symantec. March 2007. Retrieved January 3, 2011. [64] [65] [66] [67] [70] “Freedows splits”. Slashdot. Dice Holdings. August 31, 1998. Retrieved May 17, 2013. 5.4.9 External links • Official website • Official blog • Microsoft Developer Network • Windows Client Developer Resources • Microsoft Windows History Timeline • Pearson Education, InformIT – History of Microsoft Windows • Microsoft Windows 7 for Government 5.5 Linux This article is about the operating system. For the kernel, see Linux kernel. For other uses, see Linux (disambiguation). Linux (pronounced i /ˈlɪnəks/ LIN-əks[4][5] or, less frequently, /ˈlaɪnəks/ LYN-əks[5][6] ) is a Unix-like and mostly POSIX-compliant[7] computer operating system (OS) assembled under the model of free and open-source software development and distribution. The defining component of Linux is the Linux kernel,[8] an operating system kernel first released on 5 October 1991 by Linus Torvalds.[9][10] The Free Software Foundation uses the name GNU/Linux to describe the operating system, which has led to some controversy.[11][12] Linux was originally developed as a free operating system for personal computers based on the Intel x86 architecture, but has since been ported to more computer hardware platforms than any other operating system.[13] Andy Patrizio (March 21, 2007). “Report Says Windows Thanks to its dominance on smartphones, Android, which Gets The Fastest Repairs”. InternetNews. QuinStreet. Re- is built on top of the Linux kernel, has the largest installed trieved January 3, 2011. base of all general-purpose operating systems.[14] Linux, “Automated “Bots” Overtake PCs Without Firewalls in its original form, is also the leading operating system Within 4 Minutes”. Avantgarde. Avantgarde. November on servers and other big iron systems such as mainframe computers and supercomputers,[15][16] but is used on only 30, 2004. Retrieved January 3, 2011. around 1.5% of desktop computers[17] with Linux-based Richard Rogers (September 21, 2009). “5 Steps To Se- Chrome OS taking about 5% of the overall and nearly curing Your Windows XP Home Computer”. Computer 20% of the sub-$300 notebook sales.[18] Linux also runs Security News. Computer Security News. Retrieved Janon embedded systems, which are devices whose operuary 3, 2011. ating system is typically built into the firmware and is “Wine”. Winehq.org. Retrieved April 5, 2014. highly tailored to the system; this includes smartphones 102 CHAPTER 5. OPERATING SYSTEM EXAMPLES and tablet computers running Android and other Linux derivatives,[19] TiVo and similar DVR devices, network routers, facility automation controls, televisions,[20][21] video game consoles, and smartwatches.[22] The development of Linux is one of the most prominent examples of free and open-source software collaboration. The underlying source code may be used, modified and distributed—commercially or non-commercially— by anyone under the terms of its respective licenses, such as the GNU General Public License. Typically, Linux is packaged in a form known as a Linux distribution, for both desktop and server use. Some of the popular mainstream Linux distributions are Debian, Ubuntu, Linux Mint, Fedora, openSUSE, Arch Linux and Gentoo, together with commercial Red Hat Enterprise Linux and SUSE Linux Enterprise Server distributions. Linux distributions include the Linux kernel, supporting utilities and libraries, and usually a large amount of application software to fulfill the distribution’s intended use. Distributions oriented toward desktop use typically include X11, a Wayland implementation or Mir as the windowing system, and an accompanying desktop environment such as GNOME or the KDE Software CompilaLinus Torvalds, principal author of the Linux kernel tion; some distributions may also include a less resourceintensive desktop such as LXDE or Xfce. Distributions intended to run on servers may omit all graphical environments from the standard install, and instead include other software to set up and operate a solution stack such as legal obligation requiring free licensing, Bell Labs began LAMP. Because Linux is freely redistributable, anyone selling Unix as a proprietary product. may create a distribution for any intended use. The GNU Project, started in 1983 by Richard Stallman, had the goal of creating a “complete Unix-compatible software system” composed entirely of free software. 5.5.1 History Work began in 1984.[25] Later, in 1985, Stallman started the Free Software Foundation and wrote the GNU GenMain article: History of Linux eral Public License (GNU GPL) in 1989. By the early 1990s, many of the programs required in an operating system (such as libraries, compilers, text editors, a Unix shell, and a windowing system) were completed, although Antecedents low-level elements such as device drivers, daemons, and the kernel were stalled and incomplete.[26] The Unix operating system was conceived and implemented in 1969 at AT&T's Bell Laboratories in Linus Torvalds has said that if the GNU kernel had been available at the time (1991), he would not have decided the United States by Ken Thompson, Dennis Ritchie, [27] [23] Douglas McIlroy, and Joe Ossanna. First released in to write his own. 1971, Unix was written entirely in assembly language as Although not released until 1992 due to legal compliit was common practice at the time. Later, in a key pio- cations, development of 386BSD, from which NetBSD, neering approach in 1973, it was rewritten in the C pro- OpenBSD and FreeBSD descended, predated that of gramming language by Dennis Ritchie (with exceptions Linux. Torvalds has said that if 386BSD had been availto the kernel and I/O). The availability of a high-level lan- able at the time, he probably would not have created guage implementation of Unix made its porting to differ- Linux.[28] ent computer platforms easier. MINIX was created by a computer science professor Due to an earlier antitrust case forbidding it from entering the computer business, AT&T was required to license the operating system’s source code to anyone who asked.[24] As a result, Unix grew quickly and became widely adopted by academic institutions and businesses. In 1984, AT&T divested itself of Bell Labs; freed of the Andrew S. Tanenbaum and released in 1987 as a minimal Unix-like operating system targeted at students and others who wanted to learn the operating system principles. Although the complete source code of MINIX was freely available, the licensing terms prevented it from being free software until the licensing changed in April 2000.[29] 5.5. LINUX 103 Creation volunteer administrators for the FTP server at the time, did not think that “Freax” was a good name. So, he In 1991, while attending the University of Helsinki, Tor- named the project “Linux” on the server without consultvalds became curious about operating systems[30] and ing Torvalds.[33] Later, however, Torvalds consented to frustrated by the licensing of MINIX, which at the time “Linux”. limited it to educational use only.[29] He began to work To demonstrate how the word “Linux” should be proon his own operating system kernel, which eventually be- nounced ( i /ˈlɪnəks/ LIN-əks[4][5] ), Torvalds included an came the Linux kernel. audio guide ( listen ) with the kernel source code.[34] Torvalds began the development of the Linux kernel on Another variant of pronunciation is /ˈlaɪnəks/ LYNMINIX and applications written for MINIX were also əks.[5][6] used on Linux. Later, Linux matured and further Linux kernel development took place on Linux systems.[31] GNU applications also replaced all MINIX components, Commercial and popular uptake because it was advantageous to use the freely available code from the GNU Project with the fledgling operating system; code licensed under the GNU GPL can be reused in other projects as long as they also are released under the same or a compatible license. Torvalds initiated a switch from his original license, which prohibited commercial redistribution, to the GNU GPL.[32] Developers worked to integrate GNU components with the Linux kernel, making a fully functional and free operating system.[26] Naming Ubuntu, a popular Linux distribution Main article: Linux adoption Adoption of Linux in production environments, rather Nexus 5 running Android 5.25-inch floppy discs holding a very early version of Linux than being used only by hobbyists, started to take off first in the mid-1990s in the supercomputing community, where organizations such as NASA started to replace their increasingly expensive machines with clusters of inexpensive commodity computers running Linux. Commercial use followed when Dell and IBM, followed by Hewlett-Packard, started offering Linux support to esmonopoly in the desktop operating sysIn order to facilitate development, the files were uploaded cape Microsoft's [35] tem market. to the FTP server (ftp.funet.fi) of FUNET in September 1991. Ari Lemmke, Torvald’s coworker at the Helsinki Today, Linux systems are used in every domain, from University of Technology (HUT) who was one of the embedded systems to supercomputers,[16][36] and have Linus Torvalds had wanted to call his invention Freax, a portmanteau of “free”, “freak”, and “x” (as an allusion to Unix). During the start of his work on the system, he stored the files under the name “Freax” for about half of a year. Torvalds had already considered the name “Linux,” but initially dismissed it as too egotistical.[33] 104 CHAPTER 5. OPERATING SYSTEM EXAMPLES secured a place in server installations often using the Installed components of a Linux system include the popular LAMP application stack.[37] Use of Linux dis- following:[50][52] tributions in home and enterprise desktops has been growing.[38][39][40][41][42][43][44] Linux distributions have • A bootloader, for example GNU GRUB, LILO, also become popular in the netbook market, with many SYSLINUX, Coreboot or Gummiboot. This is a devices shipping with customized Linux distributions inprogram that loads the Linux kernel into the comstalled, and Google releasing their own Google Chrome puter’s main memory, by being executed by the OS designed for netbooks. computer when it is turned on and after the firmware initialization is performed. Linux’s greatest success in the consumer market is perhaps the mobile device market, with Android being one of the most dominant operating systems on smartphones and very popular on tablets and, more recently, on wearables. Linux gaming is also on the rise with Valve showing its support for Linux and rolling out its own gaming oriented Linux distribution. Linux distributions have also gained popularity with various local and national governments, such as the federal government of Brazil.[45] Current development Torvalds continues to direct the development of the kernel.[46] Stallman heads the Free Software Foundation,[47] which in turn supports the GNU components.[48] Finally, individuals and corporations develop third-party non-GNU components. These thirdparty components comprise a vast body of work and may include both kernel modules and user applications and libraries. Linux vendors and communities combine and distribute the kernel, GNU components, and non-GNU components, with additional package management software in the form of Linux distributions. 5.5.2 Design A Linux-based system is a modular Unix-like operating system, deriving much of its basic design from principles established in Unix during the 1970s and 1980s. Such a system uses a monolithic kernel, the Linux kernel, which handles process control, networking, access to the peripherals, and file systems. Device drivers are either integrated directly with the kernel, or added as modules that are loaded while the system is running.[49] Separate projects that interface with the kernel provide much of the system’s higher-level functionality. The GNU userland is an important part of most Linux-based systems, providing the most common implementation of the C library, a popular CLI shell, and many of the common Unix tools which carry out many basic operating system tasks. The graphical user interface (or GUI) used by most Linux systems is built on top of an implementation of the X Window System.[50] More recently, the Linux community seeks to advance to Wayland as the new display server protocol in place of X11; Ubuntu, however, develops Mir instead of Wayland.[51] • An init program, such as the traditional sysvinit and the newer systemd, OpenRC and Upstart. This is the first process launched by the Linux kernel, and is at the root of the process tree: in other terms, all processes are launched through init. It starts processes such as system services and login prompts (whether graphical or in terminal mode). • Software libraries, which contain code that can be used by running processes. On Linux systems using ELF-format executable files, the dynamic linker that manages use of dynamic libraries is known as ld-linux.so. If the system is set up for the user to compile software themselves, header files will also be included to describe the interface of installed libraries. Beside the most commonly used software library on Linux systems, the GNU C Library (glibc), there are numerous other libraries. • C standard library is the library needed to run standard C programs on a computer system, with the GNU C Library being the most commonly used. Several alternatives are available, such as the EGLIBC (which was used by Debian for some time) and uClibc (which was designed for uClinux). • Widget toolkits are the libraries used to build graphical user interfaces (GUIs) for software applications. Numerous widget toolkits are available, including GTK+ and Clutter (software) developed by the GNOME project, Qt developed by the Qt Project and led by Digia, and Enlightenment Foundation Libraries (EFL) developed primarily by the Enlightenment team. • User interface programs such as command shells or windowing environments. User interface The user interface, also known as the shell, is either a command-line interface (CLI), a graphical user interface (GUI), or through controls attached to the associated hardware, which is common for embedded systems. For desktop systems, the default mode is usually a graphical user interface, although the CLI is available through terminal emulator windows or on a separate virtual console. 5.5. LINUX 105 to use a different window manager if preferred. Wayland is a display server protocol intended as a replacement for the X11 protocol; as of 2014, Wayland has not received wider adoption. Unlike X11, Wayland does not need an external window manager and compositing manager. Therefore, a Wayland compositor takes the role of the display server, window manager and compositing manager. Weston is the reference implementation of Wayland, while GNOME’s Mutter and KDE’s KWin are being ported to Wayland as standalone display servers. Enlightenment has already been successfully ported to Wayland since version 19. Video input infrastructure Main article: Video4Linux [53] Bash, a shell developed by GNU and widely used in Linux CLI shells are the text-based user interfaces, which use text for both input and output. The dominant shell used in Linux is the GNU Bourne-Again Shell (bash), originally developed for the GNU project. Most low-level Linux components, including various parts of the userland, use the CLI exclusively. The CLI is particularly suited for automation of repetitive or delayed tasks, and provides very simple inter-process communication. Linux currently has two modern kernel-userspace APIs for handing video input devices: V4L2 API for video streams and radio, and DVB API for digital TV reception.[55] Due to the complexity and diversity of different devices, and due to the large amount of formats and standards handled by those APIs, this infrastructure needs to evolve to better fit other devices. Also, a good userspace device library is the key of the success for having userspace applications to be able to work with all formats supported by those devices.[56][57] On desktop systems, the most popular user interfaces 5.5.3 Development are the GUI shells, packaged together with extensive desktop environments, such as the K Desktop Environment (KDE), GNOME, Cinnamon, Unity, LXDE, Pantheon and Xfce, though a variety of additional user inBSD family terfaces exist. Most popular user interfaces are based on the X Window System, often simply called “X”. It provides network transparency and permits a graphical application running on one system to be displayed on another where a user may interact with the application; however, certain extensions of the X Window System are not capable of working over the network.[54] Several popular X display servers exist, with the reference implementation, System III & V family X.Org Server, being the most popular. 1970 1980 1990 2000 Bill Joy SunOS 9.1 NetBSD 6.0.1 OpenBSD BSD (Berkeley Software Distribution) Time 2010 FreeBSD 5.3 4.4 4.1.4 Darwin NextStep 3.3 Mac OS X Xenix OS 10.8.4 Apple Microsoft/SCO GNU/Hurd K16 GNU Richard Stallman Minix GNU/Linux 3.10.9 Linus Torvalds 3.2.1 Andrew S. Tanenbaum Research UNIX Bell Labs: Ken Thompson, Dennis Ritchie, et al. 10.5 Commercial UNIX AT&T UnixWare Univel/SCO Solaris Sun Microsystems 11 11/11 11i v3 HP-UX 7.1 TL1 AIX Several types of window managers exist for X11, including tiling, dynamic, stacking and compositing. Window managers provide means to control the placement and appearance of individual application windows, and interact with the X Window System. Simpler X window managers such as dwm or ratpoison provide a minimalist functionality, while more elaborate window managers such as FVWM, Enlightenment or Window Maker provide more features such as a built-in taskbar and themes, but are still lightweight when compared to desktop environments. Desktop environments include window managers as part of their standard installations, such as Mutter (GNOME), KWin (KDE) or Xfwm (xfce), although users may choose IBM IRIX 6.5.30 SGI Simplified history of Unix-like operating systems. Linux shares similar architecture and concepts (as part of the POSIX standard) but does not share non-free source code with the original Unix or MINIX. Main articles: Linux distribution and Free software The primary difference between Linux and many other popular contemporary operating systems is that the Linux kernel and other components are free and open-source software. Linux is not the only such operating system, 106 although it is by far the most widely used.[58] Some free and open-source software licenses are based on the principle of copyleft, a kind of reciprocity: any work derived from a copyleft piece of software must also be copyleft itself. The most common free software license, the GNU General Public License (GPL), is a form of copyleft, and is used for the Linux kernel and many of the components from the GNU Project. Linux based distributions are intended by developers for interoperability with other operating systems and established computing standards. Linux systems adhere to POSIX,[59] SUS,[60] LSB, ISO, and ANSI standards where possible, although to date only one Linux distribution has been POSIX.1 certified, Linux-FT.[61][62] Free software projects, although developed through collaboration, are often produced independently of each other. The fact that the software licenses explicitly permit redistribution, however, provides a basis for larger scale projects that collect the software produced by stand-alone projects and make it available all at once in the form of a Linux distribution. Many Linux distributions, or “distros”, manage a remote collection of system software and application software packages available for download and installation through a network connection. This allows users to adapt the operating system to their specific needs. Distributions are maintained by individuals, loose-knit teams, volunteer organizations, and commercial entities. A distribution is responsible for the default configuration of the installed Linux kernel, general system security, and more generally integration of the different software packages into a coherent whole. Distributions typically use a package manager such as apt, yum, zypper, pacman or portage to install, remove and update all of a system’s software from one central location. CHAPTER 5. OPERATING SYSTEM EXAMPLES IRC chatrooms or newsgroups. Online forums are another means for support, with notable examples being LinuxQuestions.org and the various distribution specific support and community forums, such as ones for Ubuntu, Fedora, and Gentoo. Linux distributions host mailing lists; commonly there will be a specific topic such as usage or development for a given list. There are several technology websites with a Linux focus. Print magazines on Linux often include cover disks including software or even complete Linux distributions.[63][64] Although Linux distributions are generally available without charge, several large corporations sell, support, and contribute to the development of the components of the system and of free software. An analysis of the Linux kernel showed 75 percent of the code from December 2008 to January 2010 was developed by programmers working for corporations, leaving about 18 percent to volunteers and 7% unclassified.[65] Major corporations that provide contributions include Dell, IBM, HP, Oracle, Sun Microsystems (now part of Oracle), SUSE, and Nokia. A number of corporations, notably Red Hat, Canonical, and SUSE, have built a significant business around Linux distributions. The free software licenses, on which the various software packages of a distribution built on the Linux kernel are based, explicitly accommodate and encourage commercialization; the relationship between a Linux distribution as a whole and individual vendors may be seen as symbiotic. One common business model of commercial suppliers is charging for support, especially for business users. A number of companies also offer a specialized business version of their distribution, which adds proprietary support packages and tools to administer higher numbers of installations or to simplify administrative tasks. Another business model is to give away the software in order to sell hardware. This used to be the norm in the computer industry, with operating systems such as CP/M, See also: Free software community and Linux User Apple DOS and versions of Mac OS prior to 7.6 freely copyable (but not modifiable). As computer hardware Group standardized throughout the 1980s, it became more difficult for hardware manufacturers to profit from this tactic, A distribution is largely driven by its developer and user as the OS would run on any manufacturer’s computer that communities. Some vendors develop and fund their disshared the same architecture. tributions on a volunteer basis, Debian being a wellknown example. Others maintain a community version of their commercial distributions, as Red Hat does with Programming on Linux Fedora and SUSE does with openSUSE. Community In many cities and regions, local associations known as Linux User Groups (LUGs) seek to promote their preferred distribution and by extension free software. They hold meetings and provide free demonstrations, training, technical support, and operating system installation to new users. Many Internet communities also provide support to Linux users and developers. Most distributions and free software / open-source projects have Linux distributions support dozens of programming languages. The original development tools used for building both Linux applications and operating system programs are found within the GNU toolchain, which includes the GNU Compiler Collection (GCC) and the GNU build system. Amongst others, GCC provides compilers for Ada, C, C++, Go and Fortran. Many programming languages have a cross-platform reference imple- 5.5. LINUX 107 mentation that supports Linux, for example PHP, Perl, Ruby, Python, Java, Go, Rust and Haskell. First released in 2003, the LLVM project provides an alternative cross-platform open-source compiler for many languages. Proprietary compilers for Linux include the Intel C++ Compiler, Sun Studio, and IBM XL C/C++ Compiler. BASIC in the form of Visual Basic is supported in such forms as Gambas, FreeBASIC, and XBasic, and in terms of terminal programming or QuickBASIC or Turbo BASIC programming in the form of QB64. A common feature of Unix-like systems, Linux includes traditional specific-purpose programming languages targeted at scripting, text processing and system configuration and management in general. Linux distributions support shell scripts, awk, sed and make. Many programs also have an embedded programming language to support configuring or programming themselves. For example, regular expressions are supported in programs like grep, or locate, while advanced text editors, like GNU Emacs, have a complete Lisp interpreter built-in. Linux kernel is a widely ported operating system kernel; it runs on a highly diverse range of computer architectures, including the hand-held ARM-based iPAQ and the IBM mainframes System z9 or System z10 – covering devices ranging from mobile phones to supercomputers.[67] Specialized distributions and kernel forks exist for less mainstream architectures; for example, the ELKS kernel fork can run on Intel 8086 or Intel 80286 16-bit microprocessors, while the µClinux kernel fork may run on systems without a memory management unit. The kernel also runs on architectures that were only ever intended to use a manufacturer-created operating system, such as Macintosh computers (with both PowerPC and Intel processors), PDAs, video game consoles, portable music players, and mobile phones. There are several industry associations and hardware conferences devoted to maintaining and improving support for diverse hardware under Linux, such as FreedomHEC. Over time, support for different hardware has improved in Linux, resulting in any off-the-shelf pur[68] Most distributions also include support for PHP, Perl, chase having a “good chance” of being compatible. Ruby, Python and other dynamic languages. While not as common, Linux also supports C# (via Mono), Vala, and 5.5.5 Uses Scheme. A number of Java Virtual Machines and development kits run on Linux, including the original Sun Mi- See also: Linux range of use crosystems JVM (HotSpot), and IBM’s J2SE RE, as well as many open-source projects like Kaffe and JikesRVM. Beside the Linux distributions designed for generalGNOME and KDE are popular desktop environments purpose use on desktops and servers, distributions may and provide a framework for developing applications. be specialized for different purposes including: computer These projects are based on the GTK+ and Qt widget architecture support, embedded systems, stability, secutoolkits, respectively, which can also be used indepen- rity, localization to a specific region or language, targetdently of the larger framework. Both support a wide va- ing of specific user groups, support for real-time appliriety of languages. There are a number of Integrated cations, or commitment to a given desktop environment. development environments available including Anjuta, Furthermore, some distributions deliberately include only Code::Blocks, CodeLite, Eclipse, Geany, ActiveState free software. As of 2015, over four hundred Linux disKomodo, KDevelop, Lazarus, MonoDevelop, NetBeans, tributions are actively developed, with about a dozen disand Qt Creator, while the long-established editors Vim, tributions being most popular for general-purpose use.[69] nano and Emacs remain popular.[66] Desktop Speech recognition Attitude sensor Motion sensor Display, Sound Vibration Mobile computer Note-/ Net-/ Smartbook Tablet Smartphone PDA / Handheld game console Wearable Computer Wristwatch Virtual Retina Display Head-mounted display Embedded Computer remote (SSH, HTTP, Serial, I2C, ...) Customer-premises equipment Measurement Equipment Laboratory Equipment Layer3-Switches other embedded systems Linux Network scheduler Network stack Netfilter Linux device drivers Linux file system drivers evdev Wearable UI SDL libwayland-client libwayland-client libwayland-client glibc µClibc GLib GObject Glib GModule GThread GIO kms (Kernel Mode Setting) drm (Direct Rendering Manager) Linux kernel, CPU & GPU cache coherent L2-Caches main memory Alternative display servers: ? kdbus ? kmod-fs-ext4 libxserver X-Server window manager X.Org Xfree86 X-Win32 X11.app metacity mutter KWin Compiz netfilter device drivers & other modules radeon nouveau lima etna_viv freedreno tegra-re Keyboard & Mouse Touch-Screen BrailleDisplay Android libwayland-client libX/libXCB System daemons: unetwork Enlight. DR19 Plasma 2 Cairo-Dock Cinnamon GNOME Shell Wayland Compositor libinput Touch UI EFL weston, clayton, mutter, KWin libwayland-server Desktop UI Qt GNUstep wxWidgets FLTK ... libwayland / COGL System libraries: Widgets for Unity and Plasma Ubuntu NetworkManager Linux Security Modules Display server: GTK+ Pango ATK Clutter Cairo (Xr) udisks Linux Process Scheduler Office Image Processing Desktop Publishing (DTP) 3D Application possibly adaptations to Wayland/Mir packagekitd Attitude sensor, Motion sensor, Speech recognition Workstation Home Computer Desktop replacement laptop Thin client CAD, CAM & CAE Software Media Application possibly adaptations to Wayland/Mir PulseAudio-d Touch-Display Desktop Computer Software Development Package management systems 2D Application possibly adaptations to Wayland/Mir User Interface Toolkits (in the form of libraries): avahi-daemon also Braille, Touch-Display, Speech recognition, Graphics tablet, 3D-Mouse, Wii nunchak, etc. Real-time computing (RTC) Desktop Shells: systemd Keyboard & Mouse High-performance computing (HPC) Routing daemons Windowing Systems Distributed computing Linux kernel Distributed Computing Graphical User Interfaces (Shells) (SSH, HTTP, ...) Supercomputer Computer Cluster Mainframe computer Web server solution stacks (LAMP) Pool of free and open-source and proprietary software remote Hardware Unity Desktop widgets Human-MachineInterface (contains udev) Hardware support D-Bus-Daemon 5.5.4 ALSA: emu20k1, ctxfi, hda... kmod-ltq-atm-vr9 Hardware ath9k UMTS/CDMA/LTE GPS-receiver G-sensor libmir-serv mir mir SF window manager SurfaceFlinger Compiz SELinux TOMOYO Smack AppArmor Ethernet 802.11-(abc) Bluetooth libhybris window manager AWM libbionic binder ashmem pmem wakelocks logger ... Linux kernel (Android-forked) Video processing software 3D computer graphics Computer animation Motion graphics Digital Audio Workstation DJ Mixing Software Video games Home cinema solutions Debian software archives: 37,000 software packages Linux is ubiquitously found on various types of hardware. Visible software components of the Linux desktop stack include the display server, widget engines, and some of the more widespread widget toolkits. There are also components not directly visible to end users, including D-Bus and PulseAudio. See also: List of Linux-supported computer architectures See also: Desktop environment and Linux adoption: Measuring desktop adoption 108 CHAPTER 5. OPERATING SYSTEM EXAMPLES being a supported platform on both the popular Steam [75] The popularity of Linux on standard desktop computers and Desura digital-distribution services. and laptops has been increasing over the years.[70] Cur- Many other types of applications available for Microsoft rently most distributions include a graphical user envi- Windows and Mac OS X also run on Linux. Commonly, ronment, with the two most popular environments being either a free software application will exist which does the GNOME (which can utilize additional shells such as the functions of an application found on another operating default GNOME Shell and Ubuntu Unity), and the KDE system, or that application will have a version that works Plasma Desktop. on Linux, such as with Skype and some video games like No single official Linux desktop exists: rather desk- Dota 2 and Team Fortress 2. Furthermore, the Wine top environments and Linux distributions select compo- project provides a Windows compatibility layer to run nents from a pool of free and open-source software with unmodified Windows applications on Linux. It is sponwhich they construct a GUI implementing some more or sored by commercial interests including CodeWeavers, less strict design guide. GNOME, for example, has its which produces a commercial version of the software. has also provided funding to the human interface guidelines as a design guide, which gives Since 2009, Google [76][77] Wine project. CrossOver, a proprietary solution the human–machine interface an important role, not just based on the open-source Wine project, supports runwhen doing the graphical design, but also when considning Windows versions of Microsoft Office, Intuit appliering people with disabilities, and even when focusing on cations such as Quicken and QuickBooks, Adobe Photo[71] security. shop versions through CS2, and many popular games such The collaborative nature of free software development al- as World of Warcraft. In other cases, where there is no lows distributed teams to perform language localization Linux port of some software in areas such as desktop pubof some Linux distributions for use in locales where local- lishing[78] and professional audio,[79][80][81] there is equivizing proprietary systems would not be cost-effective. For alent software available on Linux. example, the Sinhalese language version of the Knoppix distribution became available significantly before Microsoft translated Windows XP into Sinhalese. In this Components and installation Besides externally viscase the Lanka Linux User Group played a major part in ible components, such as X window managers, a nondeveloping the localized system by combining the knowl- obvious but quite central role is played by the programs edge of university professors, linguists, and local devel- hosted by freedesktop.org, such as D-Bus or PulseAudio; both major desktop environments (GNOME and KDE) opers. include them, each offering graphical front-ends written using the corresponding toolkit (GTK+ or Qt). A display Performance and applications The performance of server is another component, which for the longest time Linux on the desktop has been a controversial topic; for has been communicating in the X11 display server proexample in 2007 Con Kolivas accused the Linux commu- tocol with its clients; prominent software talking X11 innity of favoring performance on servers. He quit Linux cludes the X.Org Server and Xlib. Frustration over the kernel development out of frustration with this lack of cumbersome X11 core protocol, and especially over its focus on the desktop, and then gave a “tell all” interview numerous extensions, has led to the creation of a new dison the topic.[72] Since then a significant amount of de- play server protocol, Wayland. velopment has focused on improving the desktop expe- Installing, updating and removing software in Linux is rience. Projects such as Upstart and systemd aim for a typically done through the use of package managers such faster boot time; the Wayland and Mir projects aim at re- as the Synaptic Package Manager, PackageKit, and Yum placing X11 while enhancing desktop performance, se- Extender. While most major Linux distributions have excurity and appearance.[73] tensive repositories, often containing tens of thousands Many popular applications are available for a wide variety of operating systems. For example, Mozilla Firefox, OpenOffice.org/LibreOffice and Blender have downloadable versions for all major operating systems. Furthermore, some applications initially developed for Linux, such as Pidgin, and GIMP, were ported to other operating systems (including Windows and Mac OS X) due to their popularity. In addition, a growing number of proprietary desktop applications are also supported on Linux,[74] such as Autodesk Maya, Softimage XSI and Apple Shake in the high-end field of animation and visual effects; see the List of proprietary software for Linux for more details. There are also several companies that have ported their own or other companies’ games to Linux, with Linux also of packages, not all the software that can run on Linux is available from the official repositories. Alternatively, users can install packages from unofficial repositories, download pre-compiled packages directly from websites, or compile the source code by themselves. All these methods come with different degrees of difficulty; compiling the source code is in general considered a challenging process for new Linux users, but it is hardly needed in modern distributions and is not a method specific to Linux. • Samples of graphical desktop environments • Cinnamon 5.5. LINUX 109 • Common Desktop Environment (CDE) Linux distributions are the cornerstone of the LAMP server-software combination (Linux, Apache, MariaDB/MySQL, Perl/PHP/Python) which has achieved popularity among developers, and which is one of the more common platforms for website hosting.[88] • Enlightenment • GNOME Shell (GNOME 3) • KDE Plasma (KDE 4) Linux distributions have become increasingly popular on mainframes in the last decade partly due to pricing and the open-source model.[16] In December 2009, computer giant IBM reported that it would predominantly market and sell mainframe-based Enterprise Linux Server.[89] • LXDE • MATE (GNOME 2) • Pantheon Linux distributions are also commonly used as operating systems for supercomputers; in the decade since Earth Simulator supercomputer, all the fastest supercomputers have used Linux. As of November 2014, 97% of the world’s 500 fastest supercomputers run some variant of Linux,[90] including the top 80.[91] • Sugar • Trinity (KDE 3) • Unity • Xfce Netbooks Smart devices Linux distributions have also become popular in the netbook market, with many devices such as the ASUS Eee PC and Acer Aspire One shipping with customized Linux distributions installed.[82] In 2009, Google announced its Google Chrome OS, a minimal Linux based operating system which application consists only of the Google Chrome browser, a file manager and a media player.[83] The netbooks that shipped with the operating system, termed Chromebooks, started appearing in the market in June 2011.[84] Servers, mainframes and supercomputers Web cache Linux kernel Squid Polipo Traffic server AppArmor SELinux Smack TOMOYO Process Scheduler Web server Apache Cherokee Lighttpd Nginx CGI scripting Perl PHP Python Database Netfilter Environment: CCC Hardware CPU & RAM Botnets for DDoS-attacks cracking attempts ... Attacks stave off Network scheduler NIC device driver kmod-fs-ext4 kmod-fs-btrfs Lustre ... Competitors & Requests Linux network stack compete for customers serve Networking hardware Internet Responses Customers low latency Storage SATA SAS RAID iSCSI NAS Android smartphones Crackers want attendance Several operating systems for smart devices, such as smartphones, tablet computers, smart TVs, and in-vehicle infotainment (IVI) systems, are based on Linux. Major platforms for such systems include Android, Firefox OS, Mer and Tizen. Android has become the dominant mobile operating system for smartphones, during the second quarter of 2013, 79.3% of smartphones sold worldwide used Android.[92] Broad overview of the LAMP software bundle, displayed here Android is also a popular operating system for tablets, and together with Squid. A high-performance and high-availability Android smart TVs and in-vehicle infotainment systems web server solution providing security in a hostile environment. have also appeared in the market. MariaDB MySQL Drizzle Botnets DDoS-Attacks Linux distributions have long been used as server operating systems, and have risen to prominence in that area; Netcraft reported in September 2006, that eight of the ten most reliable internet hosting companies ran Linux distributions on their web servers.[85] Since June 2008, Linux distributions represented five of the top ten, FreeBSD three of ten, and Microsoft two of ten;[86] since February 2010, Linux distributions represented six of the top ten, FreeBSD two of ten, and Microsoft one of ten.[87] Cell phones and PDAs running Linux on open-source platforms became more common from 2007; examples include the Nokia N810, Openmoko's Neo1973, and the Motorola ROKR E8. Continuing the trend, Palm (later acquired by HP) produced a new Linux-derived operating system, webOS, which is built into its line of Palm Pre smartphones. Nokia's Maemo, one of the earliest mobile operating systems, was based on Debian.[93] It was later merged with 110 CHAPTER 5. OPERATING SYSTEM EXAMPLES Intel's Moblin, another Linux-based operating system, to form MeeGo.[94] The project was later terminated in favor of Tizen, an operating system targeted at mobile devices as well as in-vehicle infotainment (IVI). Tizen is a project within The Linux Foundation. Several Samsung products are already running Tizen, Samsung Gear 2 being the most significant example.[95] Samsung Z smartphones will use Tizen instead of Android.[96] As a result of MeeGo’s termination, the Mer project forked the MeeGo codebase to create a basis for mobileoriented operating systems.[97] In July 2012, Jolla announced Sailfish OS, their own mobile operating system built upon Mer technology. Mozilla’s Firefox OS consists of the Linux kernel, a In-car entertainment system of the Tesla Model S is based on hardware abstraction layer, a web standards based run- Ubuntu[100] time environment and user interface, and an integrated web browser.[98] Canonical has released Ubuntu Touch, its own mobile operating system that aims to bring convergence to the user experience on the operating system and its desktop counterpart, Ubuntu. The operating system also provides a full Ubuntu desktop when connected to an external monitor.[99] Embedded devices See also: Embedded Linux and Linux devices Due to its low cost and ease of customization, Linux The Jolla Phone has the Linux-based Sailfish OS is often used in embedded systems. In the nonmobile telecommunications equipment sector, the majority of customer-premises equipment (CPE) hardware runs some Linux-based operating system. OpenWrt is a community driven example upon which many of the OEM firmwares are based. Nokia X, a smartphone that runs Linux kernel For example, the popular TiVo digital video recorder also uses a customized Linux,[101] as do several network firewalls and routers from such makers as Cisco/Linksys. The Korg OASYS, the Korg KRONOS, the Yamaha Motif XS/Motif XF music workstations,[102] Yamaha Roland RD-700GX digital piano also run Linux. Linux S90XS/S70XS, Yamaha MOX6/MOX8 synthesizers, is also used in stage lighting control systems, such as the Yamaha Motif-Rack XS tone generator module, and WholeHogIII console.[103] 5.5. LINUX Gaming 111 that include the MythTV media center software, such as Mythbuntu, a special edition of Ubuntu. Main article: Linux gaming There had been several games that run on traditional desktop Linux, and many of which originally written for desktop OS. However, due to most game developers not paying attention to such a small market as desktop Linux, only a few prominent games have been available for desktop Linux. On the other hand, as a popular mobile platform, Android has gained much developer interest and there are many games available for Android. Digital security Kali Linux is a Debian-based Linux distribution designed for digital forensics and penetration testing. It comes preinstalled with several software applications for penetration testing and identifying security exploits.[110] System rescue Linux Live CD sessions have long been used as a tool for recovering data from a broken computer system and for repairing the system. Building upon that On 14 February 2013, Valve released a Linux ver- idea, several Linux distributions tailored for this purpose sion of Steam, a popular game distribution platform on have emerged, most of which use GParted as a partition PC.[104] Many Steam games were ported to Linux.[105] editor, with additional data recovery and system repair On 13 December 2013, Valve released SteamOS, a gam- software: ing oriented OS based on Debian, for beta testing, and has plans to ship Steam Machines as a gaming and • GParted Live – a Debian-based distribution develentertainment platform.[106] Valve has also developed oped by the GParted project. VOGL, an OpenGL debugger intended to aid video game [107] development, as well as porting its Source game en• Parted Magic – a commercial Linux distribution. gine to desktop Linux.[108] As a result of Valve’s effort, • SystemRescueCD – a Gentoo-based distribution several prominent games such as DotA 2, Team Fortress with support for editing Windows registry. 2, Portal, Portal 2 and Left 4 Dead 2 are now natively available on desktop Linux. On 31 July 2013, Nvidia released Shield as an attempt to use Android as a specialized gaming platform.[109] Specialized uses In space SpaceX uses multiple redundant flight computers in a fault-tolerant design in the Falcon 9 rocket. Each Merlin engine is controlled by three voting computers, with two physical processors per computer that constantly check each other’s operation. Linux is not inherently fault-tolerant (no operating system is, as it is a function of the whole system including the hardware), but the flight computer software makes it so for its purpose.[111] For flexibility, commercial off-theshelf parts and system-wide “radiation-tolerant” design are used instead of radiation hardened parts.[111] As of June 2015, SpaceX has made 19 launches of the Falcon 9 since 2010, out of which 18 have successfully delivered their primary payloads to Earth orbit, including some support missions for the International Space Station. Due to the flexibility, customizability and free and opensource nature of Linux, it becomes possible to highly tune Linux for a specific purpose. There are two main methods for creating a specialized Linux distribution: building from scratch or from a general-purpose distribution as a base. The distributions often used for this purpose include Debian, Fedora, Ubuntu (which is itself based on Debian), Arch Linux, Gentoo, and Slackware. In contrast, Linux distributions built from scratch do not have general-purpose bases; instead, they focus on the JeOS In addition, Windows was used as an operating system philosophy by including only necessary components and on non-mission critical systems—laptops used on board avoiding resource overhead caused by components conthe space station, for example—but it has been replaced sidered redundant in the distribution’s use cases. with Linux; the first Linux-powered humanoid robot is also undergoing in-flight testing.[112] Home theater PC A home theater PC (HTPC) is a The Jet Propulsion Laboratory has used Linux for a numPC that is mainly used as an entertainment system, espe- ber of years “to help with projects relating to the concially a Home theater system. It is normally connected to struction of unmanned space flight and deep space exploa television, and often an additional audio system. ration"; NASA uses Linux in robotics in the Mars rover, and Ubuntu Linux to “save data from satellites”.[113] OpenELEC, a Linux distribution that incorporates the media center software Kodi, is an OS tuned specifically for an HTPC. Having been built from the ground up ad- Teaching Linux distributions have been created to hering to the JeOS principle, the OS is very lightweight provide hands-on experience with coding and source and very suitable for the confined usage range of an code to students, on devices such as the Raspberry Pi. HTPC. In addition to producing a practical device, the intention There are also special editions of Linux distributions is to show students “how things work under the hood”. 112 5.5.6 CHAPTER 5. OPERATING SYSTEM EXAMPLES Market share and uptake Main article: Linux adoption See also: Usage share of operating systems and Industrial Light & Magic have migrated to Linux.[128][129][130] According to the Linux Movies Group, more than 95% of the servers and desktops at large animation and visual effects companies use Linux.[131] Many quantitative studies of free/open-source software focus on topics including market share and reliability, Use in government Linux distributions have also gained popularity with various local and national with numerous studies specifically examining Linux.[114] governments. The federal government of Brazil The Linux market is growing rapidly, and the revenue of is well known for its support for Linux.[132][133] servers, desktops, and packaged software running Linux [115] News of the Russian military creating its own was expected to exceed $35.7 billion by 2008. AnLinux distribution has also surfaced, and has come alysts and proponents attribute the relative success of to fruition as the G.H.ost Project.[134] The Indian Linux to its security, reliability, low cost, and freedom [116][117] state of Kerala has gone to the extent of mandating from vendor lock-in. that all state high schools run Linux on their computers.[135][136] China uses Linux exclusively Desktops and laptops According to web server statisas the operating system for its Loongson processor tics, as of March 2015, the estimated market share family to achieve technology independence.[137] of Linux on desktop computers is around 1.5%. In In Spain, some regions have developed their own comparison, Microsoft Windows has a market share Linux distributions, which are widely used in of around 91.5%, while Mac OS covers around education and official institutions, like gnuLinEx in [17] 7%. Extremadura and Guadalinex in Andalusia. France and Germany have also taken steps toward the Web servers W3Cook publishes stats that use the top adoption of Linux.[138] one million Alexa domains,[118] which as of May 2015 estimate that 96.55% of web servers run Linux, 1.73% run Windows, and 1.72% run 5.5.7 Copyright, trademark, and naming FreeBSD.[119] W3Techs publishes stats that use the top ten million Alexa domains, which is updated ev- See also: GNU/Linux naming controversy and SCOery month[120] and as of May 2015 estimates that Linux controversies 32.6% of web servers run Windows, with the rest being Linux or Unix.[121] IDC's Q1 2007 report indicated that Linux held 12.7% of the overall server Linux kernel is licensed under the GNU General Public market at that time;[122] this estimate was based on License (GPL), version 2. The GPL requires that anythe number of Linux servers sold by various compa- one who distributes software based on source code under nies, and did not include server hardware purchased this license, must make the originating source code (and separately that had Linux installed on it later. In any modifications) available to the recipient under the [139] Other key components of a typical Linux September 2008, Microsoft’s CEO Steve Ballmer same terms. stated that 60% of web servers ran Linux, versus distribution are also mainly licensed under the GPL, but they may use other licenses; many libraries use the GNU 40% that ran Windows Server.[123] Lesser General Public License (LGPL), a more permissive variant of the GPL, and the X.org implementation of Mobile devices Android, which is based on the Linux the X Window System uses the MIT License. kernel, has become the dominant operating system for smartphones. During the second quarter of Torvalds states that the Linux kernel will not move from [140][141] He specifically 2013, 79.3% of smartphones sold worldwide used version 2 of the GPL to version 3. [92] Android. Android is also a popular operating sys- dislikes some provisions in the new license which prohibit [142] tem for tablets, being responsible for more than 60% the use of the software in digital rights management. [124] According to web It would also be impractical to obtain permission from all of tablet sales as of 2013. [143] server statistics, as of December 2014 Android has a the copyright holders, who number in the thousands. market share of about 46%, with iOS holding 45%, A 2001 study of Red Hat Linux 7.1 found that this distriand the remaining 9% attributed to various niche bution contained 30 million source lines of code.[144] Usplatforms.[125] ing the Constructive Cost Model, the study estimated that Film production For years Linux has been the platform of choice in the film industry. The first major film produced on Linux servers was 1997’s Titanic.[126][127] Since then major studios including DreamWorks Animation, Pixar, Weta Digital, this distribution required about eight thousand man-years of development time. According to the study, if all this software had been developed by conventional proprietary means, it would have cost about $1.48 billion (2015 US dollars) to develop in the United States.[144] Most of the source code (71%) was written in the C programming 5.5. LINUX 113 language, but many other languages were used, including C++, Lisp, assembly language, Perl, Python, Fortran, and various shell scripting languages. Slightly over half of all lines of code were licensed under the GPL. The Linux kernel itself was 2.4 million lines of code, or 8% of the total.[144] large Linux distributions (for example, SUSE Linux and Red Hat). As of May 2011, about 8% to 13% of a modern Linux distribution is made of GNU components (the range depending on whether GNOME is considered part of GNU), as determined by counting lines of source code making up Ubuntu’s “Natty” release; meanwhile, about [152] In a later study, the same analysis was performed 9% is taken by the Linux kernel. for Debian version 4.0 (etch, which was released in 2007).[145] This distribution contained close to 283 mil5.5.8 See also lion source lines of code, and the study estimated that it would have required about seventy three thousand man• Comparison of Linux distributions years and cost US$8.16 billion (in 2015 dollars) to develop by conventional means. • Comparison of open source and closed source • Comparison of operating systems • Comparison of X Window System desktop environments • Criticism of Linux • Linux Documentation Project • Linux Foundation • List of Linux distributions • List of games released on Linux • List of operating systems The name “Linux” is also used for a laundry detergent made by Swiss company Rösch. • Loadable kernel module • Linus Torvalds § Possible NSA approach In the United States, the name Linux is a trademark reg• Usage share of operating systems istered to Linus Torvalds.[3] Initially, nobody registered it, but on 15 August 1994, William R. Della Croce, Jr. filed for the trademark Linux, and then demanded royal5.5.9 Notes ties from Linux distributors. In 1996, Torvalds and some affected organizations sued him to have the trademark as- [1] “Linux” trademark is owned by Linus Torvalds[3] and adsigned to Torvalds, and, in 1997, the case was settled.[146] ministered by the Linux Mark Institute. The licensing of the trademark has since been handled by the Linux Mark Institute. Torvalds has stated that he trademarked the name only to prevent someone else from 5.5.10 References using it. LMI originally charged a nominal sublicensing fee for use of the Linux name as part of trademarks,[147] [1] Linux Online (2008). “Linux Logos and Mascots”. Archived from the original on August 15, 2010. Retrieved but later changed this in favor of offering a free, perpetual August 11, 2009. worldwide sublicense.[148] The Free Software Foundation prefers GNU/Linux as the name when referring to the operating system as a whole, because it considers Linux to be a variant of the GNU operating system, initiated in 1983 by Richard Stallman, president of the Free Software Foundation.[11][12] A minority of public figures and software projects other than Stallman and the Free Software Foundation, notably Debian (which had been sponsored by the Free Software Foundation up to 1996[149] ), also use GNU/Linux when referring to the operating system as a whole.[101][150][151] Most media and common usage, however, refers to this family of operating systems simply as Linux, as do many [2] “The Linux Kernel Archives: Frequently asked questions”. kernel.org. September 2, 2014. Retrieved September 4, 2015. [3] “U.S. Reg No: 1916230”. United States Patent and Trademark Office. Retrieved April 1, 2006. [4] “Re: How to pronounce Linux?". Newsgroup: comp.os.linux. 23 April 1992. Usenet: [email protected]. Retrieved January 9, 2007. [5] Free On-Line Dictionary of Computing (June 2006). “Linux”. Retrieved September 15, 2009. 114 CHAPTER 5. OPERATING SYSTEM EXAMPLES [6] Safalra (14 April 2007). “Pronunciation of 'Linux'". Safalra’s Website. Retrieved September 15, 2009. [24] “Origins and History of Unix, 1969–1995”. Faqs.org. Retrieved November 9, 2010. [7] “Conflicts between ISO/IEC 9945 (POSIX) and the Linux Standard Base”. opengroup.org. 2003-07-29. Retrieved 2014-04-27. [25] “About the GNU Project – Initial Announcement”. Gnu.org. 23 June 2008. Retrieved March 9, 2009. [8] Eckert, Jason W. (2012). Linux+ Guide to Linux Certification (Third ed.). Boston, Massachusetts: Cengage Learning. p. 33. ISBN 978-1111541538. Retrieved April 14, 2013. The shared commonality of the kernel is what defines Linux; the differing OSS applications that can interact with the common kernel are what differentiate Linux distributions. [9] Linus Benedict Torvalds (5 October 1991). “Free minix-like kernel sources for 386-AT”. Newsgroup: comp.os.minix. Retrieved September 30, 2011. [10] “What Is Linux: An Overview of the Linux Operating System”. Linux Foundation. April 3, 2009. Retrieved August 15, 2011. [11] “GNU/Linux FAQ”. Gnu.org. Retrieved 1 September 2013. [12] “Linux and the GNU System”. Gnu.org. Retrieved 1 September 2013. [13] Barry Levine (26 August 2013). “Linux' 22th [sic] Birthday Is Commemorated - Subtly - by Creator”. Simpler Media Group, Inc. Retrieved 10 May 2015. Originally developed for Intel x86-based PCs, Torvalds’ “hobby” has now been released for more hardware platforms than any other OS in history. [14] "NetMarketShare:Mobile/Tablet Operating System Market Share”. [15] Computerworld, Patrick Thibodeau. “IBM’s newest mainframe is all Linux”. Retrieved February 22, 2009. [16] Lyons, Daniel (March 15, 2005). “Linux rules supercomputers”. Forbes. Retrieved February 22, 2007. [17] “Desktop Operating System Market Share”. Netmarketshare.com. Retrieved March 15, 2015. [18] Steven J. Vaughan-Nichols. “Chromebook shipments leap by 67 percent”. ZDNet. Retrieved September 29, 2015. [19] Linux Devices (January 2010). “Trolltech rolls “complete” Linux smartphone stack”. Archived from the original on 2012-05-25. Retrieved September 29, 2009. [20] “Sony Open Source Code Distribution Service”. Sony Electronics. Retrieved October 8, 2011. [21] “Sharp Liquid Crystal Television Instruction Manual” (PDF). Sharp Electronics. p. 24. Retrieved October 8, 2011. [22] IBM (October 2001). “Linux Watch (WatchPad)". Retrieved June 18, 2015. [23] Ritchie, D.M. (October 1984), “The UNIX System: The Evolution of the UNIX Time-sharing System”, AT&T Bell Laboratories Technical Journal 63 (8): 1577, However, UNIX was born in 1969 ... [26] “Overview of the GNU System”. Gnu.org. Retrieved March 9, 2009. [27] “Linus vs. Tanenbaum debate”. Archived from the original on 2012-10-03. Retrieved February 19, 2014. [28] Linksvayer, Mike (1993). “The Choice of a GNU Generation – An Interview With Linus Torvalds”. Meta magazine. Retrieved January 20, 2009. [29] “MINIX is now available under the BSD license”, April 9, 2000, minix1.woodhull.com [30] Torvalds, Linus. “What would you like to see most in minix?". Newsgroup: comp.os.minix. Usenet: [email protected]. Retrieved September 9, 2006. [31] Linus Torvalds (14 October 1992). “Chicken and egg: How was the first linux gcc binary created??". Newsgroup: comp.os.minix. Usenet: [email protected]. Retrieved August 17, 2013. [32] Torvalds, Linus (5 January 1992). “Release notes for Linux v0.12”. Linux Kernel Archives. Retrieved July 23, 2007. The Linux copyright will change: I've had a couple of requests to make it compatible with the GNU copyleft, removing the “you may not distribute it for money” condition. I agree. I propose that the copyright be changed so that it confirms to GNU ─ pending approval of the persons who have helped write code. I assume this is going to be no problem for anybody: If you have grievances (“I wrote that code assuming the copyright would stay the same”) mail me. Otherwise The GNU copyleft takes effect since the first of February. If you do not know the gist of the GNU copyright ─ read it. [33] Torvalds, Linus and David Diamond, Just for Fun: The Story of an Accidental Revolutionary, 2001, ISBN 0-06662072-4 [34] Torvalds, Linus (March 1994). “Index of /pub/linux/kernel/SillySounds”. Retrieved 2009-0803. [35] Garfinkel, Simson; Spafford, Gene; Schwartz, Alan (2003). Practical UNIX and Internet Security. O'Reilly. p. 21. [36] Santhanam, Anand; Vishal Kulkarni (1 March 2002). “Linux system development on an embedded device”. DeveloperWorks. IBM. Retrieved July 26, 2007. [37] Schrecker, Michael. “Turn on Web Interactivity with LAMP”. [38] Galli, Peter (8 August 2007). “Vista Aiding Linux Desktop, Strategist Says”. eWEEK (Ziff Davis Enterprise Inc.). Retrieved November 19, 2007. 5.5. LINUX [39] Paul, Ryan (3 September 2007). “Linux market share set to surpass Win 98, OS X still ahead of Vista”. Ars Technica (Ars Technica, LLC). Retrieved November 19, 2007. [40] Beer, Stan (23 January 2007). “Vista to play second fiddle to XP until 2009: Gartner”. iTWire (iTWire). Retrieved November 19, 2007. [41] “Operating System Marketshare for Year 2007”. Market Share. Net Applications. 19 November 2007. Retrieved November 19, 2007. [42] “Vista slowly continues its growth; Linux more aggressive than Mac OS during the summer”. XiTiMonitor (AT Internet/XiTi.com). 24 September 2007. Retrieved November 19, 2007. [43] “Global Web Stats”. W3Counter. Awio Web Services LLC. 10 November 2007. Retrieved November 19, 2007. [44] “June 2004 Zeitgeist”. Google Press Center. Google Inc. 12 August 2004. Retrieved November 19, 2007. [45] McMillan, Robert. “IBM, Brazilian government launch Linux effort”. www.infoworld.com. IDG News Service. Retrieved 16 February 2015. [46] “The Linux Foundation; Staff”. Retrieved November 10, 2011. [47] “The Free Software Foundation Management”. Retrieved November 10, 2011. [48] “Free software is a matter of liberty, not price — Free Software Foundation — working together for free software”. Fsf.org. Retrieved July 12, 2012. 115 [59] “POSIX.1 (FIPS 151-2) Certification”. [60] “How source code compatible is Debian with other Unix systems?". Debian FAQ. the Debian project. [61] Eissfeldt, Heiko (1 August 1996). “Certifying Linux”. Linux Journal. [62] “The Debian GNU/Linux FAQ – Compatibility issues”. Retrieved September 17, 2011. [63] Linux Format. “Linux Format DVD contents”. Archived from the original on 7 August 2007. Retrieved January 17, 2008. [64] linux-magazine.com. “Current Issue”. Retrieved January 17, 2008. [65] “75% of Linux code now written by paid developers”. APC. Retrieved January 22, 2010. [66] Brockmeier, Joe. “A survey of Linux Web development tools”. Retrieved December 16, 2006. [67] Advani, Prakash (8 February 2004). “If I could re-write Linux”. freeos.com. Retrieved January 23, 2007. [68] Bruce Byfield (August 14, 2007). “Is my hardware Linuxcompatible? Find out here”. Linux.com. Retrieved September 4, 2015. [69] “The LWN.net Linux Distribution List”. LWN.net. Retrieved March 18, 2015. [70] What is Linux. Archived at Wayback Engine. Retrieved 26 August 2013. [49] “Why is Linux called a monolithic kernel?". stackoverflow.com. 2009. Retrieved October 16, 2013. [71] Nathan Willis (2013-08-14). “Prompt-free security for GNOME”. LWN.net. Retrieved November 14, 2013. [50] “Anatomy of a Linux System” (PDF). O'Reilly. 2001. Retrieved October 16, 2013. [72] “Why I quit: kernel developer Con Kolivas”. APC Magazine. ACP Magazines. 24 July 2007. Archived from the original on 2011-07-07. Retrieved August 15, 2011. [51] “Mir: Welcome to Mir”. The leading OS for PC, tablet, phone and cloud | Ubuntu. Canonical Ltd. 10 October 2014. Retrieved 11 October 2014. [52] M. Tim Jones (2006-05-31). “Inside the Linux boot process”. IBM Developer Works. Retrieved October 16, 2013. [53] “Bash homepage”. GNU Project. Retrieved 29 July 2014. [54] Jake Edge (8 June 2013). “The Wayland Situation: Facts About X vs. Wayland (Phoronix)". LWN.net. Retrieved 11 October 2013. [55] “Linux TV: Television with Linux”. linuxtv.org. Retrieved October 16, 2013. [56] Jonathan Corbet (2006-10-11). “The Video4Linux2 API: an introduction”. LWN.net. Retrieved October 16, 2013. [73] “Wayland Architecture”. freedesktop.org. Retrieved January 5, 2013. [74] “The Global Desktop Project, Building Technology and Communities”. Retrieved May 7, 2006. [75] Dawe, Liam (2013-01-01). “A 2012 review and what’s in store for 2013?". GamingOnLinux. Retrieved January 2, 2013. [76] Kegel, Dan (14 February 2008). “Google’s support for Wine in 2007”. wine-devel (Mailing list). Retrieved January 3, 2009. [77] “Open Source Patches: Wine”. September 7, 2008. Google. Retrieved [57] “Part I. Video for Linux Two API Specification”. Chapter 7. Changes. linuxtv.org. Retrieved October 16, 2013. [78] Advani, Prakash (27 October 2000). “Microsoft Office for Linux?". FreeOS. FreeOS Technologies (I) Pvt. Ltd. Retrieved February 3, 2008. [58] Operating System Market Share (November 2009). “Operating System Market Share”. Retrieved December 11, 2009. [79] Smith-Heisters, Ian (11 October 2005). “Editing audio in Linux”. Ars Technica. Ars Technica, LLC. Retrieved February 3, 2008. 116 [80] Lumma, Carl (April 2007). “Linux: It’s Not Just For Computer Geeks Anymore”. Keyboard Magazine. New Bay Media, LLC. Retrieved February 3, 2008. CHAPTER 5. OPERATING SYSTEM EXAMPLES [99] “App ecosystem”. Ubuntu. Canonical Ltd. Retrieved 13 June 2014. [100] “Tesla Model S Ethernet Network Explored”. [81] James, Daniel (February 2004). “Using Linux For Recording & Mastering”. Sound On Sound. SOS Pub- [101] “TiVo ─ GNU/Linux Source Code”. Archived from the original on 19 May 2007. Retrieved December 12, 2006. lications Group. Retrieved February 3, 2008. [82] Schofield, Jack (28 May 2009). “Are netbooks losing their [102] “Case Study: How MontaVista Linux helped Yamaha developers make a great product greater” (PDF). Archived shine?". The Guardian (London). Retrieved June 2, 2010. from the original (PDF) on 25 September 2007. Retrieved August 26, 2007. [83] “Introducing the Google Chrome OS”. Official Google Blog. Blogger. 7 July 2009. Retrieved 12 June 2014. [103] “Embedded Linux: FlyingPigs the WholeHogIII runs on Linux”. [84] Stein, Scott (11 May 2011). “First Take: Samsung Series 5 Chromebook, the future of Netbooks?". Journal [104] Cifaldi, Frank (14 February 2013). “Steam Box phase one (CNET). Retrieved 12 June 2014. complete: Steam’s Linux client is out now”. Retrieved 12 June 2014. [85] “Rackspace Most Reliable Hoster in September”. Netcraft. 7 October 2006. Retrieved November 1, 2006. [105] Larabel, Michael (5 June 2014). “There’s Now 500 Games On Steam For Linux”. Journal (Phoronix). Re[86] “Aplus.Net is the Most Reliable Hosting Company Site in trieved 12 June 2014. June 2008”. Netcraft. 7 July 2008. Retrieved July 28, 2008. [106] “SteamOS”. Steam. Valve. Retrieved 12 June 2014. [87] “Most Reliable Hosting Company Sites in February [107] Larabel, Michael (16 January 2014). “Valve’s VOGL 2010”. Netcraft. 1 March 2010. Retrieved March 23, OpenGL Debugger Should Be Great”. Journal 2010. (Phoronix). Retrieved 12 June 2014. [88] SecuritySpace (1 June 2010). “Web Server Survey”. Se[108] Mattas, Jeff (25 April 2012). “Steam and Source Engine curitySpace. Retrieved June 27, 2010. being ported to Linux”. Retrieved 13 June 2014. [89] Timothy Prickett Morgan (11 December 2009). “IBM [109] Buckley, Sean (21 July 2014). “NVIDIA Shield”. punts Linux-only mainframes Big MIPS, deep discounts”. Engadget. Retrieved 13 June 2014. The Register. Retrieved July 2, 2009. [90] “TOP500 Supercomputer Sites: Operating system Family / Linux”. Top500.org. Retrieved 14 November 2014. [91] “Sublist Generator”. Top500.org. Retrieved November 2014. [110] “What is Kali Linux?". Kali Linux. Retrieved 13 June 2014. [111] Svitak, Amy (2012-11-18). “Dragon’s “RadiationTolerant” Design”. Aviation Week. Archived from the original on 2013-12-03. Retrieved 2012-11-22. [92] “Android Nears 80% Market Share In Global Smartphone [112] Steven J. Vaughan-Nichols (May 6, 2013). “To the space Shipments, As iOS And BlackBerry Share Slides, Per station and beyond with Linux”. Retrieved 14 November IDC”. 2014. [93] “Chapter 3 - maemo Platform Overview”. Wayback Ma- [113] “Five Ways NASA is Using Linux OS to Run its Space chine. Archived from the original on 2008-06-16. ReProgram”. Retrieved 14 November 2014. trieved 12 June 2012. [114] Wheeler, David A. “Why Open Source Software/Free [94] Grabham, Dan (15 February 2010). “Inter and Nokia Software (OSS/FS)? Look at the Numbers!". Retrieved merge Moblin and Maemo to form MeeGo”. Retrieved April 1, 2006. 12 June 2014. [115] “Linux To Ring Up $35 Billion By 2008”. Retrieved April [95] Whitwam, Ryan (22 February 2014). “Samsung An1, 2006. nounces Gear 2 and Gear 2 Neo Smart Watches Running Tizen, Available Worldwide In April”. Retrieved 12 June [116] “The rise and rise of Linux”. Computer Associates Inter2014. national. 10 October 2005. Archived from the original on 2007-02-17. [96] Gibbs, Samuel (2 June 2014). “Samsung Z smartphone ditches Android for Tizen software”. Retrieved 12 June [117] Jeffrey S. Smith. “Why customers are flocking to Linux”. 2014. IBM. Archived from the original on 2008-06-03. [97] “Mer Project”. Mer Project. Retrieved 12 June 2014. [118] “W3Cook FAQ”. W3Cook.com. Retrieved 30 June 2015. [98] “Firefox OS architecture”. Mozilla Developer Network. [119] “OS Market Share and Usage Trends”. W3Cook.com. ReMozilla. Retrieved 13 June 2014. trieved 30 June 2015. 5.5. LINUX 117 [120] “Technologies Overview - methodology infomation”. [143] “Keeping an Eye on the Penguin”. Linux-watch.com. 7 W3Techs.com. Retrieved 30 June 2015. February 2006. Retrieved November 9, 2010. [121] “Usage of operating systems for websites”. W3Techs.com. [144] Wheeler, David A (29 July 2002). “More Than a GigaRetrieved 30 June 2015. buck: Estimating GNU/Linux’s Size”. Retrieved May 11, 2006. [122] "─ IDC Q1 2007 report”. Linux-watch.com. 29 May 2007. Retrieved March 9, 2009. [123] Niccolai, James (September 2008). “Ballmer Still Searching for an Answer to Google”. Retrieved June 4, 2009. [145] Amor, Juan José; et al. (17 June 2007). “Measuring Etch: the size of Debian 4.0”. Retrieved September 16, 2007. [124] Egham (3 March 2014). “Gartner Says Worldwide Tablet [146] “Linux Timeline”. Linux Journal. 31 May 2006. Sales Grew 68 Percent in 2013, With Android Capturing [147] Neil McAllister (5 September 2005). “Linus gets tough 62 Percent of the Market”. Retrieved 13 June 2014. on Linux trademark”. InfoWorld. Retrieved February 24, [125] “Mobile/Tablet Operating System Market Share”. Net2008. marketshare.com. Retrieved 7 December 2014. [148] “Linux Mark Institute”. Retrieved February 24, 2008. [126] Strauss, Daryll. “Linux Helps Bring Titanic to Life”. ReLMI has restructured its sublicensing program. Our new trieved July 28, 2011. sublicense agreement is: Free – approved sublicense holders pay no fees; Perpetual – sublicense terminates only in [127] Rowe, Robin. “Linux and Star Trek”. Retrieved July 28, breach of the agreement or when your organization ceases 2011. to use its mark; Worldwide – one sublicense covers your [128] “Industry of Change: Linux Storms Hollywood”. Reuse of the mark anywhere in the world trieved March 11, 2009. [149] Richard Stallman (1996-04-28). “The FSF is no longer [129] “Tux with Shades, Linux in Hollywood”. Retrieved sponsoring Debian”. tech-insider.org. Retrieved February March 11, 2009. 8, 2014. [130] “Weta Digital – Jobs”. Retrieved November 17, 2010. [150] “About Debian”. debian.org. 2013-12-08. Retrieved Jan[131] “LinuxMovies.org – Advancing Linux Motion Picture uary 30, 2014. Technology”. Retrieved March 16, 2012. [151] Andrew D. Balsa; Coauthors. “The linux-kernel mailing list FAQ”. The Linux Kernel Archives. Kernel.org. [133] Ashurst, Mark (1 February 2004). “Brazil falls in love Archived from the original on 2012-10-01. Retrieved with Linux”. BBC News. Retrieved February 21, 2009. 2013-06-13. ...we have tried to use the word “Linux” or the expression “Linux kernel” to designate the kernel, and [134] “LV: Minister: “Open standards improve efficiency and GNU/Linux to designate the entire body of GNU/GPL'ed transparency"". Retrieved February 21, 2009. OS software,... ...many people forget that the linux kernel mailing list is a forum for discussion of kernel-related [135] “Linux Spreads its Wings in India”. Retrieved February matters, not GNU/Linux in general... 21, 2009. [132] “Brazil’s love of Linux”. Retrieved February 21, 2009. [136] “Kerala shuts windows, schools to use only Linux”. Re- [152] Côrte-Real, Pedro (31 May 2011). “How much GNU is trieved June 22, 2009. there in in GNU/Linux?". Split Perspective. Retrieved January 28, 2014. (self-published data) [137] “China’s Microprocessor Dilemma”. Microprocessor Report. Retrieved April 15, 2009. [138] Krane, Jim (30 November 2001). “Some countries are choosing Linux systems over Microsoft”. Seattle PostIntelligencer. Retrieved February 21, 2009. [139] “GNU General Public License, version 2”. GNU Project. 1991-06-02. Retrieved December 5, 2013. [140] Torvalds, Linus (26 January 2006). “Re: GPL V3 and Linux ─ Dead Copyright Holders”. Linux Kernel Mailing List. [141] Torvalds, Linus (25 September 2006). “Re: GPLv3 Position Statement”. Linux Kernel Mailing List. [142] Brett Smith (2013-07-29). “Neutralizing Laws That Prohibit Free Software — But Not Forbidding DRM”. A Quick Guide to GPLv3. GNU Project. Retrieved December 5, 2013. 5.5.11 External links • Linux at DMOZ • Graphical map of GNU/Linux OS Internals • Linux kernel website and archives • Linux.org • The History of Linux in GIT Repository Format 1992–2010 • A list of free Linux distributions, provided by the Free Software Foundation 118 CHAPTER 5. OPERATING SYSTEM EXAMPLES 5.6 Mac OS 68040). OS X, which has superseded the “Classic” Mac OS, is compatible with only PowerPC processors from For the American humanities teaching program usually version 10.0 (“Cheetah”) to version 10.3 (“Panther”). Both PowerPC and Intel processors are supported in vercalled “MACOS”, see Man: A Course of Study. sion 10.4 (“Tiger”, Intel only supported after an update) and version 10.5 (“Leopard”). 10.6 and later versions Mac OS is a series of graphical user interface–based support only Intel processors.[5] operating systems developed by Apple Inc. for their The early Macintosh operating system initially consisted Macintosh line of computer systems. of two user-visible components, called “System” and The original operating system was first introduced in “Finder”, each with its own version number.[6] Starting 1984 as being integral to the original Macintosh, and with version 5, both were incorporated under a single referred to as the “System”. Referred to by its ma- “System Software” moniker. System 7.5.1 was the first jor revision starting with “System 6” and “System 7”, to include the Mac OS logo (a variation on the original Apple rebranded version 7.6 as “Mac OS” as part of Happy Mac startup icon), and Mac OS 7.6 was the first their Macintosh clone program in 1996. The Macintosh, to be named “Mac OS”. These changes were made during specifically its system software, is credited with having the era of Macintosh clones, to disassociate the operating popularized the early graphical user interface concept. system from Apple’s own Macintosh models.[7] There have been two operating systems popularly known Before the introduction of the later PowerPC G3-based as “Mac OS”. Up to major revision 9, from 1984 to 2000, systems, significant parts of the system were stored in it is historically known as Classic Mac OS. Major revision physical ROM on the motherboard. The initial purpose 10, from 2001 to present, is branded OS X (originally re- of this was to avoid using up the limited storage of floppy ferred to as Mac OS X).[4] Major revisions to the Macin- disks on system support, given that the early Macs had tosh OS are now issued as point revisions, such that, for no hard disk (only one model of Mac was ever actually example, 10.2 is substantially different from 10.5. Both bootable using the ROM alone, the 1991 Mac Classic operating systems share a general interface design, and model). This architecture also allowed for a completely there has been some overlap of application frameworks graphical OS interface at the lowest level without the need for compatibility; but the two systems have different ori- for a text-only console or command-line mode. Boot time gins and use deeply different architectures. errors, such as finding no functioning disk drives, were 5.6.1 Design concept Apple’s original concept for the Macintosh deliberately sought to minimize the user’s conceptual awareness of the operating system. Tasks that required more operating system knowledge on other systems would be accomplished by mouse gestures and graphic controls on a Macintosh. This would differentiate it from then current systems, such as MS-DOS, which used a command-line interface consisting of tersely-abbreviated textual commands. The core of the system software was held in ROM, with updates originally provided on floppy disk, freely copyable at Apple dealers. The user’s involvement in an upgrade of the operating system was also minimized to running an installer, or replacing system files using the file manager. This simplicity was possible because the early releases lacked any access controls, in effect giving its single user root privileges at all times. 5.6.2 Versions Early versions of Mac OS were compatible only with Motorola 68000-family Macintoshes. As Apple introduced computers with PowerPC hardware, the OS was ported to support this architecture. Mac OS 8.1 was the last version that could run on a “68K” processor (the communicated to the user graphically, usually with an icon or the distinctive Chicago bitmap font and a Chime of Death or a series of beeps. This was in contrast to MS-DOS and CP/M computers of the time, which displayed such messages in a mono-spaced font on a black background, and required the use of the keyboard, not a mouse, for input. To provide such niceties at a low level, Mac OS depended on core system software in ROM on the motherboard, a fact also used to ensure that only Apple computers or licensed clones (with the copyrightprotected ROMs from Apple) could run Mac OS. “Classic” Mac OS (1984–2001) Main article: History of Mac OS The “classic” Mac OS is characterized by its monolithic system. Versions of Mac OS up through System 4 only ran one application at a time. Even so, it was noted for its ease of use. Mac OS gained cooperative multitasking with System 5, which ran on the Mac SE and Macintosh II. It was criticized for its very limited memory management, lack of protected memory, no access controls, and susceptibility to conflicts among operating system "extensions" that provide additional functionality (such as networking) or support for a particular device. Some extensions didn't work properly together, or only worked when loaded in a particular order. Troubleshooting Mac OS extensions could be a time-consuming process of bisecting and trial and error. 5.6. MAC OS 119 sions released after the release of OS X 10.4 Tiger. Most well-written “classic” applications function properly under this environment, but compatibility is only assured if the software was written to be unaware of the actual hardware, and to interact solely with the operating system. The Classic Environment is not available on Intelbased Macintosh systems due to the incompatibility of Mac OS 9 with the x86 hardware. Original 1984 Macintosh desktop The Macintosh originally used the Macintosh File System (MFS), a flat file system with only one level of folders. This was quickly replaced in 1985 by the Hierarchical File System (HFS), which had a true directory tree. Both file systems are otherwise compatible. Files in most file systems used with DOS, Windows, Unix, or other operating systems have only one "fork". By contrast, MFS and HFS give files two different “forks”. The data fork contains the same sort of information as a file in other file systems, such as the text of a document or the bitmaps of an image file. The resource fork contains other structured data such as menu definitions, graphics, sounds, or code segments that would be incorporated into a program’s file format on other systems. An executable file might consist only of resources (including code segments) with an empty data fork, while a data file might have only a data fork with no resource fork. A word processor file could contain its text in the data fork and styling information in the resource fork, so that an application which doesn’t recognize the styling information can still read the raw text. Users of the classic Mac OS generally upgraded to OS X, but many criticized it as being more difficult and less user-friendly than the original Mac OS, for the lack of certain features that had not been re-implemented in the new OS, or for being slower on the same hardware (especially older hardware), or other, sometimes serious incompatibilities with the older OS.[8] Because drivers (for printers, scanners, tablets, etc.) written for the older Mac OS are not compatible with OS X, and due to the lack of OS X support for older Apple machines, a significant number of Macintosh users continued using the older classic Mac OS. In June 2005, Steve Jobs announced at the Apple Worldwide Developers Conference keynote that Apple computers would be transitioning from PowerPC to Intel processors and thus dropping compatibility on new machines for Mac OS Classic. At the same conference, Jobs announced Developer Transition Kits that included beta versions of Apple software including OS X that developers could use to test their applications as they ported them to run on Intel-powered Macs. In January 2006, Apple released the first Macintosh computers with Intel processors, an iMac and the MacBook Pro, and in February 2006, Apple released a Mac mini with an Intel Core Solo and Duo processor. On May 16, 2006, Apple released the MacBook, before completing the Intel transition on August 7 with the Mac Pro. To ease the transition for early buyers of the new machines, Intel-based Macs included an emulation technology called Rosetta, which allows them to run OS X software that was compiled for PowerPC-based Macintosh models. Rosetta runs transparently, creating a user experience identical to running the software on a PowerPC machine, though execution is typically slower than with native code. Rosetta was an optional installation in OS X 10.6 Snow Leopard and is not available at all in OS X 10.7 Lion. On the other hand, these forks would provide a challenge to interoperability with other operating systems. In copying or transferring a MacOS file to a non-Mac system, the default implementations would simply strip the file of its resource fork. Most data files contained only nonessential information in their resource fork, such as window size and location, but program files would be inoperative without their resources. This necessitated such encoding schemes as BinHex and MacBinary, which allowed a user to encode a dual-forked file into a single stream, or inOS X versely take a single stream so-encoded and reconstitute it into a dual-forked file usable by MacOS. Main article: OS X PowerPC versions of OS X up to and including OS X v10.4 Tiger (support for Classic was dropped by Apple with v10.5 Leopard’s release and it is no longer included) OS X, introduced as Mac OS X in 2001 and renamed include a compatibility layer for running older Mac appli- OS X in 2012, is the latest version of Apple’s operatcations, the Classic Environment. This runs a full copy of ing system. Although it is officially designated as simply the older Mac OS, version 9.1 or later, in an OS X pro- “version 10” of the Mac OS, it has a history largely indecess. PowerPC-based Macs shipped with Mac OS 9.2 pendent of the earlier Mac OS releases. as well as OS X. Mac OS 9.2 had to be installed by the The operating system is the successor to Mac OS 9 user— it was not installed by default on hardware revi- and the “classic” Mac OS. It is however a Unix oper- 120 CHAPTER 5. OPERATING SYSTEM EXAMPLES ating system, based on the NeXTSTEP operating system and the XNU kernel which Apple acquired after purchasing NeXT Computer—with its CEO Steve Jobs returning to Apple at that time. OS X also makes use of the BSD code.[9] There have been 12 significant releases of OS X, the most recent being OS X 10.11, referred to as El Capitan. Prior to 10.11 came 10.10 (“Yosemite”), 10.9 (“Mavericks”), 10.8 (“Mountain Lion”), 10.7 (“Lion”), 10.6 (“Snow Leopard”), 10.5 (“Leopard”), 10.4 (“Tiger”), 10.3 (“Panther”), 10.2 (“Jaguar”), 10.1 (“Puma”), and 10.0 (“Cheetah”). cially viable in the early nineties because Microsoft's contracts for Windows 3.1 forced PC manufacturers to pay a royalty to Microsoft for every computer shipped, regardless of what operating system it contained.[12] Thus, widespread support for a new operating system with relatively few applications available was unlikely. A further complication was that Star Trek was designed to be source-level compatible, not binary compatible, with the Mac OS. Mac applications would therefore have to be recompiled or rewritten by their developers to run on the x86 architecture, and there was much skepticism as OS X also had six significant releases as OS X Server. to exactly how much work this would entail. The first of these, Mac OS X Server 1.0, was released in Fifteen years after Star Trek, support for the x86 archibeta before the client version in 1999. The server versions tecture was officially included in Mac OS, and then Apple are architecturally identical to the client versions, with the transitioned all desktop computers to the x86 architecdifferentiation found in their inclusion of tools for server ture. This was not the direct result of earlier Project Star management, including tools for managing OS X-based Trek efforts. The Darwin underpinning used for OS X workgroups, mail servers, and web servers, amongst other 10.0 and later included support for the x86 architecture. tools. As of the name change to OS X, OS X Server is no The remaining non-Darwin portion of OS X (based on longer sold as a separate operating system product. The OPENSTEP, which ran on Intel processors) was released server tools could then be added to the singular OS X officially with the introduction of x86 Macintosh computproduct, giving the same functionality. ers. In fact, Steve Jobs said that Mac OS X was “leading OS X Server is available as an operating system to-order a secret double life” during the introduction of the x86 on Mac Mini and Mac Pro computers as a part of a server transition. package. Unlike the client version, OS X Server can be run in a virtual machine using emulation software such as Parallels Desktop for Mac and VMware Fusion. 5.6.4 68k emulation OS X was used as the basis for iOS, (originally iPhone OS) used on Apple’s iPhone, iPod Touch, iPad, and See also: Mac OS nanokernel § System 7.1.2—Mac OS Apple TV.[10] 8.5.1 5.6.3 Star Trek Main article: Star Trek project Star Trek (as in “to boldly go where no Mac has gone before”) was a relatively unknown secret prototype Apple started work on in 1992, whose goal was to create a version of the classic Mac OS that would run on Intelcompatible x86 personal computers. The project was instigated by Novell, who were looking to integrate their DR-DOS with the Mac OS UI as a retort to Microsoft's Windows 3.0. The Apple/Novell team (four from Apple, four from Novell) was able to get the Macintosh Finder and some basic applications, like QuickTime, running smoothly on the x86 architecture. Some of the code from this effort was reused later when porting the Mac OS to PowerPC.[11] Although the Star Trek software was never released, third-party Macintosh emulators, such as vMac, Basilisk II, and Executor, eventually made it possible to run the classic Mac OS on Intel-based PCs. These emulators were restricted to emulating the 68000 series of processors, and as such most couldn't run versions of the Mac OS that succeeded 8.1, which required PowerPC processors. Most also required a Mac ROM image or a hardware interface supporting a real Mac ROM chip; those requiring an image are of dubious legal standing as the ROM image may infringe on Apple’s intellectual property. A notable exception was the Executor commercial software product from Abacus Research & Development, the only product that used 100% reverse engineered code without the use of Apple technology. It ran extremely quickly but never achieved more than a minor subset of functionality. Few programs were completely compatible and many were extremely crash-prone if they ran at all. Executor filled a niche market for porting 68k Mac applications to x86 platforms; development ceased in 2002 and the source code was released by the author in late 2008.[13] The project was canceled only one year later in early 1993. There are two theories for the project’s short life: the first is that Apple’s board canceled further development upon realizing that going with Star Trek would mean an entirely new business model and one that would likely see a notable drop in Apple’s lucrative hardware sales; Emulators using Mac ROM images offered near comand the second is that an x86 Mac OS was not commer- plete Mac OS compatibility and later versions offered 5.6. MAC OS 121 excellent performance as modern x86 processor perfor- processor” accelerator card. Using this method has been mance increased exponentially. said to equal or better the speed of a Macintosh with the Most of the Mac user base had already started moving same processor, especially with respect to the m68k seto the PowerPC platform that offered backward compat- ries due to real Macs running in MMU trap mode, hamibility on 8.xx & 9.xx operating systems along with faster pering performance. PowerPC software support. This helped ease the transition to PowerPC-only applications while prematurely obsolescing 68k emulators and the Classic-only applications 5.6.6 Macintosh clones they supported well before these emulators were refined Main article: Macintosh clone enough to compete with a real Mac. 5.6.5 PowerPC emulation At the time of 68k-emulator development, PowerPC support was difficult to justify not only due to the emulation code itself but also the anticipated wide performance overhead of an emulated PowerPC architecture vs. a real PowerPC based Mac. This would later prove correct with the start of the PearPC and project even years later despite the availability of 7th & 8th generation x86 processors employing similar architecture paradigms present in the PowerPC. Many application developers were also creating and releasing both 68k and PowerPC versions concurrently helping to negate the need for PowerPC emulation. PowerPC Mac users who could technically run either obviously chose the faster PowerPC applications. By 1995 Apple was no longer selling 68k-based Macs and the existing installed base quickly evaporated. Several computer manufacturers over the years have made Macintosh clones capable of running Mac OS. From 1995 to 1997 Apple licensed Macintosh ROMs to several companies, notably Power Computing, UMAX and Motorola. These machines normally ran various versions of classic Mac OS. Steve Jobs ended the clonelicensing program after returning to Apple in 1997. In 2008, Miami-based manufacturing company Psystar Corporation announced a $399 clone called OpenMac that came with a barebones system that can run Mac OS X 10.5 Leopard. Threatened with litigation, Psystar changed the name to Open Computer. Apple filed a lawsuit with the company and asked that Psystar be ordered to stop producing clone systems, recall every system sold, and pay monetary damages.[14] Eventually, Apple prevailed in court, and the Open Computer’s production was ceased. Psystar itself appears to be defunct now, as the company’s website is gone. The PearPC emulator is capable of emulating the PowerPC processors required by newer versions of the Mac OS (like OS X). Unfortunately, it is no longer main- Mac OS on non-Apple-labeled computers tained and, like many emulators, tends to run much slower than a native operating system would. Main article: OSx86 During the transition from PowerPC to Intel processors, Apple realized the need to incorporate a PowerPC emulator into OS X in order to protect its customers’ investments in software designed to run on the PowerPC. Apple’s solution is an emulator called Rosetta. Prior to the announcement of Rosetta, industry observers assumed that any PowerPC emulator running on an x86 processor would suffer a heavy performance penalty (e.g., PearPC’s slow performance). Rosetta’s relatively minor performance penalty therefore took many by surprise. Although a violation of Apple’s EULA,[15] running OS X operating systems compiled for x86 or x86_64 (“Intel 64”) on a non-Apple PC is possible using several approaches. Installation of Mac OS X requires a Mac OS X Installer emulator, the most straightforward of which is a USB flash drive–type Installer emulator. Once the installation has been successfully completed to the hard drive, the hard drive may be booted using the emulator portion of the USB flash drive as a “helper” and a boot loader Installer may be downloaded and used to place the boot loader on the hard drive’s boot blocks. Thereafter, Mac OS X may be booted from the hard drive alone; the installed boot loader takes care of any required device injection and/or kernel patching. Another PowerPC emulator is SheepShaver, which has been around since 1998 for BeOS on the PowerPC platform, but in 2002 was open sourced, and efforts began to port it to other platforms. Originally it was not designed for use on x86 platforms and required an actual PowerPC processor present in the machine it was running on similar to a hypervisor. Although it provides PowerPC processor Mac OS X is generally compatible with any Intel desktopsupport, it can only run up to Mac OS 9.0.4 because it based system or Intel-based motherboard, ICH6 or does not emulate a memory management unit. later,[16] however compatibility past Snow Leopard canOther examples include ShapeShifter (by the same pro- not be assured with ICH6. Compatibility with ICH7 and grammer that conceived SheepShaver), Fusion and iFu- with Lion and 945 (G)MCH has already been demonsion. The latter ran classic Mac OS with a PowerPC “co- strated and proven. Compatibility with ICH7 or later and 122 CHAPTER 5. OPERATING SYSTEM EXAMPLES any associated MCH/(G)MCH is quite good, certainly in- 5.6.10 cluding Lion, and possibly also including Mountain Lion. Mac OS X compatibility with Intel laptop- or netbookbased systems is quite variable but has been successful on a few Intel Atom-based netbooks. 5.6.7 A/UX Main article: A/UX In 1988, Apple released its first UNIX-based OS, A/UX, which was a UNIX operating system with the Mac OS look and feel. It was not very competitive for its time, due in part to the crowded UNIX market and Macintosh hardware lacking high-end design features present on workstation-class computers. A/UX had most of its success in sales to the U.S. government, where POSIX compliance was a requirement that Mac OS could not meet. 5.6.8 MAE Main article: Macintosh Application Environment References [1] “The Open Brand – Register of Certified Products – OS X 10.5 on Intel-based Macintosh computers”. The Open Group. Retrieved November 22, 2009. [2] “The Open Brand – Register of Certified Products – OS X 10.6 on Intel-based Macintosh computers”. The Open Group. Retrieved November 22, 2009. [3] “Apple page on UNIX”. Apple Inc. Retrieved November 5, 2008. [4] Patel, Nilay (February 16, 2012). “Apple officially renames Mac OS X to OS X, drops the 'Mac'". The Verge. Retrieved February 21, 2012. [5] “OS X 10.6 Snow Leopard Installation and Setup Guide” (PDF). Apple Inc. Retrieved April 6, 2010. [6] “Official Apple Support”. apple.com. [7] “System 7.5 and Mac OS 7.6: The Beginning and End of an Era”. Mac OS 7.6 deserves some special mention. The most obvious difference is the name change; this was for the Mac clone manufacturers, who weren’t making Macintoshes but “Mac OS Computers”. [8] “OS X 10.1”. The Macintosh Application Environment (MAE) was [9] “Mac OS X: What is BSD?". a software package introduced by Apple Computer in 1994 which allowed users of certain Unix-based com- [10] “What operating system does the iPhone use? Can it run puter workstations to run Apple Macintosh application MacOS X applications like Skype and Photoshop?". July software. 5, 2010. Retrieved April 4, 2014. MAE used the X Window System to emulate a Macin[11] Hormby (2005) tosh Finder-style graphical user interface. The last version, MAE 3.0, was compatible with System 7.5.3. [12] “Caldera Sues Microsoft”. maxframe.com. MAE was available for Sun Microsystems SPARCstation and Hewlett-Packard systems. It was discontinued [13] “Executor source code”. on May 14, 1998. [14] Paul McDougall (July 16, 2008). “Apple Demands Recall Of Psystar Mac Clones”. InformationWeek. Retrieved December 30, 2010. 5.6.9 MkLinux Main article: MkLinux [15] “Software License Agreement For OS X” (PDF). Apple, Inc. Retrieved May 10, 2010. This License allows you to install, use and run one (1) copy of the Apple Software on a single Apple-labeled computer at a time. You agree not to install, use or run the Apple Software on any nonApple-labeled computer, or to enable others to do so. Announced at The 1996 World Wide Developers Conference (WWDC), MkLinux is an open source computer operating system started by the OSF Research Institute and Apple Computer in February 1996 to port Linux to [16] Apple Inc’s Intel “Proof of Concept” motherboard was 945 (G)MCH- and ICH6-based. the PowerPC platform, and thus Macintosh computers. In the summer of 1998, the community-led MkLinux Developers Association took over development of the operating system. MkLinux is short for “Microkernel Linux,” 5.6.11 Bibliography which refers to the project’s adaptation of the Linux ker• Hormby, Tom (2005) “Star Trek: Apple’s First Mac nel to run as a server hosted atop the Mach microkernel. MkLinux is based on version 3.0 of Mach. OS on Intel Project” 5.6. MAC OS 5.6.12 External links • OS X – Official site • Mac 101 – Apple’s introductory guide to the Mac OS. • Folklore.org – A site of anecdotes shared by the creators of the first Macintosh. • The Vintage Mac Museum: – Old Mac System – From System1 to System7 • Mac System 1 in your browser • Mac System 7 in your browser • BYTE Magazine September 1986, Amiga vs. Macintosh - A programmer’s comparison of the system calls on two 68000-based machines 123 Chapter 6 Text and image sources, contributors, and licenses 6.1 Text • Operating system Source: https://en.wikipedia.org/wiki/Operating_system?oldid=684540497 Contributors: Damian Yerrick, Magnus Manske, Brion VIBBER, Mav, Robert Merkel, The Anome, Tarquin, Stephen Gilbert, Jeronimo, Amillar, Awaterl, Andre Engels, Rmhermen, Christian List, Fubar Obfusco, Ghakko, SolKarma, SimonP, Hannes Hirzel, Ellmist, Ark~enwiki, Heron, Hirzel, Olivier, Edward, Ubiquity, Patrick, RTC, Ghyll~enwiki, D, Norm, Kku, Tannin, Wapcaplet, Ixfd64, Eurleif, Dori, Minesweeper, CesarB, Ahoerstemeier, KAMiKAZOW, Gepotto, Kokamomi, Stevenj, Nanshu, Typhoon, Yaronf, Darkwind, Trisweb, Nikai, IMSoP, Rotem Dan, Evercat, Jordi Burguet Castell, ²¹², Mxn, GRAHAMUK, Conti, Hashar, Htaccess, Dysprosia, Tpbradbury, Maximus Rex, Furrykef, Cleduc, Bevo, Traroth, Shizhao, Gerard Czadowski, Joy, Stormie, AnonMoos, Olathe, Lumos3, Sewing, Branddobbe, Robbot, Noldoaran, Sander123, Fredrik, RedWolf, Moondyne, Romanm, Lowellian, Stewartadcock, Rfc1394, SchmuckyTheCat, Texture, Blainster, Caknuck, Mendalus~enwiki, Kagredon, Tobias Bergemann, McDutchie, Alexwcovington, Martinwguy, Giftlite, DavidCary, Kim Bruning, Kenny sh, Ævar Arnfjörð Bjarmason, Tom harrison, Zigger, SheikYerBooty, Foot, No Guru, Enigmar007, CyborgTosser, Jfdwolff, Sdfisher, AlistairMcMillan, Falcon Kirtaran, VampWillow, Jaan513, Wiki Wikardo, Wmahan, K7jeb, Alexf, Bact, Kjetil r, Antandrus, Beland, Onco p53, Kusunose, Ablewisuk, Am088, Karol Langner, 1297, Rdsmith4, APH, Bornslippy, Bbbl67, Zfr, Gschizas, Gscshoyru, Creidieki, Henriquevicente, Jh51681, Hillel, Demiurge, Zondor, Squash, Grunt, Canterbury Tail, Bluemask, Gazpacho, Mike Rosoft, Rolandg, D6, Ta bu shi da yu, Archer3, RossPatterson, Discospinster, Rich Farmbrough, Lovelac7, Florian Blaschke, Wk muriithi, HeikoEvermann, Notinasnaid, SocratesJedi, Andrew Maiman, Dyl, Rubicon, ESkog, JoeSmack, Ylee, CanisRufus, Livajo, TyrelHa, MBisanz, Ben Webber, El C, Phil [email protected], Mwanner, RoyBoy, EurekaLott, Triona, Dudboi, Coolcaesar, Wareh, Bastique, Afed, Bobo192, Iamunknown, Viriditas, R. S. Shaw, Polluks, Jjk, Daesotho, Syzygy, Cncxbox, Kjkolb, Nk, Trevj, Minghong, Idleguy, Justinc, Nsaa, Mdd, Jumbuck, Musiphil, Alansohn, Guy Harris, Conan, Uogl, Atlant, Jeltz, Andrewpmk, Riana, Stephen Turner, Gaurav1146, Wdfarmer, Snowolf, Wtmitchell, Ronark, Gbeeker, Wtshymanski, Paul1337, Max Naylor, RainbowOfLight, LFaraone, Bsadowski1, Gortu, Kusma, Freyr, Djsasso, Dan100, Markaci, Rzelnik, Kenyon, Sam Vimes, Woohookitty, Karnesky, Lost.goblin, Shreevatsa, Georgia guy, TigerShark, Prophile, Ae-a, Thorpe, MattGiuca, Robert K S, Ruud Koot, JeremyA, Hdante, MONGO, Miss Madeline, Acerperi, Robertwharvey, Schzmo, Eyreland, Meneth, Umofomia, Waldir, Wayward, , Jbarta, Marudubshinki, Mandarax, Slgrandson, Graham87, Cuvtixo, BD2412, MC MasterChef, Kbdank71, CarbonUnit, Jclemens, Brolin Empey, Gorrister, Rjwilmsi, Dosman, Koavf, Attitude2000, Raffaele Megabyte, Alll~enwiki, OKtosiTe, Ian Dunster, Sango123, DirkvdM, Fish and karate, SNIyer12, Titoxd, Ian Pitchford, Mirror Vax, Pruefer, SchuminWeb, RobertG, Ground Zero, Latka, Winhunter, Crazycomputers, RexNL, Gurch, Patato, Ayla, Intgr, Zotel, Ahunt, BMF81, Tarmo Tanilsoo, Qaanol, Theshibboleth, King of Hearts, Chobot, SirGrant, Celebere, DVdm, Cactus.man, Carlosvigopaz, Roboto de Ajvol, YurikBot, Wavelength, TexasAndroid, Hawaiian717, RattusMaximus, X42bn6, Daverocks, Logixoul, DestroyerPC, Arado, Gardar Rurak, SpuriousQ, Lar, Hansfn, Stephenb, Gaius Cornelius, Cpuwhiz11, Canageek, Dmlandfair, Big Brother 1984, NawlinWiki, Shreshth91, Wiki alf, Astral, Grafen, Ang3lboy2001, Jaxl, SivaKumar, RazorICE, Ino5hiro, Nick, Xdenizen, Moe Epsilon, Mikeblas, MarkSG, Tony1, Joshlk, Dasnov, DeadEyeArrow, Gogodidi, Ke5crz, Oliverdl, Elkman, Nlu, Mike92591, Wknight94, Dsda, Daniel C, Floydoid, Phgao, TheguX, Zzuuzz, Tokai, Clindhartsen, Theda, Closedmouth, E Wing, KGasso, Anouymous, Josh3580, Charlik, JoanneB, Alasdair, LeonardoRob0t, Fram, JLaTondre, Fsiler, Chris1219, Ilmari Karonen, Katieh5584, Simxp, Meegs, NeilN, Delinka, Teply, Rayngwf, Tyomitch, Arcadie, Kimdino, Luk, Davidam~enwiki, Sardanaphalus, SmackBot, Drummondjacob, MattieTK, Smadge1, Captain Goggles, Aim Here, Julepalme, KAtremer, Incnis Mrsi, Caminoix, Reedy, Ashley thomas80, KnowledgeOfSelf, Hydrogen Iodide, Unyoyega, Lvken7, Rokfaith, Blue520, WilyD, Jfg284, KocjoBot~enwiki, Chairman S., Matthuxtable, Jedikaiti, Monz, BiT, Alsandro, Müslimix, Yamaguchi , Macintosh User, SmackEater, Gilliam, Ohnoitsjamie, Hmains, Betacommand, Cybiko123, Ennorehling, ERcheck, JSpudeman, JorgePeixoto, BenAveling, Guess Who, Andyzweb, GoneAwayNowAndRetired, Bluebot, Bidgee, Unbreakable MJ, DStoykov, Badriram, Thumperward, DJ Craig, Mnemoc, Miquonranger03, MalafayaBot, AlexDitto, Jerome Charles Potts, Lexlex, Letdorf, Omniplex, Vbigdeli, Baronnet, DHNbot~enwiki, Charles Nguyen, MovGP0, Philip Howard, Darth Panda, Cfallin, Verrai, FredStrauss, Emurphy42, Schwallex, Rrelf, J00tel, Can't sleep, clown will eat me, Милан Јелисавчић, Frap, Onorem, Skidude9950, Parasti, Nixeagle, Sommers, Snowmanradio, JonHarder, Thecomputist, Yidisheryid, Benjamin Mako Hill, DrDnar, Yoink23, Addshore, Flubbit, Kcordina, Edivorce, Mr.Z-man, Slogan621, SundarBot, Easwarno1, Paul E T, Grover cleveland, Crboyer, Khoikhoi, World-os.com, Cybercobra, Jhonsrid, Nakon, VegaDark, MisterCharlie, Tompsci, Warren, Renamed user 8263928762779, Huszone, Tomcool, Mwtoews, Leaflord, Kidde, Sigma 7, LeoNomis, Ck lostsword, Fyver528, Qwerty0, The undertow, SashatoBot, Lambiam, Harryboyles, Cdills, Kuru, Rodri316, Vincenzo.romano, Sir Nicholas de MimsyPorpington, Linnell, Edwy, Kashmiri, Joffeloff, Goodnightmush, Antonielly, KenBest, IronGargoyle, Ben Moore, Camilo Sanchez, Tom Hek, Chrisch, Aaronstj, Hanii Puppy, Loadmaster, JHunterJ, Ems2, Noah Salzman, Ehheh, Nayak143, Manifestation, Tdscanuck, MTSbot~enwiki, Rlinfinity, Wwagner, Lucid, Rubena, Emx~enwiki, Iridescent, Casull, Twas Now, Golfington, Beno1000, Jfayel, Zlemming, 124 6.1. TEXT 125 Courcelles, Linkspamremover, Desolator12, Slobot, Tawkerbot2, Alegoo92, Gumbos, Cartread, Tgnome, EvilRobot69, Fvasconcellos, J Milburn, JForget, James pic, Ahy1, Unixguy, CmdrObot, Deon, Ale jrb, Raysonho, Mattbr, Flonase, Makeemlighter, Btate, Kev19, Charles dye, RockMaster, Michael B. Trausch, NE Ent, SolarisBigot, SpooK, TempestSA, Karimarie, Mblumber, Krauss, A876, Oosoom, Mortus Est, Michaelas10, Gogo Dodo, Travelbird, David Santos, TheWorld, Corpx, Spanglegluppet, Medovina, Odie5533, Kotiwalo, Dynaflow, Christian75, Chrislk02, DarkLink, Trevjs, Sp, After Midnight, Omicronpersei8, Vanished User jdksfajlasd, Landroo, Maziotis, Rbanzai, Nrabinowitz, JamesAM, Littlegeisha, Thijs!bot, Epbr123, Kubanczyk, Jobrad, Qwyrxian, Ultimus, Anshuk, N5iln, Jdm64, Ursu17, Marek69, James086, Doyley, Optimisticrizwan, TommyB7973, Ideogram, TurboForce, CharlotteWebb, CarbonX, SusanLesch, Ablonus, Sean William, TarkusAB, Dawnseeker2000, AlefZet, Escarbot, Dzubint, KrakatoaKatie, AntiVandalBot, Mike33, Luna Santin, Widefox, Guy Macon, Seaphoto, QuiteUnusual, ForrestVoight, Prolog, Memset, [email protected], PhJ, Credema, Sridip, Yellowdesk, Alphachimpbot, Jstirling, MichaelR., Storkk, Eleete, MikeLynch, Ioeth, JAnDbot, Chaitanya.lala, SuperLuigi31, Leuko, Numlockfishy, DuncanHill, NapoliRoma, Ethanhardman3, MER-C, Arch dude, Nvt~enwiki, Socalaaron, Hut 8.5, Greensburger, Knokej, Adams kevin, Bookinvestor, SteveSims, Raanoo, Bencherlite, Pierre Monteux, RogierBrussee, Jaysweet, Bongwarrior, VoABot II, Nyq, JamesBWatson, Marko75, SHCarter, Kajasudhakarababu, PeterStJohn, Lucyin, Sedmic, Rami R, Inklein, Jatkins, Twsx, Bubba hotep, Manojbp07, Alanbrowne, Bleh999, Indon, 28421u2232nfenfcenc, Creativename, Papadopa, User A1, Bwildasi, Glen, DerHexer, Wdflake, Janitor Starr, ChaoticHeavens, Calltech, Seba5618, Oroso, Stephenchou0722, Adriaan, AVRS, PhantomS, MartinBot, Miaers, BetBot~enwiki, Alexswilliams, Ethan.hardman, Vanessaezekowitz, Kiore, Twitty666, Aladdin Sane, Comperr, Rettetast, Joemaza, Anaxial, Jonathan Hall, Mickyfitz13, R'n'B, CommonsDelinker, Nono64, PrestonH, Cesarth~enwiki, Tgeairn, Erkan Yilmaz, Manticore, J.delanoy, Pharaoh of the Wizards, Trusilver, Uncle Dick, Public Menace, Jesant13, DanDoughty, Johnnaylor, Jerry, Ian.thomson, Cpiral, Alexei-ALXM, Davidm617617, Dispenser, It Is Me Here, Katalaveno, Mc hammerutime, Grosscha, Silas S. Brown, AntiSpamBot, Plasticup, Dvn805, Warut, NewEnglandYankee, Burkeaj, Matthardingu, Super Mac Gamer, Cobi, Touch Of Light, Tatrgel, Bigdumbdinosaur, Mufka, Manassehkatz, Orrs, Tdrtdr, DigitallyBorn, Althepal, Cometstyles, Mwheatland, Simon the Dragon, RB972, Vanished user 39948282, Treisijs, Dekard, MrPaul84, Bonadea, Useight, TheNewPhobia, CardinalDan, Idioma-bot, Joecoolatjunkmaildotcom, Signalhead, Vox Humana 8', S.borchers, Hammersoft, VolkovBot, Thedjatclubrock, Thomas.W, Riahc3, Murderbike, S10462, Rhyswynne, Jeff G., AlnoktaBOT, Brownga, Philip Trueman, Kyuuseishu, TXiKiBoT, Oshwah, Masonkinyon, Amphlett7, Zidonuke, Manmohan Brahma, Neversay.misher, Hqb, NPrice, Ngien, Naohiro19 revertvandal, Wingnutamj, Vanished user ikijeirw34iuaeolaseriffic, Anna Lincoln, Ocolon, Lradrama, Melsaran, Mistman123, JhsBot, Sanfranman59, Jackfork, LeaveSleaves, Tpk5010, Seb az86556, Random Hippopotamus, 1yesfan, Hrundi Bakshi, Wikiisawesome, Kaustubh.singh, Maxim, Rjgarr, Ngch89, Milan Keršláger, Lejarrag, BigDunc, Andy Dingley, Dirkbb, Jsysinc, Alten~enwiki, Wasted Sapience, Prashanthomesh, Jpeeling, Benneman~enwiki, Rainsak, WJetChao, Synthebot, Falcon8765, Enviroboy, Duke56, RaseaC, Insanity Incarnate, Brianga, Jackmiles2006, Zx-man, AlleborgoBot, Badhaker, Jimmi Hugh, Bhu z Crecelu, Logan, EmxBot, Deconstructhis, Kbrose, The Random Editor, SPQRobin, SieBot, Coffee, Utahraptor ostrommaysi, Rektide, YonaBot, Euryalus, BotMultichill, EwokiWiki, Themoose8, Zephyrus67, Zemoxian, Winchelsea, Josh the Nerd, RavenXtra, Rockstone35, DBishop1984, Triwbe, March23.1999, Yintan, Revent, DavidHalko, Kaypoh, GrooveDog, Jerryobject, Purbo T, Buonoj, Android Mouse, Toddst1, Flyer22, Oda Mari, Aruton, Oxymoron83, Antonio Lopez, Harry~enwiki, Techman224, BenoniBot~enwiki, Dantheman88, P.Marlow, Pithree, Echo95, Pinkadelica, M2Ys4U, Nergaal, Denisarona, Escape Orbit, Martarius, ClueBot, Avenged Eightfold, GorillaWarfare, PipepBot, Wikievil666, The Thing That Should Not Be, Alksentrs, MarioRadev, Rilak, Emwave, Jan1nad, ImperfectlyInformed, Arakunem, Drmies, Cp111, Unknown-xyz, Mild Bill Hiccup, E.mammadli~enwiki, Kathleen.wright5, Polyamorph, Boing! said Zebedee, McLovin34, Niceguyedc, Jdrowlands, Mbalamuruga, Lyt701, Danieltobey, Ramif 47, The1DB, Asiri wiki, DragonBot, Rbakels, Excirial, Socrates2008, Jusdafax, M4gnum0n, Andy pyro, Susheel verma, Eeekster, John Nevard, Kamanleodickson~enwiki, Winston365, Njuuton, Lightedbulb, Posix memalign, Garlovel, Sun Creator, Tyler, Jotterbot, Josef.94, Tnxman307, Dekisugi, Youwillnevergetthis, Rmere, Yes-minister, Muralihbh, La Pianista, Ninuxpdb~enwiki, OlurotimiO, Thingg, Andy16666, Callmejosh, Aitias, Bagunceiro, Mdikici, Johnuniq, SF007, Kerowhack, DumZiBoT, XLinkBot, Aaron north, Spitfire, MarmotteNZ, Stickee, Rror, Agentlame, Rreagan007, Klungel, Skarebo, WikHead, ErkinBatu, NellieBly, Galzigler, KenshinWithNoise, Alexius08, Kgoetz, Osarius, HexaChord, JimPlamondon, CalumH93, Ratnadeepm, Ghettoblaster, NNLauron, AVand, Wluka, Donhoraldo, Love manjeet kumar singh, Melab-1, Mabdul, Ente75, Raywil, Tothwolf, Grandscribe, Elsendero, Ronhjones, CanadianLinuxUser, Scherr, Debloper, Lindert, Ka Faraq Gatri, MrOllie, Download, Eivindbot, LaaknorBot, Chamal N, CarsracBot, EconoPhysicist, M.r santosh kumar., Glane23, AnnaFrance, Favonian, Kyle1278, LinkFA-Bot, Jasper Deng, Manickam001, Tide rolls, Luckas Blade, Teles, Gail, Jarble, Legobot, Wisconsinsurfer, Luckas-bot, Yobot, Applechair, WikiDan61, 2D, OrgasGirl, Senator Palpatine, Josepsbd, II MusLiM HyBRiD II, PlutosGeek, 2nth0nyj, Washburnmav, Mmxx, THEN WHO WAS PHONE?, Nallimbot, Sven nestle, Golftheman, Baron1984, Timir Saxa, Knownot, Masharabinovich, Amicon, Quarkuar, TestEditBot, South Bay, Tempodivalse, Synchronism, Jorge.guillen, AnomieBOT, Create g77, 1exec1, Götz, Geph, Lucy-seline, Jim1138, 789455dot38, 9258fahsflkh917fas, Piano non troppo, AdjustShift, Law, Remixsoft10, RandomAct, Flewis, Materialscientist, Mcloud91, 9marksparks9, Twistedkevin, Felyza, Rabi Javed, Johnny039, Waterjuice, GB fan, Ashikpa, Xqbot, TheAMmollusc, Holden15, Capricorn42, CoolingGibbon, Biometricse, Nasnema, Mononomic, Jeffwang, Inferno, Lord of Penguins, HDrake, Pmlineditor, Nayvik, RibotBOT, Kyng, Oroba, Karolinski, Cul22dude, Sophus Bie, Sidious1741, Maitchy, N419BH, =Josh.Harris, Shadowjams, Chatul, Astatine-210, Kevin586, Endothermic, Jerrysmp, Lkatkinsmith, Captain-n00dle, Erickanner, FrescoBot, OspreyPL, Ashleypurdy, Trimaine, Pepper, Mthomp1998, Fobenavi~enwiki, Gauravdce07, Michael93555, Cps274203, Ishanjand, Photonik UK, Clsin, Jjupiter100, Kwiki, Dhtwiki, WellHowdyDoo, DivineAlpha, Safinaskar, Citation bot 1, Skomes, DrilBot, Pinethicket, I dream of horses, Abazgiri, Vicenarian, Elockid, AR bd, 10metreh, Martin smith 637, Skyerise, Ngyikp, Bfirsh, Jschnur, RedBot, MastiBot, Serols, Chikoosahu, Meaghan, Ltomuta, Gtgray1948, Merlion444, White Shadows, Tim1357, Wormsgoat, TobeBot, Trappist the monk, SchreyP, Yunshui, Zonafan39, ئاراس نوری, Mptb3, Javierito92, Dinamik-bot, Vrenator, TBloemink, MrX, SeoMac, Defender of torch, Ansumang, Aoidh, Ondertitel, DeDroa, Rro4785, WikiTome, Weedwhacker128, Lysander89, Reach Out to the Truth, Jesse V., Programming geek, DARTH SIDIOUS 2, Dexter Nextnumber, SirGre, Alextyhy, Jfmantis, Onel5969, Kjaleshire, Mean as custard, Mppl3z, TjBot, Pontiacsunfire08, Stealthmartin, BjörnBergman, Sweet blueberry pie, Sarikaanand, DiaNoCHe, Francis2795, Lordmarlineo, Slon02, Urvashi.iyogi, Deagle AP, Rollins83, N sharma000, Vinnyzz, EmausBot, Gfoley4, Tasting boob, Odell421, SampigeVenkatesh, RA0808, Cookdn, Nwusr123log, Mrankur, CaptRik, NotAnonymous0, Tommy2010, Elvenmuse, Wikipelli, Alisha.4m, Werieth, ZéroBot, John Cline, Ida Shaw, Josve05a, Parsonscat, MithrandirAgain, Enna59, NicatronTg, EdEColbert, Bbuss, Ferrenrock, Lt monu, Vorosgy, Fred Gandt, Hazard-SJ, Bijesh nair, Can You Prove That You're Human, Demonkoryu, Utilitytrack, Tolly4bolly, Thine Antique Pen, W163, Eab28, Icefirearceus, Arman Cagle, THeReDragOn, OllieWilliamson, L Kensington, Bachinchi, Gsarwa, Donner60, Wikiloop, Djonesuk, Puffin, Adityachodya, ChuispastonBot, Wakebrdkid, GrayFullbuster, Sven Manguard, DASHBotAV, Rocketrod1960, Blu Aardvark III, Jekyllhide, Cgt, Sonicyouth86, Petrb, MetaEntropy, ClueBot NG, Cwmhiraeth, Nothingisoftensomething, Frankdushantha, JetBlast, Matthiaspaul, NULL, Satellizer, Sparkle24, Dhardik007, Adair2324, WorldBrains, SunCountryGuy01, Feedintm, Doh5678, Sainath468, Muon, Mesoderm, O.Koslowski, Geekman314, 149AFK, Joshua Gyamfi, CaroleHenson, Alenaross07, Widr, WikiPuppies, Ashish Gaikwad, Sharanbngr, Friecode, Cllnk, Helpful Pixie Bot, Jijojohnpj, Mujz1, පසිඳු කාවින්ද, Ndavidow, Calabe1992, Wbm1058, Karabulutis252, Sunay419, Altay437, Muehlburger, Lowercase sigmabot, Lifemaestro, BG19bot, Pcbsder, Integralexplora, Northamerica1000, Who.was.phone, Snow Rise, Abhik0904, FutureTrillionaire, Atomician, 126 CHAPTER 6. TEXT AND IMAGE SOURCES, CONTRIBUTORS, AND LICENSES CimanyD, Yowanvista, Dainomite, Aranea Mortem, Bcxfu75k, Upthegro, Lmmaaaoooo, Glacialfox, Isacdaavid, GeneralChrisV, Jkl4201, Achowat, Vikrant manore, ItsMeowAnywhere, Iswariya.r, SupernovaExplosion, Sharkert, Pratyya Ghosh, Cyberbot II, Fronx, DreamFieldArts, Meowmeow8956, Macintosh123, MadGuy7023, JYBot, TravellerQLD, Dexbot, Sakariyerirash, Kushalbiswas777, Ziiike, Webclient101, Mualif02, 12Danny123, Nozomimous, TwoTwoHello, Frosty, SFK2, Hair, Openmikenite, Sowlos, Harris james, Corn cheese, Crossy1234, Epicgenius, Poydoy, Acetotyce, Carrot Lord, Pdecalculus, Sosthenes12, ArjunML, EngGerm12, AnthonyJ Lock, Mjoshi91, Comp.arch, Melody Lavender, Fercho333, AlexanderRedd, Samueljjc, Dannyruthe, Bbirkinbine, Inaaaa, FrB.TG, Monkbot, Augbog, JoeHebda, TerryAlex, NQ, Offy284, Suspender guy, Nelsonkam, TranquilHope, ChamithN, Endlesss2014, Derpmeup, Trevor35on, Mathewisgreat, Epigogue, Ign christian, Kethrus, ToonLucas22, Prakashmeansvictory, Harshkohli1, Kharl denis, Infinite0694, OSMAX20, KasparBot, Qazi Umar FarooqKing, Squingo44, Jainishita, Jay1818, Thallyace, Satyaki Mukherjee (Rik), Nanaymo09090909, Amankesarwani, Wulfan Sravotsk, Nickrascal, Cpraveer, Coolindore2011, Wwsaa, Hauntedmath, Starglider1, Song Syphan and Anonymous: 2446 • Input/output Source: https://en.wikipedia.org/wiki/Input/output?oldid=676355387 Contributors: Lee Daniel Crocker, Bryan Derksen, Rjstott, Larry Sanger, Mudlock, DavidLevinson, Heron, B4hand, Patrick, Nixdorf, Ixfd64, Mdebets, Ahoerstemeier, Greenrd, Atreyu42, Furrykef, Jnc, Fvw, RedWolf, Hemanshu, Hadal, Tobias Bergemann, Dave6, Mintleaf~enwiki, COMPATT, Siroxo, Tagishsimon, Wmahan, Neilc, Kusunose, Karl-Henner, Aidan W, Hellisp, Discospinster, Pavel Vozenilek, CanisRufus, Liberatus, Kyz, Polluks, Goodoldpolonius, Fritzpoll, Sligocki, Goodoldpolonius2, Helixblue, Knowledge Seeker, Suruena, Sciurinæ, Anonymous4367, PdDemeter, Guy M, Rtdrury, Apokrif, Grika, Isnow, Alecv, Kesla, Graham87, Kbdank71, Rjwilmsi, Koavf, N-Man, Ttwaring, FlaBot, Mirror Vax, Richdiesal, Nivix, Ewlyahoocom, Gurch, Quuxplusone, NevilleDNZ, Bornhj, YurikBot, Hairy Dude, Bhny, Gardar Rurak, Stephenb, Pseudomonas, DragonHawk, Redconfetti, Jbattersby, CorbieVreccan, Haemo, Saric, Zzuuzz, Rlove, Fram, TuukkaH, DXBari, Davewild, Eskimbot, Ignacioerrico, Gilliam, The Rogue Penguin, Octahedron80, JonHarder, Tompsci, HarisM, Polonium, Cuperdon, Mwtoews, SashatoBot, Lambiam, Microchip08, 16@r, Noah Salzman, AxG, MTSbot~enwiki, Iridescent, Courcelles, Tawkerbot2, FatalError, Ale jrb, Dgw, NickW557, Badseed, Cydebot, DumbBOT, Ebrahim, Thijs!bot, Poorleno, Epbr123, Al Lemos, Rhrad, Dawnseeker2000, Escarbot, Seaphoto, Jj137, BlueSquadronRaven, JAnDbot, NapoliRoma, Hut 8.5, EagleFan, Gwern, Public Menace, McSly, Rencas, Bobianite, Khargas, Ja 62, Useight, VolkovBot, CWii, Sporti, ABF, Philip Trueman, DoorsAjar, TXiKiBoT, Tpk5010, MsHyde, Waycool27, Spinningspark, EmxBot, AHMartin, SieBot, Dawn Bard, AlexanderPar, Happysailor, Oda Mari, Thehotelambush, Manway, Kanonkas, Tatterfly, ClueBot, Drmies, Excirial, Jusdafax, Ykhwong, QASIMARA, Andy16666, SoxBot III, Goodvac, XLinkBot, Fastily, Little Mountain 5, Dsimic, Addbot, Mortense, Ronhjones, TutterMouse, SoSaysChappy, Tide rolls, Yobot, OrgasGirl, Vipulcvyas, Tempodivalse, Anuang, Orion11M87, AnomieBOT, Csigabi, Bluerasberry, Materialscientist, McBrayn, Daemorris, Chatul, ZenerV, Machine Elf 1735, Calmer Waters, 95j, Jumpytoo, Merlion444, MeganMc08, Zhernovoi, LogAntiLog, Lotje, Algotime, Tbhotch, Jfmantis, Bento00, Saintuser, Ihateblazing, John of Reading, RA0808, Tommy2010, Sonnyjim 06, AvicAWB, Pussyhole, V4nd4l king, ClueBot NG, Cwmhiraeth, CocuBot, Kasirbot, Masssly, Widr, Registreernu, Zachaysan, AntanO, CeraBot, Frosty, The Anonymouse, Tim Yusupov, Jpoelman, Ceberuskid, Chloe.lawrence123, Brickscope, GeneralizationsAreBad and Anonymous: 231 • File system Source: https://en.wikipedia.org/wiki/File_system?oldid=683810709 Contributors: Damian Yerrick, AxelBoldt, Wesley, Tarquin, Stephen Gilbert, Andre Engels, Eob, Greg Lindahl, Aldie, Phil Bordelon, Ghakko, Mrichmon, SolKarma, Peterlin~enwiki, Davitf, Ark~enwiki, Tempel, Edward, Patrick, EddEdmondson, Modster, Nixdorf, Cbayly, Tannin, AlexR, Lament, Karada, Delirium, (, Ahoerstemeier, Mac, Nanshu, Typhoon, Med, Ineuw, Mulad, Emperorbma, Royce, Ww, Dysprosia, Zoicon5, Rvalles, Val42, SEWilco, Joy, AnonMoos, Aron1, Aliekens, Robbot, Chealer, RedWolf, Psychonaut, Lowellian, Tim Ivorson, Kwi, Rfc1394, Hadal, Wikibot, Hif, Alba, Mushroom, ElBenevolente, Lupo, Kairos, Nikitadanilov, Tobias Bergemann, David Gerard, Ancheta Wis, Vasi, DavidCary, Mat-C, Kim Bruning, Chrisdolan, Ævar Arnfjörð Bjarmason, Hagedis, Marcika, Everyking, Ssd, Tellarite, Sdfisher, FrYGuY, Jason Quinn, AlistairMcMillan, Darrien, Vadmium, Decoy, Pythagoras1~enwiki, Beland, Onco p53, Joeblakesley, Ctachme, Saucepan, Taka, Maximaximax, Sam Hocevar, J0m1eisler, LHOON, Creidieki, Jcorgan, Burschik, Mschlindwein, AmRadioHed, Walabio, DMG413, Eladts, Damieng, Squash, DmitryKo, Kate, Gazpacho, PhotoBox, Poccil, Imroy, Rhobite, Warpflyght, Bender235, ESkog, Uli, Chungy, Mattisgoo, Bletch, PhilHibbs, Jeffpc, Cmdrjameson, Retron, R. S. Shaw, Cohesion, Jjk, Adrian~enwiki, SpeedyGonsales, Cspurrier, MARQUIS111, Zetawoof, Minghong, Helix84, Riotnrrd, Mdd, Dillee1, Orzetto, Sommerfeld, Alansohn, Tablizer, Csabo, MatthewWilcox, Falsifian, Guy Harris, Sheehan, CyberSkull, Andrewpmk, Yamla, Lightdarkness, Mlessard, InShaneee, Swift, Velella, Suruena, 2mcm, Gpvos, Firthy2002, Ceyockey, Kbolino, Kenyon, Brycen, Aschrage, Woohookitty, Poppafuze, Mindmatrix, Lost.goblin, Ae-a, Jonathan de Boyne Pollard, Uncle G, Pol098, Mjk64, Ruud Koot, Tylerni7, Howdyboby, Anthony Borla, GregorB, LocoBurger, Eyreland, Marudubshinki, Graham87, Kbdank71, Reisio, Quale, Chipuni, Quiddity, Colin Hill, Raffaele Megabyte, MZMcBride, Tawker, SMC, Traut, SeanMack, ScottJ, Kwharris, Baryonic Being, StuartBrady, FlaBot, Ian Pitchford, Maxal, Ewlyahoocom, Dsav, Intgr, David H Braun (1964), Fogelmatrix, NevilleDNZ, Bornhj, DVdm, 121a0012, YurikBot, Hairy Dude, Logixoul, RussBot, DMahalko, Splash, Jengelh, Groogle, Lion.guo, Foxxygirltamara, Ori Livneh, Stephenb, טרול רפאים, Gaius Cornelius, Claunia, Wli, Voidxor, Grafikm fr, Htonl, Yudiweb, Wknight94, Zunaid, Lt-wikibot, Miblo, Reyk, GraemeL, Anandbabu, Donhalcon, JLaTondre, Curpsbot-unicodify, Snaxe920, Carlosguitar, Eptin, GrinBot~enwiki, DVD R W, Byteemoz~enwiki, Chris Chittleborough, Leon Hunt, SmackBot, Del Merritt, KocjoBot~enwiki, Karmastan, Monz, Thompsa, BiT, Gilliam, Oscarthecat, Skizzik, Chris the speller, DStoykov, Crashmatrix, Theone256, Thumperward, Kvedulv, Morte, OrangeDog, Jerome Charles Potts, Letdorf, Nbarth, Bob007~enwiki, Can't sleep, clown will eat me, Frap, Coolfrood, Slogan621, DGerman, Adamantios, Nahum Reduta, Emre D., Radagast83, Corby, Kc2idf, Mwtoews, Kendrick7, Ligulembot, Jóna Þórunn, Benash, Guroadrunner, Eltouristo, Zemyla, Green Giant, Loadmaster, Jec, Ryulong, Peyre, Bitwise, Alkrow, Kozaki, JoeBot, Marysunshine, Scarlet Lioness, Samfw, Tawkerbot2, FatalError, Ahy1, Unixguy, CmdrObot, Boborok, MicahDCochran, W1tgf, SolarisBigot, Arrenlex, Cydebot, Krauss, Tom94022, [email protected], Rogitor, Lofote, Omicronpersei8, Thijs!bot, Wikid77, Electron9, Druiloor, Wai Wai, Palconit, AntiVandalBot, Widefox, Mk*, Darklilac, Wayiran, Rob Kennedy, NapoliRoma, The Transhumanist, 100110100, VoABot II, Swpb, Stuart Morrow, Becksguy, Rich257, Cander0000, DerHexer, Questulent, COstop, Jim.henderson, Mange01, Public Menace, Jesant13, Cpiral, Christian Storm, Yapchinhoong, Cgy flames, Showeropera, Whompacats, Joeinwap, VolkovBot, Jeff G., PGSONIC, MarekMahut, PichuUmbreon, PDFbot, Mannafredo, Dirkbb, Catalina22, Qaywsxedc, Semifinalist, Hazel77, ManuSporny, Mmairs, Rockstone35, RJaguar3, DavidHalko, Paul.raymond.brenner, Jerryobject, Aillema, Flyer22, Oda Mari, Jotel, Steven Crossin, Runner5k, Ameen.crew, ClueBot, Wikievil666, The Thing That Should Not Be, Mild Bill Hiccup, Boing! said Zebedee, RFST, OccamzRazor, Supertin, DragonBot, Estirabot, DanDevorkin, Arjayay, Assarbad, Dekisugi, ChrisHodgesUK, Andy16666, Dsant, MelonBot, SoxBot III, Aj00200, Froggy454, Rror, Mathmitch7, SilvonenBot, Badgernet, Zodon, Dsimic, Addbot, Ghettoblaster, TheGeekHead, Scientus, Thunderpenguin, Download, Favonian, AtheWeatherman, Jasper Deng, Тиверополник, Luckas-bot, Yobot, Fx4m, Fraggle81, Legobot II, SamCPP, SwisterTwister, TestEditBot, AnomieBOT, Captain Quirk, Galoubet, NeaNita, Materialscientist, 90 Auto, LilHelpa, Xqbot, TheAMmollusc, Capricorn42, GrouchoBot, FrescoBot, Lehoo, X7q, D'ohBot, The ansible, HRoestBot, Xcvista, Jandalhandler, Full-date unlinking bot, Reconsider the static, Lotje, TBloemink, Ovpjuggalo, Suffusion of Yellow, Ravenmewtwo, Dexter Nextnumber, DRAGON BOOSTER, Kerrick Staley, EmausBot, John of Reading, Super48paul, Faolin42, Smappy, Porterde, Kiralexis, Arnon007, Ferrenrock, Isarra, W163, Sahimrobot, Pattepa, Aleksandar030, Sherwood Cat, ClueBot NG, Mbakhoff, Matthiaspaul, MelbourneStar, HectorAE, Brickmack, Widr, JordoCo, Helpful Pixie Bot, BG19bot, Alex95-Ukraine, Stanacni, Ianiruddha, Rynsaha, Winston Chuen-Shih Yang, Zhaofeng Li, Frosty, Santur- 6.1. TEXT 127 woman, Asd.988, Ciroccoseattle, Epicgenius, François Robere, JamesMoose, Tentinator, Djennfree, Lyuflamb, Semsi Paco Virchow, Shivashukla143, JaconaFrere, Speedbird737, Monkbot, Sandeemiller123, Rademers, Boybudz321, Amidu yvan and Anonymous: 620 • Resident monitor Source: https://en.wikipedia.org/wiki/Resident_monitor?oldid=651196990 Contributors: Greenrd, JW1805, Wtshymanski, RHaworth, Rwwww, SmackBot, Snori, Coolerhead, Cydebot, MarshBot, Niceguyedc, Addbot, Xqbot, Erik9bot, Rafaelnadal.rafa, Wbm1058 and Anonymous: 6 • Computer multitasking Source: https://en.wikipedia.org/wiki/Computer_multitasking?oldid=679667000 Contributors: Damian Yerrick, Bryan Derksen, The Anome, Ap, Rjstott, Dachshund, Pit~enwiki, Rp, Theanthrope, Ahoerstemeier, Salsa Shark, Magnus.de, Jessel, Tpbradbury, Wernher, Robbot, Tobias Bergemann, Jyril, Lupin, Peruvianllama, AJim, AlistairMcMillan, Nayuki, Edcolins, Wmahan, Tipiac, Starblue, Stephan Leclercq, Zhuuu, Beland, QuiTeVexat, Simson~enwiki, Burschik, Ulmanor, Abdull, Mormegil, CALR, Rich Farmbrough, Florian Blaschke, Djce, Dmeranda, Bender235, Lou Crazy, CanisRufus, Drhex, Bobo192, R. S. Shaw, Csabo, Wtshymanski, H2g2bob, Mikenolte, Nuno Tavares, Gimboid13, Palica, Pabix, Guinness2702, Bhadani, GeorgeBills, FlaBot, Chris Purcell, RexNL, YurikBot, Wavelength, DMahalko, Piet Delport, Zimbricchio, CarlHewitt, Dianne Hackborn, Misza13, DeadEyeArrow, PS2pcGAMER, JakkoWesterbeke, Ketsuekigata, Drable, Thomas Blomberg, GrinBot~enwiki, SmackBot, Reedy, Ixtli, Sparking Spirit, Andy M. Wang, Stevage, Nbarth, Rrelf, Tsca.bot, AntiVan, Zvar, Jsavit, Radagast83, FormerUser1, Esb, Ozhiker, Harryboyles, BlindWanderer, Loadmaster, Dicklyon, EdC~enwiki, Peyre, Iridescent, Tawkerbot2, FatalError, Unixguy, Ale jrb, Phatom87, Xaariz, Kubanczyk, Wikid77, Marek69, AntiVandalBot, Ad88110, Alphachimpbot, JAnDbot, MER-C, Arch dude, Magioladitis, JNW, Faizhaider, Web-Crawling Stickler, Glen, Manticore, Maurice Carbonaro, Public Menace, Jesant13, Silas S. Brown, Cometstyles, Jcea, VolkovBot, Mazarin07, HiDrNick, Toyalla, SieBot, RucasHost, Theaveng, Yerpo, Ixe013, Nskillen, Frappucino, Anchor Link Bot, Mhouston, ClueBot, Ndenison, M4gnum0n, PixelBot, Estirabot, Sun Creator, Oliverbell99, Fiskegalen92, Andy16666, DumZiBoT, Joel Saks, Kwjbot, Dsimic, Arkantospurple, Deineka, Akshatdabralit, Cst17, CarsracBot, Lightbot, דוד שי, Gail, Zorrobot, Jarble, John.St, Legobot, Luckas-bot, ArchonMagnus, Peter Flass, AnomieBOT, TwistedText, Materialscientist, GB fan, Xqbot, Julle, Almabot, 399man, RibotBOT, Alan.A.Mick, Rat2, D'ohBot, Mfwitten, Atlantia, EmausBot, WikitanvirBot, Dewritech, Tolly4bolly, L Kensington, ChuispastonBot, 28bot, ClueBot NG, Scicluna93, Toastyking, Mesoderm, ScottSteiner, Widr, Theopolisme, Compilation finished successfully, Jimperio, GGShinobi, Venera Seyranyan, ANI MARTIROSYAN, Shaun, BattyBot, FizzixNerd, Cyberbot II, Wrmattison, Mogism, Jamesx12345, Sriharsh1234, Vcfahrenbruck, OMPIRE, Benjamintf1, 7stone7, AyanMazumdar91, Ronnienawaz and Anonymous: 197 • Process management (computing) Source: https://en.wikipedia.org/wiki/Process_management_(computing)?oldid=678415016 Contributors: Tobias Bergemann, Andreas Kaufmann, Discospinster, YUL89YYZ, Stephan Leeds, Woohookitty, Brighterorange, Bgwhite, Wavelength, SmackBot, Loadmaster, Gpierre, Myasuda, Una Smith, Domer48, BigDunc, Flyer22, ترجمان05, Denisarona, Alksentrs, ChrisHodgesUK, Andy16666, Addbot, MrOllie, Bluebusy, Ettrig, Fryed-peach, Luckas-bot, Fraggle81, Jim1138, Brilliant trees, Simon the Likable, Dreamswithtali, DivineAlpha, DrilBot, Krishna sun82, Asided m plane, Ripchip Bot, WikitanvirBot, ChuispastonBot, Helpful Pixie Bot, Anbu121, BattyBot, Nonsenseferret, Sarojvrc and Anonymous: 43 • Memory management Source: https://en.wikipedia.org/wiki/Memory_management?oldid=682073458 Contributors: William Avery, Europrobe, Pichai Asokan, Frecklefoot, Tannin, Ahoerstemeier, Julesd, GRAHAMUK, Dcoetzee, Dysprosia, Munford, Dpbsmith, Jamesday, Robbot, Netpilot43556, Digital infinity, Bovlb, Adam McMaster, Neilc, Beland, SeanProctor, Jcw69, Grayscale, Arnaud~enwiki, Hydrox, Bender235, Mateo SA, Smalljim, R. S. Shaw, Guy Harris, Arthena, Uogl, Pion, Wtshymanski, Nuno Tavares, Jeffrey O. Gustafson, Woohookitty, Ruud Koot, AlbertCahalan~enwiki, Wayward, Tslocum, TheMidnighters, Intgr, Iainelder, Chobot, NSR, TexasAndroid, RattusMaximus, AdamElleston, Porturology, Stephenb, RicDod, Cryptic, Sarathc, Abune, Fram, Incnis Mrsi, Hmains, Nbarth, Baris simsek, Cybercobra, Curly Turkey, MagnaMopus, EdC~enwiki, WtfIsWikipedia, Indeterminate, Christian75, Omicronpersei8, Sagaciousuk, AgentPeppermint, LachlanA, Seaphoto, U-Mos, JAnDbot, TAnthony, CodeCat, Edward321, Evanh, MartinBot, STBot, R'n'B, Idiomabot, TXiKiBoT, TimmyBx, Tempest67, Milan Keršláger, BigDunc, Enigmaman, Kbrose, Basakjayan, SieBot, Wing gundam, ترجمان05, Oxymoron83, OKBot, Ajaikvarshney, ClueBot, Harry Lives!, XLinkBot, Dekart, Dsimic, Addbot, Poco a poco, Blethering Scot, 84user, Tide rolls, Peter Flass, AnomieBOT, 1exec1, Tucoxn, Enlitened108, Materialscientist, Xqbot, PlaysWithLife, GrouchoBot, Liridon, RoyGoldsmith, Biker Biker, ICEAGE, Dinamik-bot, Hchrm, Ansumang, Aoidh, Diannaa, Hjasud, Jfmantis, JaysonSunshine, John of Reading, Ajraddatz, Klbrain, Wikipelli, Ocaasi, Tolly4bolly, Grandphuba, L Kensington, Donner60, 28bot, FaultPicker, ClueBot NG, Zakblade2000, Helpful Pixie Bot, Riceahmed, HMSSolent, Wbm1058, Ndanielm, Northamerica1000, Matroskin222, GeneralChrisV, BattyBot, Stewartlynch, Dexbot, MeekMelange, Kephir, Frosty, Glevner, Moony22, Ginsuloft, Lokeshsolanki0206, Niraj Aher, Sequoia 42, KasparBot and Anonymous: 176 • Device driver Source: https://en.wikipedia.org/wiki/Device_driver?oldid=680543459 Contributors: Uriyan, The Anome, Awaterl, Andre Engels, Aldie, Nixdorf, R4f~enwiki, NuclearWinner, Mac, Angela, Glenn, Macar~enwiki, GRAHAMUK, Reddi, Greenrd, Quux, Silvonen, Bevo, Jetwhiz, Robbot, ZimZalaBim, Romanm, David Edgar, Bbx, Tobias Bergemann, Pablo-flores, Ancheta Wis, Paul Richter, BenFrantzDale, Kenny sh, Ich, Endlessnameless, Mboverload, AlistairMcMillan, Pgan002, Knutux, Damieng, Imroy, JTN, Spikocarpediem~enwiki, Mjuarez, RossPatterson, Rich Farmbrough, Vsmith, Wk muriithi, WegianWarrior, ESkog, CanisRufus, El C, Perspective, Bobo192, Nk, Jumbuck, Alansohn, Arthena, Diego Moya, Babajobu, Dispensa, DreamGuy, Snowolf, HenryLi, ChrisJMoor, ^demon, Ruud Koot, Wikiklrsc, Seishirou Sakurazuka, Jorunn, Rjwilmsi, Seidenstud, Bruce1ee, Nneonneo, Bhadani, StuartBrady, FlaBot, Mirror Vax, Ysangkok, Trekkie4christ, Ayla, BMF81, YurikBot, Wavelength, Borgx, RussBot, Fabartus, Stephenb, Mipadi, PhilipO, Raven4x4x, Bota47, BMT, Zzuuzz, Lt-wiki-bot, Krótki, Attilios, Yakudza, Ozzmosis, SmackBot, Pgk, Aurista25, Yamaguchi , Cool3, Kurykh, Thumperward, DHN-bot~enwiki, Anabus, Harumphy, Frap, COMPFUNK2, Gragox, Warren, Nacase, SashatoBot, Mr. Vernon, Kvng, Hu12, UncleDouggie, Beno1000, Ok.book.guy, Bmecoli, FatalError, ShakespeareFan00, WeggeBot, Equendil, Phatom87, Yukoba~enwiki, Erdeee, Kozuch, Thijs!bot, Marek69, Vertium, Escarbot, Mhaitham.shammaa, Itsluy, Kerdek, Wayiran, JAnDbot, Barek, MER-C, Fsgeek, Gbeuk99, .anacondabot, Enjoi4586, Dragon Dan, Tedickey, AVRS, Anaxial, R'n'B, Avkulkarni, Aweiredguy, Jesant13, Josepant, Laurusnobilis, Cpiral, Andareed, Cometstyles, Doctahdrey, Remember the dot, DMCer, VolkovBot, TXiKiBoT, Oshwah, Davehi1, Mickraus, Norborb, Jane Fairfax, Don4of4, Leejjcn, Haiviet~enwiki, EmxBot, Steven Weston, Kbrose, Biscuittin, SieBot, Da Joe, Nickols k, Happysailor, Flyer22, Nopetro, ترجمان05, Oxymoron83, Lightmouse, ClueBot, The Thing That Should Not Be, Rilak, Mutilin, DragonBot, Alexbot, Socrates2008, Justin545, PixelBot, Technobadger, The Red, DanielPharos, Andy16666, Equatorian, Apparition11, SF007, DumZiBoT, Editorofthewiki, XLinkBot, Oswazteca, SilvonenBot, Dekart, Dsimic, Elsendero, Joshuamarius, ChenzwBot, Pietrozuco, LuK3, Legobot, Yobot, Ahugenerd, Nallimbot, KamikazeBot, Knownot, AnomieBOT, PlutarcoNaranjo, Piano non troppo, Kingpin13, Materialscientist, Renoj, Toddw81, JimVC3, Capricorn42, Nasnema, Ched, Kyng, Samwb123, Haeinous, Sohchouhan, Teuxe, Winterst, Pinethicket, I dream of horses, HRoestBot, Adlerbot, A412, Skyerise, Btilm, Île flottante, Jandalhandler, Herakleitoszefesu, Iakjfhfuksn, Adamhollick, Classical Esther, EmausBot, Lkeegan, Sentient Planet, Good888, Wikipelli, Fæ, Josve05a, Gilbertgagnon, Donner60, Orange Suede Sofa, Ipsign, ChuispastonBot, 28bot, Rocketrod1960, ClueBot NG, Dixu9293, BarnabyJoe, Matthiaspaul, Satellizer, Zakblade2000, Matt8163, Widr, JordoCo, Helpful Pixie Bot, Wbm1058, Walk&check, Yowanvista, Helen D., Qwerty9030, Graphium, Ilovefiledeer, Ifo- 128 • • • • • • • CHAPTER 6. TEXT AND IMAGE SOURCES, CONTRIBUTORS, AND LICENSES tography, Funny2, Ma7ged, Meteor sandwich yum, Atheer-iphone, Lagoset, Monkbot, Comments2010, Bejado, Waqas481, Mattwheatley, KasparBot and Anonymous: 310 Runtime library Source: https://en.wikipedia.org/wiki/Runtime_library?oldid=683569182 Contributors: TakuyaMurata, Furrykef, Abdull, Smyth, Alansohn, Forderud, Ron Ritzman, Sega381, Mipadi, SmackBot, Oli Filth, Jerome Charles Potts, Nbarth, Cybercobra, Dicklyon, Magioladitis, Rhdv, Hans Dunkelberg, Roman V. Odaisky, Asymmetric, Rei-bot, Mhrk, Adnanbinwaheed, Kolyma, Dsimic, Addbot, AVB, AnomieBOT, Chiefwei, TheTechFan, John of Reading, Senator2029, ClueBot NG, MerlIwBot, Seanhalle, François Robere, Jay1818 and Anonymous: 10 Interrupt Source: https://en.wikipedia.org/wiki/Interrupt?oldid=679456094 Contributors: Chexum, The Anome, Rjstott, Aldie, Fubar Obfusco, William Avery, Tobin Richard, Pit~enwiki, Nixdorf, Rawr, Timwi, David Newton, Zoicon5, Furrykef, David Shay, Itai, Wernher, Bevo, Raul654, David.Monniaux, Robbot, Tobias Bergemann, Paul Richter, Lproven, Neilc, SHayter, Urhixidur, Addicted2Sanity, Now3d, Abdull, J0rd1, EagleOne, DmitryKo, Mike Rosoft, Dshard, Dmeranda, Spalding, Nk, Celada, Jumbuck, Minority Report, Raraoul, ZeiP, Wtshymanski, Voxadam, Bookandcoffee, Henrik, Timharwoodx, Orchew, Trevor Andersen, Bluemoose, Qwertyca, BD2412, Kbdank71, PCStuff, Quiddity, Bubba73, Mirror Vax, Intgr, Fresheneesz, PengRate, YurikBot, Borgx, Ptblank, X42bn6, RussBot, Piet Delport, Hydrargyrum, Retired username, Jeh, Mmom, NormDor, Ninly, Closedmouth, LeonardoRob0t, SigmaEpsilon, Pandemic, Luk, SmackBot, InTheCastle~enwiki, Rivimey, Macintosh User, Gilliam, Chris the speller, TimBentley, Carbonrodney, Mcaruso, Audriusa, Frap, Jsmethers, Epachamo, Mlpkr, Hkmaly, Geoinline, RCX, Stratadrake, 16@r, Anjanesh, Hu12, OnBeyondZebrax, Chetvorno, Phatom87, HalJor, He Who Is, Babub, Thijs!bot, Thadius856, Jirislaby, AntiVandalBot, Widefox, Guy Macon, Arcturus4669, Ad88110, Leolaursen, Magioladitis, Usien6, Nwbeeman, BBar, GermanX, Ageekymonk, Jesant13, Ivanvlasov, Sthenno, Bigdumbdinosaur, Lordeaswar, Rex07, Entropy, Useight, VolkovBot, A.Ou, TXiKiBoT, Brianonn, CanOfWorms, Uruviel2000, RonBrombach, AlleborgoBot, Kbrose, Wjl2, BlueMonkey123, Wildingd, Thepowersgang, Ham Pastrami, Happysailor, Nopetro, Rishi1221, ترجمان05, EnOreg, Frappucino, OKBot, Anchor Link Bot, Snigbrook, GreenSpigot, Arunsingh16, Alexbot, M4gnum0n, Anon lynx, Ykhwong, Andy16666, SoxBot III, Galzigler, Dsimic, Wwjdcsk, Addbot, Pmod, SpBot, Dayewalker, Tide rolls, Luckas-bot, Peter Flass, AnomieBOT, Floquenbeam, H4xx0r-666, Steaphan Greene, Makromann, Colinward1970, Surv1v4l1st, Batech0310, DrilBot, RandomDSdevel, MJ94, Lotje, Jfmantis, EmausBot, WikitanvirBot, Eekerz, Dixtosa, ValC, Dcirovic, John Cline, Blacklunarsun, Sbmeirow, Petrb, ClueBot NG, Matthiaspaul, Uršul, RichardOSmith, Zakblade2000, Wbm1058, Walk&check, Thewildone85, Vinay.rangari, Mayur.popade, Sahazel, Tagremover, Little green rosetta, Vivkul, Wikigeek244, Israt11108, Glen Eyre Hall, Crystallizedcarbon, KasparBot and Anonymous: 192 Interrupt handler Source: https://en.wikipedia.org/wiki/Interrupt_handler?oldid=650997549 Contributors: Maximus Rex, Murray Langton, Ezhiki, Finn-Zoltan, Neilc, SHayter, Now3d, Abdull, Shotwell, R. S. Shaw, AlexKarpman~enwiki, Henrik, Jacj, Mandarax, ScottJ, FlaBot, Mirror Vax, Valermos, Subtractive, Roboto de Ajvol, YurikBot, Jengelh, Joel7687, TuukkaH, SmackBot, Kentyman, JoeKearney, Bluebot, Whispering, EdgeOfEpsilon, Rrelf, Frap, Jsmethers, Normxxx, RolandR, Wizardman, DagErlingSmørgrav, Chetvorno, CmdrObot, Deathbob, Phatom87, Marek69, Ablonus, Jirislaby, Widefox, U-Mos, JAnDbot, Infrangible, Beesman, Trasz, TXiKiBoT, Warec, AlleborgoBot, Frappucino, Niceguyedc, Zik2, Ariconte, WikHead, Dekart, Dsimic, Addbot, Willking1979, Mahmoud farahat, Fraggle81, Peter Flass, AnomieBOT, Mlpearc, FrescoBot, Jfmantis, Tommy2010, ValC, Sbmeirow, ClueBot NG, Crazymonkey1123, Vinay.rangari and Anonymous: 65 Interrupt request (PC architecture) Source: https://en.wikipedia.org/wiki/Interrupt_request_(PC_architecture)?oldid=673022591 Contributors: Spikey, LuckyWizard, Lowellian, Lupin, Bkonrad, Splatg, Chowbok, Utcursch, GreenReaper, ESkog, Wtshymanski, Nollij, Tizio, Joz3d, Mirror Vax, Kayfox, RAMChYLD, Intgr, Srleffler, DVdm, Ikkejw, YurikBot, Stephenb, Alan0098, Robertvan1, Jeh, MrShamrock, Depakote, MaratL, NeilN, SmackBot, Incnis Mrsi, C.Fred, Eskimbot, Brianski, MaxSem, Frap, Jsmethers, Pianohacker, Warren, Doodle77, Stratadrake, 16@r, Rofl, Martin Kozák, TerryJames, MrBoo, Runderwo, Irwangatot, Myrrhlin, Jesse Viviano, DumbBOT, KasMage, Sagaciousuk, Escarbot, Widefox, Darklilac, JAnDbot, Jhansonxi, CheMechanical, Gwern, Xiphias88, MartinBot, Williammentz, J.delanoy, Hatredman, Mystic Nexus, HockeyInJune, ARTE, Bigdumbdinosaur, Scls19fr, DSRH, Ccyber5, Android Mouse, Canadia1, StaticGull, ClueBot, PipepBot, The Thing That Should Not Be, Shniken1, Rilak, DragonBot, Dsimic, Addbot, Guoguo12, Landon1980, Yobot, Inemanja, Evaders99, Koman90, AnomieBOT, Xqbot, Korvin2050, Jonesey95, Quafios, Jfmantis, WikitanvirBot, Dcirovic, Ortleynd, ClueBot NG, Matthiaspaul, Zakblade2000, Odonnelled, Wolverine6996, Nhojdoe, Being Pramod and Anonymous: 104 Non-maskable interrupt Source: https://en.wikipedia.org/wiki/Non-maskable_interrupt?oldid=671944416 Contributors: Royce, Furrykef, Lproven, Mark.murphy, Jfdwolff, Sarex, Bumm13, CanisRufus, Wtmitchell, Wtshymanski, Atomice, Cornince, SpiralOut, FlaBot, Mirror Vax, YurikBot, Crotalus horridus, Cate, Jeh, Carmencr, 2fort5r, SmackBot, Bluebot, Can't sleep, clown will eat me, Jsmethers, Fuhghettaboutit, Stratadrake, CmdrObot, Widefox, Ironiridis, PatPeter, Nono64, Cspan64, YC. Lin, Bigdumbdinosaur, PGSONIC, Casablanca2000in, System86, Socrates2008, DumZiBoT, Addbot, Bwrs, Hying caritas, Xqbot, Gechurch, Trappist the monk, Jfmantis, RjwilmsiBot, Super48paul, ZéroBot, Voomoo, Uršul, Numbermaniac, Frosty, Vishsangale and Anonymous: 31 Programmable Interrupt Controller Source: https://en.wikipedia.org/wiki/Programmable_Interrupt_Controller?oldid=642624580 Contributors: Egil, Joy, Academic Challenger, Marcika, Uzume, Chowbok, Ta bu shi da yu, WegianWarrior, Wtshymanski, Rjwilmsi, Mirror Vax, Intgr, Alvin-cs, Sherool, Benhoyt, SmackBot, Frap, Jsmethers, JonHarder, Thijs!bot, Luna Santin, Widefox, GermanX, TXiKiBoT, Rei-bot, SieBot, Jerryobject, Android Mouse, Kingoftherings, PixelBot, BOTarate, Mifeet~enwiki, Addbot, AdjustShift, Gulfmonsoon, Mfwitten, WikitanvirBot, Matthiaspaul, Helpful Pixie Bot, Someone not using his real name and Anonymous: 33 Command-line interface Source: https://en.wikipedia.org/wiki/Command-line_interface?oldid=684671889 Contributors: Tobias Hoevekamp, Uriyan, Zundark, Tarquin, Stephen Gilbert, Andre Engels, XJaM, Tommy~enwiki, Arvindn, Aldie, Matusz, SJK, Ortolan88, SimonP, ChangChienFu, Merphant, Hirzel, Ericd, Edward, Bdesham, Michael Hardy, Modster, Pnm, Tannin, Ixfd64, Zeno Gantner, Mac, Ronz, Snoyes, IMSoP, Rob Hooft, Ww, Random832, 4lex, Timc, Radiojon, Grendelkhan, Fibonacci, Omegatron, Bevo, Robbot, Chealer, RedWolf, Netizen, HaeB, Tobias Bergemann, Dusik, Adam78, Ancheta Wis, Kim Bruning, Massysett, Rchandra, Nayuki, Khalid hassani, VampWillow, Christopherlin, Vadmium, Yath, Beland, Piotrus, Bumm13, Urhixidur, Kate, Slady, Rich Farmbrough, TedPavlic, ArnoldReinhold, Bender235, Pt, LordRM, Thuresson, Smalljim, Zwilson, Trevj, Minghong, Obradovic Goran, Eruantalon, Jumbuck, Musiphil, Alansohn, Guy Harris, Diego Moya, Nasukaren, Velella, QuixoticKate, Wtshymanski, Evil Monkey, Recury, Zeth, Kbolino, Isnow, Graham87, Kbdank71, JIP, Radomir, Tizio, Zenten, Ucucha, FayssalF, FlaBot, SchuminWeb, Arnero, Ysangkok, Crazycomputers, Intgr, Chobot, Gwernol, Elfguy, Roboto de Ajvol, Splintercellguy, 4C~enwiki, Fabartus, Peter S., Hydrargyrum, LesmanaZimmer, Akhristov, ENeville, Haranoh, Semperf, Kyle Barbour, Arch o median, Alan Millar, CQ, Sjhan81~enwiki, Cedar101, Bart Fox, JLaTondre, PhS, Gator1, Rwwww, TuukkaH, Nofxjunkee, Tom Morris, Erik Sandberg, SmackBot, Incnis Mrsi, DXBari, BurntSky, CapitalSasha, Nick Warren, Chauncey27, Ppntori, BirdValiant, KD5TVI, Father McKenzie, CrookedAsterisk, Tghe-retford, Timneu22, Jerome Charles Potts, ACupOfCoffee, Dragice, Liontooth, Meandtheshell, Wonderstruck, Radagast83, Dreadstar, Warren, DMacks, AndyBQ, Xandi, Jeberle, Soumyasch, Linnell, Melody Concerto, Warinthepocket, Exlex, Hvn0413, Dicklyon, Jgrahn, BranStark, Asmpgmr, IvanLanin, Tawkerbot2, Daniel5127, FleetCommand, Unixguy, CmdrObot, FabioBatista, DanielRigal, Neelix, Kejoxen, Cydebot, Dancter, Msnicki, BartlebyScrivener, After Midnight, Thijs!bot, O, Al Lemos, Dmbrown00, Dugwiki, Escarbot, Dzubint, AntiVandalBot, Majorly, Guy Macon, 6.1. TEXT 129 Prolog, Rsciaccio, Alphachimpbot, Minimice, Myanw, Skarkkai, JAnDbot, Fourchannel, Ideoplex, Magioladitis, Bongwarrior, VoABot II, Kpacquer, Cadsuane Melaidhrin, Tedickey, Schily, Minkee.s, Virtlink, Cander0000, JaGa, AllenDowney, AVRS, MartinBot, B33R, Aladdin Sane, Panarchy, R'n'B, Gate28, Tgeairn, J.delanoy, Trusilver, Svetovid, AAA!, Wa3frp, Javawizard, Cpiral, Wandering Ghost, Ts1and2fanatic, Duffjohnson, Cometstyles, Justinstein, Burzmali, Squids and Chips, Abs Like Jesus, VolkovBot, Mrh30, Alanfeld, Lexein, Philip Trueman, PNG crusade bot, Oshwah, A4bot, Getonyourfeet, Anna Lincoln, Lradrama, Tacoman359, Obuli, Kurtis1991, Natg 19, Jesin, Michaeldsuarez, Tomaxer, Pctechbytes, BridgeBuilderKiwi, SieBot, Simon1220, Artagnon, Yintan, Revent, Milan Kerslager, Chridd, Lightmouse, HendrixEesti, Millstream3, Svick, Anchor Link Bot, Dgutson, Lloydpick, ImageRemovalBot, Naturalui, ClueBot, Algorerhythms, Gforce20, The Thing That Should Not Be, Urparticle, Teza1532, Czarkoff, Wendy.krieger, Unknown-xyz, Wikiold1, Regibox, DRKD, SchreiberBike, Myth723, SF007, Fastily, RealWorldExperience, Addbot, Ghettoblaster, Fgnievinski, Jncraton, Fielddaysunday, NjardarBot, MrOllie, LaaknorBot, Gpearson2, Zorrobot, Jarble, Luckas-bot, Yobot, Fraggle81, Amirobot, ArchonMagnus, Peter Flass, Koman90, Backslash Forwardslash, AnomieBOT, Rubinbot, Killiondude, Jim1138, Materialscientist, ArthurBot, Mlpearc, Elideb, Omnipaedista, RibotBOT, Cybjit, Crickxson, Maitchy, FrescoBot, Jacobubus, I dream of horses, DARTH SIDIOUS 2, DASHBot, Pwtwsu-sp, John of Reading, Orphan Wiki, WikitanvirBot, Marcin Łukasz Kiejzik, PaulRg, ZxxZxxZ, Ariesk47, Ebehn, Voomoo, ClueBot NG, Matthiaspaul, Frietjes, Jakuzem, Last.past, Helpful Pixie Bot, Wbm1058, Troy.hester, Rctdude2, FSII, , Nsda, Eman2129, DPL bot, Uchaschiysya, Makkadiamond, Mbit, Khazar2, Codename Lisa, Aristoxenos, Frosty, Lolo Lympian, Ahmadar taj, Miller9904, Melonkelon, EvergreenFir, Comp.arch, Nickjames90, Kgarner1, OMPIRE, ChamithN, Orduin, Mwecau, HshnxhxhGeorgesggshshdh, Rashrozoic, Narendrapatil96 and Anonymous: 321 • Text-based user interface Source: https://en.wikipedia.org/wiki/Text-based_user_interface?oldid=674012245 Contributors: Damian Yerrick, Pnm, Delirium, Thue, Nricardo, TowerDragon, Treutwein, TexasDex, Pengo, Tobias Bergemann, Adam78, Gtrmp, Monedula, Djegan, Piotrus, R.123, Ash-Fox, Yonkie, Doozer, Alison9, Ihatepotsmokinghippies, Diego Moya, Mindmatrix, Megaslow, BD2412, YurikBot, RobotE, 4C~enwiki, Foxxygirltamara, Barefootguru, Gronau~enwiki, Andyluciano~enwiki, ViperSnake151, TuukkaH, SmackBot, Incnis Mrsi, DXBari, Arny, RobotJcb, Mcld, Bluebot, Ickyelf, Stefan2, Cydebot, After Midnight, Electron9, Druiloor, Guy Macon, JAnDbot, Tedickey, CountingPine, Gwern, LordAnubisBOT, AhmadSherif, A4bot, Genium, Canaima, PeterEasthope, Ricardo Cancho Niemietz, SieBot, Josh the Nerd, Revent, Jerryobject, Dwiakigle, DancingPhilosopher, Svick, MarkMLl, ImageRemovalBot, Chris G Bot, Sfan00 IMG, Alexbot, M4gnum0n, Joswig, Delt01, Addbot, Ghettoblaster, Lightbot, Yobot, PMLawrence, AnomieBOT, Wm243, SvartMan, Xqbot, Omnipaedista, Winterst, GerbilSoft, Gshamon, Ermangg, René Schwarz, Mayazcherquoi, Locador, Will Beback Auto, Wbm1058, , Nikos 1993, Compfreak7, Nitinnilesh, Codename Lisa, Pantser, Semsi Paco Virchow, Qwertyxp2000, OMPIRE and Anonymous: 45 • Graphical user interface Source: https://en.wikipedia.org/wiki/Graphical_user_interface?oldid=683555171 Contributors: Damian Yerrick, Tobias Hoevekamp, Bryan Derksen, Robert Merkel, Tarquin, XJaM, Vaganyik, Ark~enwiki, B4hand, Frecklefoot, Edward, Nealmcb, Nixdorf, Tannin, Wapcaplet, SebastianHelm, Minesweeper, Ahoerstemeier, Mac, Ronz, Nanshu, LittleDan, Rob Hooft, Mxn, Jrousseau, Raven in Orbit, GRAHAMUK, Icekiss, Nohat, Ww, Slark, Gepwiki, Jeffrey Smith, David Shay, Tempshill, Omegatron, Bevo, Shizhao, Flockmeal, Jni, Branddobbe, Robbot, Chealer, AlainV, ChrisO~enwiki, Jwpurple, Scott McNay, Altenmann, Postdlf, Rfc1394, DHN, Hadal, Mushroom, KeithJonsn, Tobias Bergemann, Alan Liefting, David Gerard, Krum Stanoev, Somercet, Giftlite, DocWatson42, Depot, Kim Bruning, Massysett, Thetorpedodog, Carlo.Ierna, Jfdwolff, Rchandra, AlistairMcMillan, Khalid hassani, Edcolins, Hexydes, Utcursch, Bgraabek, GeneMosher, Timlane, Beland, Piotrus, Am088, Szajd, Burgundavia, Thparkth, Gary D, Ukexpat, Andreas Kaufmann, GreenReaper, Grstain, Mike Rosoft, MichaelMcGuffin, MM23, Rich Farmbrough, FT2, Wrp103, Forbsey, Paul August, Night Gyr, ZeroOne, Moa3333, S.K., Hapsiainen, El C, Kwamikagami, Susvolans, Alberto DV, Causa sui, Bobo192, NetBot, Smalljim, .:Ajvol:., A.t.bruland, Richi, SpeedyGonsales, Jojit fb, Trevj, Ivansanchez, Anonymous Cow, John Nowak, Minghong, Ehurtley, LoganK, Alansohn, Tablizer, Neodem, Walter Görlitz, Stovetopcookies, Diego Moya, Jtalledo, Munchkinguy, Riana, Yamla, Sligocki, KJK::Hyperion, Max Naylor, RainbowOfLight, VoluntarySlave, Skyring, Scarykitty, Jeffrey O. Gustafson, Woohookitty, Arneth, Sandius, TarmoK, TigerShark, MamaGeek, Tabletop, Hyung5kim, Palica, Turnstep, PhilippWeissenbacher, Mandarax, Graham87, JiMidnite, Cuvtixo, BD2412, Sjakkalle, Tizio, Seidenstud, Tangotango, Sdornan, Raffaele Megabyte, Quietust, Ucucha, Sango123, Fish and karate, Arnero, Felixdakat, Brianreading, RexNL, DMAJohnson, WouterBot, Chobot, SirGrant, Manscher, Gwernol, Kasbjoernsen, YurikBot, Wavelength, Charles Gaudette, Bdude, StuffOfInterest, Arado, Fsolda~enwiki, MilesTeg, Markpeak, Alvizal91, Equalpants, RadioFan2 (usurped), Stephenb, Manop, Gaius Cornelius, CambridgeBayWeather, Akhristov, Oni Lukos, Tavilis, WulfTheSaxon, Wiki alf, RattleMan, Krystyn Dominik, ZacBowling, Scisonic, Haranoh, Rajivmanglani, RajivManglani, PhilipO, Semperf, Natkeeran, Dbfirs, Mditto, Cerejota, Kyle Barbour, Suso, PrimeCupEevee, Bota47, Denis C., Anon2, Cengelbart, Pooryorick~enwiki, Pegship, Daniel C, Fmccown, Super Rad!, Wikivek, Closedmouth, Eddie tejeda, JoanneB, Le sacre, Barrera marquez, CWenger, Belard, VodkaJazz, Staxringold, Gesslein, ViperSnake151, TLSuda, Teryx, Eptin, GrinBot~enwiki, Sardanaphalus, Veinor, SmackBot, Reedy, KnowledgeOfSelf, DXBari, Heptite, Hydrogen Iodide, Unyoyega, Delldot, BiT, Premchai~enwiki, HalfShadow, Rajnishbhatt, Unforgettableid, Gilliam, Ohnoitsjamie, TheSkinsFactory, Tghe-retford, LaggedOnUser, Mdwh, Bonaparte, Afasmit, Jenny MacKinnon, Letdorf, DHN-bot~enwiki, ACupOfCoffee, Darth Panda, Dragice, Gsp8181, Stephen Hui, NYKevin, Can't sleep, clown will eat me, Liontooth, Frap, OrphanBot, Tim Pierce, Nixeagle, Gerfaut, Ickyelf, Nibuod, Blake-, Kaddds, Warren, HarisM, DenisRS, Freedom to share, Mwtoews, Daniel.Cardenas, LeoNomis, Charivari, Srinath1905, SashatoBot, Doug Bell, AmiDaniel, Vufors, Soumyasch, Navin Shetty Brahmavar, Andymc, Tlesher, JasonSADL, Llamadog903, Thomas Gilling, Chrisch, 16@r, Mr Stephen, Kyoko, Brazucs, Waggers, Asdfwtf, ModusOperandi, Jack O'Neill, Wvoutlaw2002, EdC~enwiki, ShakingSpirit, Hu12, Stephen B Streater, Derrickchapman, Aeternus, Tawkerbot2, Dlohcierekim, Daniel5127, Gumbos, Amniarix, FatalError, Mig8tr, JForget, Dycedarg, Basawala, WeggeBot, Lanma726, Bobnorwal, Angelsfreeek, Cydebot, Fl, Languagehat, Corpx, [email protected], Vegfarandi, Dancter, Thijs!bot, Epbr123, Frozenport, Pampas Cat, Mojo Hand, Nonagonal Spider, Oliver202, James086, Davidhorman, Muaddeeb, TangentCube, Escarbot, Cyclonenim, AntiVandalBot, Widefox, Guy Macon, Prolog, KKong, Dagibit, JAnDbot, Barek, Zeeboid, Hut 8.5, J-stan, Matjpow, Y2kcrazyjoker4, Geniac, Bongwarrior, VoABot II, Tornvmax, JamesBWatson, CattleGirl, Kinston eagle, Tedickey, Steven Walling, Userdesign, G8orade, Virtlink, Fang 23, ArmadilloFromHell, Vssun, Seashorewiki, Madmkh, IanMAC, Uriash, DGG, Gwern, Sdmorgan, Lengyeltom, Tubbimura91, Stephenchou0722, FisherQueen, MartinBot, ExplicitImplicity, Axlq, Zeus, Rettetast, Aric cramer, Mschel, CommonsDelinker, J.delanoy, Trusilver, Rgoodermote, Kulshrax, Numbo3, Ciotog, Public Menace, Jesant13, Gzkn, Takjji, Samtheboy, Djcraven, AntiSpamBot, Warut, 3dguiman, FJPB, Shoessss, KylieTastic, Juliancolton, WJBscribe, Samli1018, Jamesofur, Tinsoul, Treisijs, Seigvaleheart, Idioma-bot, Stonebluetree, VolkovBot, Thedjatclubrock, ABF, AlnoktaBOT, Philip Trueman, TXiKiBoT, WatchAndObserve, Technopat, TheresJamInTheHills, W00FD0G, Sintaku, Slysplace, DragonLord, S32, Longzheng, Mijter, Sam1234576, KennyRogerz, Wikiisawesome, Onore Baka Sama, Aliasd, Tuxcantfly, Kızılsungur, Vladsinger, Haseo9999, Lamro, Falcon8765, Youlovejoe, Monty845, EmxBot, Kbrose, SieBot, Caltas, Vanished User 8a9b4725f8376, Tomwhite56, Jerryobject, Chris 2010, Flyer22, Paolo.dL, ترجمان05, Samsview, Todizzle91, Lightmouse, Linuxrules1337, DancingPhilosopher, ShawnIsATard, Svick, StaticGull, Denisarona, Lloydpick, Aviade~enwiki, Loren.wilton, Martarius, Naturalui, ClueBot, GorillaWarfare, Helpsloose, Hutcher, Cfc123cfcxxx, Rpawson, Starvinsky, Dpmuk, Wendy.krieger, Mild Bill Hiccup, TheOldJacobite, Niceguyedc, MARKELLOS, Blanchardb, Charlieleake, M4gnum0n, PixelBot, Abrech, Muhandes, Ranhiru, WalterGR, 130 CHAPTER 6. TEXT AND IMAGE SOURCES, CONTRIBUTORS, AND LICENSES Apl2007, Andy16666, Max613, Shamanchill, SF007, DumZiBoT, Jackowaco, Fastily, Spitfire, Pichpich, Ost316, Avoided, Anturiaethwr, Sebthelodgemn, Badgernet, Alexius08, MystBot, Dsimic, Addbot, Ghettoblaster, Willking1979, Fgnievinski, Ronhjones, Download, LaaknorBot, Nuclear Treason, Gpearson2, AnnaFrance, Buddha24, AugustWind, Polancox, SpBot, Jasper Deng, Jake7401, Tide rolls, דוד שי, Chirax, आशीष भटनागर, Yobot, Gpearson2isback, OrgasGirl, Ptbotgourou, Fraggle81, Washburnmav, Home-33bf7faecf., Koman90, AnomieBOT, HairyPerry, VanishedUser sdu9aya9fasdsopa, Götz, Sap123, Law, Flewis, Materialscientist, Neurolysis, Anarchy103, CoolingGibbon, Mononomic, RajivSBanga, Almabot, GrouchoBot, Prunesqualer, SCΛRECROW, January2009, Shadowjams, StoryOfXentix, PS2801, Jesus hands, WorldChampion392, HamburgerRadio, Michelin106, Kenrick95, I dream of horses, Abazgiri, HRoestBot, 10metreh, Tinton5, MondalorBot, R r245, Joshkaye0306, Lotje, Dinamik-bot, Vrenator, LilyKitty, Diannaa, Jesse V., DARTH SIDIOUS 2, Phd holder, Spike35031, Florianwardell, EmausBot, FelixFT, Dewritech, Arthurrovich, GoingBatty, JPaul, Winner 42, Alisha.4m, System4200, NicatronTg, Krd, Muslim Editor, Metal850, SporkBot, , Wikiloop, Lengoldberg, Iketsi, DASHBotAV, Jekyllhide, Vivi6672, ClueBot NG, Gareth Griffith-Jones, Morgankevinj huggle, Widr, DemeGeek, Johnny C. Morse, Calabe1992, Wbm1058, DBigXray, Ubuntude, XgenZombie, Northamerica1000, Wiki13, Frze, Altaïr, Mdy66, Nepalimora, 4throck, Sparkie82, Accurastic, AntanO, Minsbot, Ewpoxy, Rezonansowy, Codename Lisa, Webclient101, Tom Dayton, MissKwan, Nmilety, Maeganm, Hiray91, Dimeji.97, 1337haxorzpwnage, Jemee012, Kuyi123w, Comp.arch, Ginsuloft, ScotXW, Filedelinkerbot, Franky4Fngrs, Dsprc, OMPIRE, Unician, Roberttomsons, Some Gadget Geek, IdlePlayground, Humbug26 and Anonymous: 723 • Disk operating system Source: https://en.wikipedia.org/wiki/Disk_operating_system?oldid=635604310 Contributors: Aldie, LukeyBoy, SolKarma, Ark~enwiki, Leandrod, Rbrwr, Frecklefoot, Minesweeper, Hashar, Mulad, Dmsar, Ww, Magnus.de, Haukurth, Jeffrey Smith, Wernher, Bevo, Robbot, RedWolf, Robbe~enwiki, Diberri, Jwinters, Jyril, JimD, AlistairMcMillan, Alvestrand, Pne, Maximaximax, Marc Mongenet, Sfoskett, Sam Hocevar, Deewiant, Chmod007, Kate, Prestonmarkstone, Noisy, Brian0918, CanisRufus, Dbreakey, NetBot, Polluks, Trevj, Gary, Guy Harris, 119, Ceyockey, Kbolino, Mindmatrix, Ae-a, Graham87, Kbdank71, Yurik, StuartBrady, FlaBot, JeremyMcCracken, Drt1245, Byteemoz~enwiki, Fbb fan, SmackBot, Brkboddeti, Ckraju, Tawkerbot2, Uq, JForget, CmdrObot, Al Lemos, The Fifth Horseman, SteveSims, STBot, R'n'B, J.delanoy, Chitrapa, Bporopat, Pengyanan, Ham Pastrami, Jerryobject, ClueBot, Bhagatyogi 1234, A plague of rainbows, Roxy the dog, TruckMonkey, Ghettoblaster, Tothwolf, Legobot, Yobot, 1exec1, Redrose64, Skyerise, Alph Bot, GoingBatty, Solarra, Tolly4bolly, ClueBot NG, Matthiaspaul, Radionactive, Widr, Be..anyone, HMSSolent, Wbm1058, Bluedragon14, Barkha dhamechai, JaconaFrere, BethNaught, KH-1 and Anonymous: 60 • CP/M Source: https://en.wikipedia.org/wiki/CP/M?oldid=680343753 Contributors: Damian Yerrick, Lee Daniel Crocker, Aldie, Maury Markowitz, Hephaestos, Topory, Infrogmation, Ken Arromdee, Mahjongg, Liftarn, TakuyaMurata, Egil, Looxix~enwiki, Ellywa, Lovely Chris, IRoNGRoN, F1lby, Deisenbe, Mulad, Emperorbma, Dmsar, Itai, Wernher, Bevo, Topbanana, AnonMoos, PBS, Kadin2048, Blainster, Bkaindl, Mushroom, Adeio, Lproven, Juliand, Lupin, Marcika, Michael Devore, Matt Crypto, Pne, Lakefall~enwiki, Wmahan, Chowbok, Coldacid, Kevins, Bumm13, Eroux, Adashiel, Gazpacho, Rich Farmbrough, Metamatic, Smyth, YUL89YYZ, Bender235, Uli, Ylee, CanisRufus, Harald Hansen, Polluks, Richi, Jdabney, Frodet, Alansohn, M7, Ashley Pomeroy, Wdfarmer, Wtshymanski, HenkvD, Lerdsuwa, HungryHorace, Eric Pement, Woohookitty, Sburke, Pol098, Kesla, Graham87, Cuvtixo, BD2412, Kbdank71, JIP, Rjwilmsi, Koavf, Yamamoto Ichiro, JanSuchy, StuartBrady, FlaBot, Mirror Vax, Flydpnkrtn, RexNL, Gary D Robson, Swtpc6800, Chobot, YurikBot, Wavelength, Bovineone, DragonHawk, Dbfirs, Pelladon, Petri Krohn, Geoffrey.landis, JLaTondre, Otheus, SmackBot, MeiStone, Mauls, Hmains, Thumperward, Snori, Octahedron80, Letdorf, Милан Јелисавчић, Frap, GVnayR, Blazar, Mwtoews, Moby Dick~enwiki, Spinality, SashatoBot, Loadmaster, Darminator, Arjoll, Tigen, Peyre, Zhulien, Tawkerbot2, Ahy1, Ivan Pozdeev, Muttley.meen, HenkeB, Mblumber, Al Lemos, John254, AntiVandalBot, Widefox, Guy Macon, Drake Wilson, DOSGuy, Albany NY, Magioladitis, Japo, Frotz, Mustafa1702, I B Wright, Khr0n0s, Sm8900, Mark Rosenthal, R'n'B, Cometstyles, DorganBot, VolkovBot, RingtailedFox, TXiKiBoT, Dojarca, Sarenne, Bblinx, WinTakeAll, Certh, Why Not A Duck, Thunderbird2, Wjl2, LeadSongDog, Jerryobject, Digwuren, Petzi1969, Lightmouse, MarkMLl, Helpsloose, Brooknet, Sun Creator, Tyler, Andy16666, Jane.Justesen, XLinkBot, Good Olfactory, Mortense, Tonybove, Ghettoblaster, MrOllie, Download, Luckas-bot, Yobot, Patreides, AnomieBOT, Xqbot, DSisyphBot, Kithira, Thanos264, FrescoBot, Citation bot 1, DrilBot, Skyerise, Reaper Eternal, RjwilmsiBot, GoingBatty, Ruislick0, HupHollandHup, Cp.momon, BillMorrow, BillP3rd, MacStep, ClueBot NG, PatchesTheCaveman, Pantergraph, Matthiaspaul, Shaddim, Movses-bot, Helpful Pixie Bot, Trevayne08, Klilidiplomus, EricEnfermero, BattyBot, QueenieBeeIsMe, Dexbot, Codename Lisa, Gacelp, NoisyScribe, TheSerpent’sHiss, Ozymandiax, CyberXRef, OMPIRE, KasparBot, Pligariep, SPRDEF, Vemman and Anonymous: 169 • MS-DOS Source: https://en.wikipedia.org/wiki/MS-DOS?oldid=682567597 Contributors: Damian Yerrick, Tobias Hoevekamp, Uriyan, Tarquin, Stephen Gilbert, RobLa, Andre Engels, Aldie, William Avery, Ben-Zin~enwiki, Hannes Hirzel, Valhalla, Ericd, Leandrod, Tim Starling, Kwertii, Modster, Mahjongg, Tompagenet, Tannin, Dave Farquhar, Ixfd64, Graue, TakuyaMurata, Geoffrey~enwiki, Minesweeper, CatherineMunro, Whkoh, IMSoP, SeeSchloss, Deisenbe, Emperorbma, Saint-Paddy, EALacey, Andrevan, Dmsar, Viajero, Greenrd, WhisperToMe, IceKarma, Lfwlfw, Maximus Rex, Furrykef, Saltine, Nv8200pa, Tempshill, EthanL, Wernher, Bevo, Jeeves, AnonMoos, Pakaran, Robbot, R3m0t, Donreed, Modulatum, Stewartadcock, SchmuckyTheCat, Blainster, Bkell, Hadal, Jwinters, Alerante, Alexwcovington, Mshonle~enwiki, Lproven, Cobaltbluetony, Bkonrad, Anville, Djegan, AlistairMcMillan, Steven jones, Jaan513, Lakefall~enwiki, Bobblewik, Gadfium, Lst27, Vina, Billposer, Bumm13, Kevin B12, Karl-Henner, Kmweber, Jh51681, Gazpacho, Ta bu shi da yu, Freakofnurture, Rich Farmbrough, Dudley Doright, Ardonik, Smyth, Filzstift, Xezbeth, Michael Zimmermann, Goplat, Evice, Ylee, CanisRufus, Chungy, Kwamikagami, Hayabusa future, RoyBoy, Zebs, Warpozio, MPS, Perfecto, Dom Lochet, Bobo192, Deathawk, W8TVI, Enric Naval, Retron, Clarkbhm, Cwolfsheep, Jojit fb, Nk, MARQUIS111, Sam Korn, El Raki, Beinsane, Alansohn, Guy Harris, Interiot, Stovetopcookies, Andrewpmk, ABCD, Ashley Pomeroy, Demi, Gblaz, Mysdaao, Wgw2024, Rebroad, Peter B., Wtshymanski, Drat, Dirac1933, Versageek, Redvers, Dan100, KelisFan2K5, X3J11, Woohookitty, Mr Tan, JarlaxleArtemis, Timharwoodx, Ae-a, MattGiuca, Pol098, Ruud Koot, Scootey, Blackcats, Wayward, ThomasHarte, Gniw, Shanedidona, Palica, MrSomeone, Kesla, Graham87, Misternuvistor, Isaac Rabinovitch, Ranvel, Wiktator, JoshuacUK, Tangotango, Boccobrock, FlaBot, Patrick1982, SchuminWeb, JeremyMcCracken, Doc glasgow, Master Thief Garrett, Jak123, RexNL, Gurch, Riki, Stormwatch, Intgr, CoolFox, Overand, BradBeattie, Justayankeefan, Chobot, Guliolopez, YurikBot, Wavelength, Jcam, Jzylstra, OtherPerson, Hairy Dude, Family Guy Guy, Hyad, Fabartus, Wengier, Koffieyahoo, Yuhong, Hydrargyrum, Stephenb, Pmurph5, Sikon, Shell Kinney, Akhristov, Wimt, NawlinWiki, Aftermath, Wiki alf, Kufat, Neverstable, Dureo, Xeos, FreelanceWizard, Mikeblas, Mysid, Vlad, Blowdart, Sandstein, Zzuuzz, Pinikas, JuJube, GraemeL, Ian Fieggen, Janizary, Marcodeo, ArielGold, ViperSnake151, Katieh5584, Rwwww, Tyomitch, Mardus, DVD R W, SpLoT, Ozzmosis, SmackBot, Herostratus, KnowledgeOfSelf, C.Fred, Jagged 85, Troyoda1990, Jrockley, Scott Paeth, Yamaguchi , Gilliam, Skizzik, Stuart P. Bentley, Chris the speller, SlimJim, @modi, Persian Poet Gal, Chemturion, Nbarth, Yunaffx, DHN-bot~enwiki, Gracenotes, Emurphy42, AussieLegend, Petersh, An-chan~enwiki, Rrburke, GVnayR, Ahodes1, Jiddisch~enwiki, Andrew Jackson, Localzuk, Warren, Binsurf, Freedom to share, Acdx, Sigma 7, Luigi.a.cruz, SashatoBot, Anss123, Robomaeyhem, Vanished user 9i39j3, RCX, Kashmiri, Joffeloff, Diverman, Aleenf1, Bilby, Slakr, Stwalkerster, Critic-at-Arms, Avs5221, Julthep, Waggers, Whomp, Wrlee~enwiki, MTSbot~enwiki, Peyre, Kvng, Supaman89, Norm mit, Asmpgmr, Linkspamremover, Illyria05, Kev19, Jamst98, Dogman15, CCFreak2K, Cydebot, SyntaxError55, UncleBubba, Gogo Dodo, ST47, Mrstonky, JenKilmer, Aanhorn, Starionwolf, Garik, Kozuch, After Midnight, 6.1. TEXT 131 Omicronpersei8, Mattisse, Thijs!bot, Epbr123, Anubaph, Marek69, Dgies, Nick Number, Dawnseeker2000, AlefZet, Escarbot, Dzubint, Trlkly, AntiVandalBot, Konman72, Oneupthextraman, Leojei, Res2216firestar, DOSGuy, RobIII, JAnDbot, Deflective, YK Times, Schwarzes Nacht, PhilKnight, Aacini, Y2kcrazyjoker4, Acroterion, VoABot II, JamesBWatson, Think outside the box, Tedickey, Sloclops, Sonamunda chaks, Edmundwoods, Renamed user 27zg566z1s1gzlh1725z, NoychoH, Ahmad87, DerHexer, GermanX, ReedSturtevant, Menneisyys, AVRS, CommonsDelinker, Nono64, Jascii, Ayecee, Mot256, Dgiraffes, Katalaveno, Nintendough, Jmajeremy, Skier Dude, Ohms law, Babedacus, KylieTastic, Mike V, Useight, VolkovBot, DSRH, Michaelpremsrirat, Vincent Lextrait, Ryan032, Chitrapa, Epson291, TXiKiBoT, Slamminsam069, Robotchicken1886, Koopa turtle, Qxz, GL1zdA, B4light, PlayStation 69, Pykello, Molotovnight, Methodius12, Freddy Riegel, A Raider Like Indiana, Insanity Incarnate, Arborinus Verginix, TheStarman, Brooktree, SieBot, StAnselm, Stephenkall, Graham Beards, Scarian, Meldor, Josh the Nerd, Sshennar, Defydaydryers, Jerryobject, Dirk P Broer, CombatCraig, Qst, Arbor to SJ, JSpung, Oxymoron83, Fonzzee, Faradayplank, Vpovilaitis, AngelOfSadness, Petzi1969, Gamingnews, Dkid3404, JohnnyMrNinja, Maralia, Nskbalu, Echo95, Joshb306, Denisarona, ImageRemovalBot, Zer0431, Martarius, Mbssbs, ClueBot, NickCT, Helpsloose, Wikievil666, Mattgirling, Wendy.krieger, Infogaufire, Anby, Pointillist, Rahulgr8888, DragonBot, Avouac, Excirial, Mynameischarlesbarkley, Posix memalign, Tyler, Kaiba, Thehelpfulone, Foxroz, Andy16666, ITexter, PCHS-NJROTC, SF007, DumZiBoT, Helixweb, Emmette Hernandez Coleman, Jffner, Nepenthes, WillOakland, TruckMonkey, Evan Russell, PURAMILK, Dwilso, Alanthehat, TrainTC, Addbot, Ghettoblaster, Mabdul, Fyrael, SirClaymore, PrintStar, Magus732, GSMR, Tothwolf, AkhtaBot, CoolD, Cliftonmullins, Roadstaa, Oisjfw, Animesh.saxena, Buddha24, Favonian, 5 albert square, Lightbot, Funkmasterj1, Gail, Zorrobot, WikiDreamer Bot, CountryBot, Luckas-bot, Yobot, Naudefjbot~enwiki, Crispmuncher, KamikazeBot, South Bay, Koman90, AnomieBOT, DemocraticLuntz, Rubinbot, Galoubet, Betax, Samo00099, Materialscientist, Gotgod86, Citation bot, Redsoxcool, Tamiera, LilHelpa, Boxstaa, Xqbot, Capricorn42, Alexander Mclean, Loismum, RibotBOT, Amaury, Smallman12q, Petervee, FrescoBot, Hypertime179, Ballon845, Kerjuk, הסיסמא123, Pcuser42, Saayiit, Lotje, Fayedizard, Allen4names, Reaper Eternal, Seahorseruler, Meemsinator, Alex230592, Diannaa, DARTH SIDIOUS 2, The Utahraptor, TjBot, EmausBot, John of Reading, Oliverlyc, Ricer46, CudllllyCakeMixCore, Solarra, Sam Tomato, Thecheesykid, 15turnsm, N90p, SporkBot, Wayne Slam, Sahimrobot, Quantumor, Champion, Raven-14, Czeror, 28bot, Jekyllhide, Will Beback Auto, ClueBot NG, Matthiaspaul, Shaddim, Yourmomblah, Nick Huitema, O.Koslowski, Widr, Funllama680, Be..anyone, Strike Eagle, Wbm1058, Hikmet483, BG19bot, Altrio, MusikAnimal, Rack004, Asdfasdfg23, Rynsaha, Annavoskanyan, Cooljrt, Achowat, Pratyya Ghosh, ScholarWarrior, ChrisGualtieri, Khazar2, Gasgiant69, Ducknish, Sri555777, Rezonansowy, Codename Lisa, Interlude65, Kephir, Charl0929, MegaScience, Mr Pie Guy1234, WinUser, Taikoguide, RaphaelQS, ArmbrustBot, Ryanferber, Andrew Stiff, Buggzy1011, Ksupoudel, Claw of Slime, Uplift Humanity, Rypted, Butterflyclown, Wikigeek244, Patrioticstripey, Sk-Eiht, ChamithN, Chrin21, Qqwe2, BlueFenixReborn, EChastain, NotSoE4sily, Archanine, Siraitx, Ddhdbdhss, Ffdddsf, Opratingsystemcomputerman, Desilva26, Sabirmayo and Anonymous: 633 • Microsoft Windows Source: https://en.wikipedia.org/wiki/Microsoft_Windows?oldid=683797166 Contributors: Damian Yerrick, The Epopt, Eloquence, Mav, Zundark, Berek, AstroNomer~enwiki, Mark, Andre Engels, XJaM, Christian List, Aldie, SimonP, BenZin~enwiki, Ellmist, LionKimbro, Camembert, JonasL, Dwheeler, Metz2000, Xlation, Lumpbucket, Leandrod, Frecklefoot, Edward, Thalakan, Patrick, RTC, D, JohnOwens, Michael Hardy, Qwitchibo, Modster, Nixdorf, Jketola, Tompagenet, Tannin, Wapcaplet, Ixfd64, TakuyaMurata, Delirium, Flamurai, Anonymous56789, Minesweeper, Alfio, Goatasaur, Spliced, Tregoweth, CesarB, Egil, Fantasy, Ahoerstemeier, Haakon, Mac, Nanshu, Snoyes, JWSchmidt, Fuck You, Cgs, Whkoh, Ffx, Poor Yorick, IMSoP, Cstanners, Grin, Cherkash, Rl, Caffelice~enwiki, Kaysov, Samuel~enwiki, Mxn, Ilyanep, Arteitle, Hashar, Mulad, Vanished user 5zariu3jisj0j4irj, Timwi, Tacvek, Andrevan, RickK, Slathering, JCarriker, Paul Stansifer, Dysprosia, Fuzheado, Markhurd, Tpbradbury, Maximus Rex, Furrykef, Saltine, SHeumann, Bartosz, Ed g2s, Bevo, Geraki, Khym Chanur, Indefatigable, Pakaran, Secretlondon, Johnleemk, Archivist~enwiki, Sjorford, Robbot, Pigsonthewing, Tonsofpcs, Lbs6380, Chris 73, Nurg, Naddy, Lowellian, Ashdurbat, Academic Challenger, TimR, Rursus, SchmuckyTheCat, Meelar, DHN, Jondel, Dehumanizer, Benc, Mushroom, Robartin, Cyrius, Chazz, Dina, DarkHorizon, David Gerard, Enochlau, Aomarks, Sethoeph, Fennec, Yama, Massysett, Haeleth, Twernt, Lupin, Ferkelparade, Monedula, Anville, Betelgeuse, Naltrexone, Ssd, Emacsuser, Sourcejedi, Zoney, Siroxo, Djegan, AlistairMcMillan, Matt Crypto, Spe88, Wmahan, Reilly, Stevietheman, Jiffy, Thewikipedian, Geoffspear, Chowbok, Gadfium, Utcursch, Shibboleth, Knutux, Antandrus, Onco p53, Hurtstotalktoyou, JoJan, Nimc, Am088, Phil Sandifer, Rdsmith4, DragonflySixtyseven, Sam Hocevar, Ricjl, Cynical, Stilroc, Howardjp, Gscshoyru, Stonda~enwiki, Aidan W, Joyous!, Derek Parnell, Dcandeto, Grm wnr, Zondor, Trevor MacInnis, Grunt, Lacrimosus, DmitryKo, Gazpacho, SYSS Mouse, Running, Ta bu shi da yu, SimonEast, Freakofnurture, ClockworkTroll, Archer3, Jiy, A-giau, Rich Farmbrough, Rhobite, TrekMaster, Andros 1337, Xmachina, Smyth, YUL89YYZ, IlyaHaykinson, Mjpieters, Sperling, LeeHunter, Pavel Vozenilek, Gronky, Edgarde, Kbh3rd, Ppa, JoeSmack, Plugwash, Evice, Brian0918, Aranel, Uli, CanisRufus, Kop, PPGMD, Joanjoc~enwiki, Marx Gomes, Marcok, Aude, Shanes, Susvolans, Cacophony, Bdoserror, Leif, SHARD, Coolcaesar, Thu, Bobo192, Mike Schwartz, Mrdelayer, BrokenSegue, Blakkandekka, Spug, Cwolfsheep, Dungodung, Shnout, Davelane, Stino v, Cncxbox, SpeedyGonsales, Jerryseinfeld, La goutte de pluie, Sasquatch, Jojit fb, Shashank Shekhar, Deryck Chan, Raja99, Towel401, Skirks, Liberty Miller, Beinsane, Poweroid, Mithent, Gary, JYolkowski, Elwood00, Mathwizxp, Scuiqui fox, Mo0, Walter Görlitz, Guy Harris, Halsteadk, Keyser Söze, Arthena, Somebody in the WWW, Yamla, Fraslet, Lectonar, MarkGallagher, Goldom, Water Bottle, Kurieeto, Mailer diablo, Ynhockey, Denniss, Malo, Avenue, Blobglob, Shinjiman, Ronark, Helixblue, Rebroad, Almafeta, Cburnett, Yuckfoo, Suruena, Evil Monkey, 2mcm, Sciurinæ, Jopxton, Rd syringe, Henry W. Schmitt, Redvers, Blaxthos, Ceyockey, Cristan, Neo2256, Kbolino, Daranz, Zntrip, Kelly Martin, OwenX, Woohookitty, Karnesky, Georgia guy, Scriberius, Rocastelo, Ae-a, Thorpe, Aveilleux, Deeahbz, MattGiuca, Commander Keane, Windsok, Fbv65edel, Ruud Koot, JeremyA, Mms, RolandH, Tabletop, Databases, Terence, Red Dalek, Crpietschmann, Blackcats, Rchamberlain, Umofomia, Rjecina, Samvscat, Gerbrant, Mirddes, Marudubshinki, Holek, Kesla, Graham87, Cuvtixo, Deltabeignet, Magister Mathematicae, Ilya, Galwhaa, FreplySpang, JIP, RadioActive~enwiki, Reisio, Ryan Norton, Sjakkalle, Rjwilmsi, Tyraios, NewGuy4, Linuxbeak, JoshuacUK, Adamacious, Tangotango, Colin Hill, MZMcBride, Tawker, Vegaswikian, Cff12345, Holbred~enwiki, Oxygenkiosk, Frenchman113, SeanMack, The wub, Bhadani, Ttwaring, Fred Bradstadt, Husky, Sango123, Yamamoto Ichiro, MJGR, X1987x, SNIyer12, Leithp, FayssalF, Wragge, FlaBot, Ian Pitchford, SchuminWeb, RobertG, Blackanddarkness, Tomcage9, Billyswong~enwiki, MMMEEE, Crazycomputers, Riluve, SouthernNights, JYOuyang, RexNL, Ewlyahoocom, Looksliketrent, Mguy77, Pgiii, Cayindra, Darranc, Srleffler, Mr Bartels, Milfman, Antimatter15, CJLL Wright, Chobot, SirGrant, Dstln, Hall Monitor, Peter Grey, MCC, The Rambling Man, YurikBot, Klingoncowboy4, Pile0nades, RobotE, BillG, Kinneyboy90, Eraserhead1, OtherPerson, Charles Gaudette, John Quincy Adding Machine, Wengier, Bleakcomb, Jumbo Snails, TheDoober, Hendrixski, Pigman, Gardar Rurak, Bergsten, Yuhong, Mehran, RadioFan, Akamad, Noypi380, Avihut, Sikon, Debackerl, Gaius Cornelius, Cryptic, Akhristov, MontyB, Wimt, Swollib, Anog, Wiki alf, GSK, BigCow, Gosub, Mgw854, Thaek, Supers, Jaxl, Johann Wolfgang, Blueforce4116, Computerdan000, Conman23456, Banes, Gaodifan, Dethomas, Larry laptop, Kaycubs, Nhesketh, Fatjoe151, Off!, Amcfreely, Tony1, FlyingPenguins, Syrthiss, BOT-Superzerocool, Bota47, Kissmeplease, Jeh, Jeremy Visser, Jtc, Blowdart, Jrcure, Xpclient, Brisvegas, Ilmaisin, JoshuaArgent, Alpha 4615, Max Schwarz, Wknight94, Ms2ger, Mugunth Kumar, FF2010, Pinikas, Lt-wikibot, Gtdp, IsUsername, The Fish, Cloudbound, Frederik.Questier~enwiki, Tsunaminoai, JuJube, JoanneB, Barrera marquez, CWenger, Alemily, HereToHelp, JLaTondre, Markustwofour, Spookfish, Vahid83, Smurfy, David Biddulph, DisambigBot, ViperSnake151, Simxp, Kungfuadam, TLSuda, Snaxe920, Ramanpotential, Benandorsqueaks, Rwwww, Tyomitch, GrinBot~enwiki, Samuel Blanning, Ergosteur, 132 CHAPTER 6. TEXT AND IMAGE SOURCES, CONTRIBUTORS, AND LICENSES TuukkaH, Tom Morris, WikiFew, FrozenPurpleCube, Bibliomaniac15, Luk, Robertd, Pschulz01, SmackBot, Scorpiona, Nmnmnm, Mattarata, Aido2002, Gamerzworld, Faisal.akeel, Lcarsdata, Vbrtrmn, KnowledgeOfSelf, Ma8thew, Throup, Adam Mirowski, Dieboybun, Pgk, Korossyl, Gary Kirk, Scifiintel, Delldot, Eskimbot, Ajm81, Odd bloke, Srnelson, Edgar181, Aksi great, SmackEater, Gilliam, Brianski, Oscarthecat, Ennorehling, Vontafeijos, Ioprwe, Chris the speller, Jonghyunchung, StephenH, Michael Ray, Quinsareth, Big Booger, Persian Poet Gal, MK8, Thumperward, MalafayaBot, Repetition, Propound, Wykis, A gnome, Letdorf, Ctbolt, EdgeOfEpsilon, Kungming2, Paulfp, M Johnson, Metalim, DHN-bot~enwiki, Tommy Irianto, Rlevse, Xation, Jonatan Swift, Can't sleep, clown will eat me, Bakery2k~enwiki, 1(), AussieLegend, Frap, Alphathon, Heapchk, Jsmethers, Codificate, TheKMan, Rsm99833, Chille, SundarBot, Ganeshotaku, Stevenmitchell, Khoikhoi, DinosaursLoveExistence, BostonMA, Valenciano, Ne0Freedom, [email protected], Brandon Brown, Localzuk, RandomP, Vedek Dukat, Warren, Astroview120mm, Binsurf, Ithizar, Mwtoews, Matt.forestpath, Sigma 7, Luigi.a.cruz, LeoNomis, Candorwien, AbsoluteFlatness, Towsonu2003~enwiki, Vina-iwbot~enwiki, Tfl, Kukini, Ged UK, TiCPU, IGod, Midkay, SashatoBot, Madcow 93, Phanton, Nishkid64, KingpinE7, Harryboyles, Guyjohnston, Robert H, John, Thavian, Cjcamilla, Buchanan-Hermit, Gobonobo, NewTestLeper79, GraceWest8092, Soumyasch, Candamir, Fitzebwoy, Gang65, Mmoller, Joffeloff, CaptainVindaloo, Groggy Dice, Danny Beaudoin, Yasirniazkhan, [email protected], Mr. Lefty, Flying Bishop, 16@r, Bluestriker, Timmeh, Werdan7, AxG, Optakeover, Johnmc, Zapvet, Peyre, Galactor213, Zepheus, TJ Spyke, Swotboy2000, WilliamJE, Iridescent, GNUtoo, Brandizzi, JoeBot, Jpoke89, Blakegripling ph, Ollie the Magic Skater, J Di, Cbrown1023, Tony Fox, Amakuru, Z220info, Jcurtin, Dp462090, Marysunshine, Z98, Courcelles, Exodite, Illyria05, Mcwatson, Fdp, FairuseBot, Tawkerbot2, Alegoo92, Daniel5127, RaviC, Marceki111~enwiki, Lahiru k, FatalError, Robinhw, Linuxerist, FleetCommand, Ivan Pozdeev, F80, Zarex, Maester mensch, SmoothNikola, MacGeekGuy, Crazyromo, Jesse Viviano, DanielRigal, Ganfon, Charles dye, Shandris, Yousifnet, Casper2k3, Corporal clegg48, NE Ent, Moonknightus, Aihtdikh, JettaMann, Olioster, Phatom87, Somaditya, Peteturtle, Karimarie, Supremeknowledge, ToasterOS, Bbq man, Steel, SyntaxError55, UncleBubba, Gogo Dodo, Red Director, Hebrides, Corpx, ST47, Tfgbd, Nick2253, Scottymoze, AvantgardeMVC, Julian Mendez, Roketjack, Mr. XYZ, B, Andyh2, Aanhorn, DumbBOT, Nathan nfm, Starionwolf, Kozuch, ErrantX, Njan, DalekClock, Omicronpersei8, A7x, TAG.Odessa, Hirosho, FrancoGG, Jdlowery, Thijs!bot, Tepidpond, Rockymountains, Ultimus, Dasani, O, Frozenport, Jdm64, RevolverOcelotX, 9ms, Ondrejsv, Jyoz, Wiki fanatic, Nachmore, Jon vs, Hcobb, Grayshi, Alphius, FreeKresge, Big Bird, Kolonuk, SusanLesch, Dawnseeker2000, Dzubint, Ju66l3r, KrakatoaKatie, Ialsoagree, AntiVandalBot, Mlscdi, DigitalLife, Luna Santin, Widefox, Skyeap, Opelio, Antique Rose, Prolog, Teamcritical, Dtech, MERC, Scepia, Tadas12, Gilbertogm, Oneupthextraman, Malcolm, Aeæ, Elaragirl, Myanw, Canadian-Bacon, Avocado27, Caper13, JAnDbot, The Geneticist, Dan D. Ric, Leuko, Kigali1, Jimothytrotter, El Dominio, NapoliRoma, Barek, Megamanfan3, Dustin gayler, MER-C, Qudder, Amrykid, JacquesStrap, Arch dude, Tech2blog, Hello32020, Shakumafu, Zeeboid, John Ericson, Kipholbeck, Robert Buzink, Acroterion, DataMatrix, Michaeldadmum, Boylett, VoABot II, Anþony, Davidjk, Kakomu, Think outside the box, Tedickey, Kierenj, Maxim Masiutin, Wanderson9, Midgrid, Bubba hotep, Richard Lotspard, Indon, Cyktsui, Mmoll21m, Disorganisation Man, Ciao 90, ZFU738, Mkdw, Allstarecho, Clyde1998, Justanother, Toddcs, Mdrn, UMC2, Glen, DerHexer, Esanchez7587, Coniosis, Thompson.matthew, Freeeekyyy, Wikinger, Ozherb, Gwern, Tracer9999, Stephenchou0722, Phoogenb, PsyMar, Xtreme racer, Rderijcke, Hdt83, MartinBot, GrandPoohBah, Djmasala, D thadd, Bissinger, Sweetback, Uriel8, R'n'B, CommonsDelinker, Hairchrm, Thewallowmaker, Smokizzy, ItsProgrammable, GamerXp, Okwestern, Wow1000, Trusilver, Richiekim, BillWSmithJr, Pursey, Jesant13, Man123123, Kar.ma, Stephanwehner, Petrwiki, StuIsCool, Wangmike, Boris Allen, StuThomas, Thegreenj, Luce007, Unimaginative Username, Sigmundpetersen, Robbie940, Sebmathews, Cpiral, Albert0057, EH74DK, Fiver2552, Bogods, TheChrisD, WikiBone, Andrewtechhelp, RedKlonoa, DarkFalls, Selivanow, Ipodsocool~enwiki, Nathanlilienthal13, Thomas Larsen, Ryan Postlethwaite, Downloaddude1258, Martyx, Ahodacsek, Zero Serenity, QUAZWRATH, Rocket71048576, AntiSpamBot, Cncccer, Xgmx, Xeysz, Jcbparry, Sleepeeg3, Althepal, Joshua Issac, Cometstyles, Josh Tumath, RB972, Tiggerjay, Dragar Gt, Warlordwolf, Remember the dot, Jamieostrich, Szhang21, Casper10, ElliotAdderton, WikiMan44, Ajfweb, Michael Angelkovich, BUzTeD, Chris Pickett, TheNewPhobia, Darthnader37, Specter01010, Diegogrez, Deus2, ThePointblank, Funandtrvl, Resplendent, Ottershrew, Googler459, Tripacer99, Lead$peaker, Spear of fire, Theazman1, Jigs41793, Kwen, ACCOM2222, Fowl2, Jake Wasdin, Hammersoft, VolkovBot, Rhtc, DOHC Holiday, Science4sail, Kevinkor2, Michaelpremsrirat, AlnoktaBOT, 67773732TYU, Rutherfordjigsaw, Gunnar Guðvarðarson, George Adam Horváth, Philip Trueman, Hydr~enwiki, TXiKiBoT, Dojarca, Flanakin, Adamodell, GDonato, Joejoejo, Rei-bot, Joe2832, Robotchicken1886, Ann Stouter, Z.E.R.O., Anonymous Dissident, Qxz, MarkSpearmint, Kjhonsa, Wikiwaka101, Linear88, Dolphinn, WindowzRULZlolZ, Choppie3000, Werideatdusk33, Nukleartoaster, DragonLord, Lou.weird, Hypnoticcyst, Selfdiscipline, Cremepuff222, Yergizmo, Jmoynihan08hm77, Slipknotmetal, Wykypydya, SpecMode, Qwerty124gg, CRFWNY, Jmath666, Telecineguy, Ianjones50, Eliotwiki, Toyotaboy95, Codyblevins, Chriswoz, Packard Bell Legend, Haseo9999, Hahafatpeople, Richard626, Ayjay1545, Synthebot, BrianRecchia, Thisisntfake1, Burntsauce, Digita, A Raider Like Indiana, Chocolatemilk94, MasterCole, Mike4ty4, LittleBenW, Zakfleming, Patrickweeks007, Michael Frind, Jimmi Hugh, Iammrysh, Kohlmalo, Sauronjim, NHRHS2010, EmxBot, S.Örvarr.S, Demmy, MinorItem, SieBot, Froztbyte, Coffee, Jmjglick, Peyman4u, Jauerback, VVVBot, Krawi, Gerakibot, Josh the Nerd, Caltas, Eagleal, Dcolvin, This, that and the other, Jevel66, Audrius u, Xelgen, Thealexweb, Purbo T, Cjordan93, Abhishikt, Radon210, Lord British, Jimthing, Rsantmann, Rhesusmonkeyboy, Oxymoron83, Faradayplank, Dragonhelmuk, Jdaloner, Lightmouse, Iain99, Techman224, Dimre01, SimonTrew, Ceeon, Eggsacute, BenoniBot~enwiki, Aqair, Qxl32, Whiteford8, Mr White, David1409, Silvergoat, Bimmerosx, Gustyfalcon, TheHoax, BrianGo28, Markie2, Ageha Winds, Dust Filter, Skiwi~enwiki, Treekids, TubularWorld, Jkonline, MikeZuniga, Llalala, Escape Orbit, Jordan015, Cvinoth, ImageRemovalBot, WikipedianMarlith, Faithlessthewonderboy, Zer0431, Felipe Aira, Deepen03, Dinjired, Martarius, Sfan00 IMG, Elassint, ClueBot, LAX, Moonridersaregay, Spencerperry, Vincent.premysler, Neelchauhan, Patrolman89, Slashuer, Cp111, Frmorrison, Mild Bill Hiccup, Aria1561, Lantay77, Swabjob, Timberframe, Mastershake86, McLovin34, Jesus5555, Methanegas, Jesus764, September 11 terrorist, LonelyBeacon, Wlklpedla is meant to be vanda1ized, The Disco Times, Hbomb phd mom, Trivialist, XrXeJoeXaXpXeXr, ChandlerMapBot, Badwolf2212, Chmpoure, Jesuss~enwiki, DragonBot, Petaluma Paranormal, Turionaltec, Aaleksanyants, Googlesucks56789, Cgnabod, Hungupbg, Crem23, PixelBot, Mvmarier, CitronManden, Foo1995, Bobwrit, Jotterbot, WalterGR, BlueCaper, Afro Article, IXella007, Jaericho, Shelmac, Bbriggs1, Fiskegalen92, Dj789, Thingg, Andy16666, DaDrumBum, Anthall1991, Piratesmack, Padsquad43, Rasmasyean, BNSF Man, Johnuniq, Ryan t moua, I8189720, Azrael Nightwalker, Akira-otomo, SF007, Ginbot86, DumZiBoT, , Emmette Hernandez Coleman, Vanished user k3rmwkdmn4tjna3d, Ximian99, Ost316, WikiRedactor, Twickline, Rreagan007, Darremon, SilvonenBot, Stevenh123, Airplaneman, Kbdankbot, Addbot, Xp54321, Ghettoblaster, ConCompS, Rincewind32, Alexandra Goncharik, Blubberboy92, Ente75, Jan Hofmann, Tothwolf, Southpark20, Geek45, Nintendog master 54, Older and ... well older, Rcmouse1010, Nickenzi, Scientus, IcelandicTundra, SoSaysChappy, Buddha24, ILOVELOL32, Favonian, Jasper Deng, Rodeo90, RedXII, Numbo3-bot, Newfraferz87, John Goettle, OlEnglish, Wmplayer, Nicolas Love, Legobot, Luckas-bot, Yobot, Bunnyhop11, Falco McCloud, Enigmaaaaa, Neckername, Nallimbot, Binzisimpsons, Kittyhawk2, OregonD00d, Koman90, AnomieBOT, The Colclough, Jacob Hnri 5, Galoubet, Angeljon121, JackieBot, Djhybrid117, Shadowfyren, Citation bot, Elm-39, Johnclow13, Deanhowell123, ArthurBot, LilHelpa, Arnoldkul, Xqbot, Lprd2007, Injust, Eivindsol, CoolingGibbon, TechBot, Person1936, Jeffwang, Tad Lincoln, , KrisBogdanov, Tyrol5, Rbuj, S0aasdf2sf, Reallikeunreal, Solphusion~enwiki, Otter Mii-kun, Loismum, Mark Schierbecker, 1nt2, Cyfraw, BenBen1234, Bo98, Shadowjams, Enco1984, Iggymwangi, Opagecrtr, Jerrysmp, JennKR, FrescoBot, Lordalpha1, Lonaowna, , Cityscape4, MichealH, 2toy mora, HJ Mitchell, Sae1962, Endofskull, NGSF, 6.1. TEXT 133 Slivicon, Pokyrek, Xxglennxx, DigbyDalton, Simple Bob, Biker Biker, Dcshank, Gnepets, Unknownperson1234, HRoestBot, Neo The User, Rameshngbot, MJ94, Tinton5, Thetehror, Jose Concepcion, MastiBot, Tarashav, Yoshiandluigi3, Xiejunmingsa, Beao, Pcuser42, December21st2012Freak, Gryllida, FoxBot, Mark85296341, Robert Xia, Evosoho, JoThousand, TobeBot, Train2104, Lotje, Vrenator, Moonwolf14, Aoidh, Mkbashier, Fabsss, Tbhotch, Jesse V., Fry1989, Supercooljs2, Yehiahassan, Rollins83, DASHBot, Abletonlive05, J36miles, EmausBot, Interframe, WikitanvirBot, Dinhtuydzao, G&CP, TuneyLoon, Computer boy2, Kkm010, Kiralexis, Bollyjeff, W1 m2, JuanC08, Blackcap95, Westley Turner, Bryce Carmony, Ichthyoid, Alshaheen15, Dog1818, Bilbo571, Bothary, MADCastro2012, Demiurge1000, Alex Neman, TyA, JustPlaneEditing, Tomy9510, EndlessCoffee54, L Kensington, Gabrielpokemon, Quoladdie, Champion, Puffin, MainFrame, Colejohnson66, ClamDip, Dylan Flaherty, Weararedjacket, Bdshort1, Macurry, PoWwOw123, Kenny Strawn, Monothleft, Dorsal Axe, Steezly, Jordanyoung17, DASHBotAV, Karlo2002, Mokk123, JohnJamesWIlson, I have wood, Ichangefacts, Dinnerface, Jekyllhide, Davey2010, Kypr8, Mrleewilliams, Nhellviktor, Matthiaspaul, Pizza1016, David O. Johnson, Loginnigol, YannickFran, Esebi95, PoqVaUSA, Sherylanne, Gavin.perch, Miros 0571, Davidvkimball, Mawcowboybillsbrick7, Wikidexel2, Doorknob747, BG19bot, JoJaEpp, KamranMackey, Rdococ, Puramyun31, Cosmicdense, TheGeneralUser, Gagetony8, Midnight Green, Compfreak7, Dipankan001, Cadiomals, Rgbc2000, VirusKA, Sumesh Dugar, Unixman83, Matt99clancy, NotinREALITY, Kelton2, Kyonzuken, RyanDolan123, Wsoder, Shirudo, Pikachu Bros., Phoenixlogan123, Gabe290, Kushared, Heroman1234, Pai Walisongo, Sciencegeek10188, Cyberbot II, Shwangtianyuan, Matan2001, RainingFlight, KumardipSarkar, Imscare, Krystaleen, Otisfrog, MrTechNews123, Boogie314, JYBot, Prjrv787, Dexbot, Rezonansowy, Dissident93, Smartmo, Codename Lisa, Justashuman960, Rolandhelper, Badpiggy, Nozomimous, Sri555666, Wiki nol ege, Gacelp, PhelperRF, 1 , Kevin12xd, NightShadow23, AwesomeSaucer9, Liudant, PinnuDas, Jdanielcampos, Cmckain14, Vanished user lalsdi45ijnefi4, VanishedUser sdu9aya9fs232, RyDroid, Dimeji.97, Editor605, Ipad135, George Parastatidis, Kuyi123w, Comp.arch, Pyscowicz, Techie007, Ï¿½, Kernosky, Frenzie23, Timdog13, Fixuture, Scatboot198, Angelgreat, Japanese Rail Fan, WinDev2014, Nickid12, Snowbooks423, Qwertyuiop9ew9ew9ee, Thatkitten, Ejrusselllim123, Hum1969, Lbj90, ZackDickens12, Ali78v, Qwertyxp2000, LR Guanzon, Snowbooks1419, A8v, PremiumBananas, Some Gadget Geek, Joshuarshah, Nathanielcwm, Sabersingh, TheTVGuy66, KasparBot, Mrkenjiex24, BD2412bot, SemiDot, Akmaie Ajam, ZverCD and Anonymous: 1016 • Linux Source: https://en.wikipedia.org/wiki/Linux?oldid=684097709 Contributors: Damian Yerrick, AxelBoldt, Magnus Manske, The Cunctator, Lee Daniel Crocker, Brion VIBBER, Eloquence, Uriyan, Zundark, The Anome, Tarquin, Stephen Gilbert, Koyaanis Qatsi, David Merrill, Malcolm Farmer, Ffaker, Amillar, Youssefsan, XJaM, Arvindn, Christian List, Matusz, Phil Bordelon, Fubar Obfusco, MadSurgeon, William Avery, Roadrunner, SolKarma, Shii, Sharuzzaman, Hannes Hirzel, Drbug, Ellmist, Ark~enwiki, Jaknouse, Dwheeler, Modemac, Metz2000, Chuq, Stevertigo, Hfastedge, DennisDaniels, Nevilley, Frecklefoot, Edward, Nealmcb, Ghyll~enwiki, Michael Hardy, Kwertii, JakeVortex, Isomorphic, Dante Alighieri, Ronincyberpunk, Norm, Nixdorf, Collabi, Wwwwolf, Wapcaplet, Ixfd64, Bcrowell, Gaurav, Graue, Dcljr, Sannse, Tomi, TakuyaMurata, Delirium, Skysmith, (, 7265, Minesweeper, Pagingmrherman, CesarB, Egil, Mdebets, Ahoerstemeier, TomK32, Haakon, Mac, Stevenj, Nanshu, Baylink, Theresa knott, Snoyes, CatherineMunro, 5ko, Angela, Den fjättrade ankan~enwiki, Jebba, LittleDan, Julesd, Salsa Shark, Ugen64, Glenn, Kvintadena, Acooley, Whkoh, AugPi, Nikai, Susurrus, Cimon Avaro, Kaihsu, Shammack, Evercat, Jordi Burguet Castell, Rl, Darkonc, Dwo, Hashar, Coren, Barak~enwiki, Tarka, Emperorbma, Crusadeonilliteracy, Guaka, Timwi, Dcoetzee, Nohat, Andrevan, RickK, Dmsar, Ww, Mac c, Slathering, Sepper, Paul Stansifer, Dysprosia, Hydnjo, Jay, Enigmasoldier, Zoicon5, Hdk, DJ Clayworth, CBDunkerson, Lotas, Halmonster, Maximus Rex, Jeffrey Smith, Grendelkhan, Morwen, Saltine, Wwheeler, Populus, Fibonacci, Omegatron, Ed g2s, Ann O'nyme, Wernher, Samsara, Thue, Bevo, Traroth, Topbanana, Earthsound, Joy, Fvw, Stormie, Raul654, AnonMoos, Baffclan, Chrisjj, Pakaran, Jusjih, Johnleemk, Flockmeal, D8uv, Anjouli, Guppy, Finlay McWalter, Francs2000, Aenar, Chuunen Baka, AlexPlank, Robbot, Pfortuny, Ke4roh, Chealer, Noldoaran, Wanion, Sander123, Astronautics~enwiki, Fredrik, Kizor, Chris 73, R3m0t, Vespristiano, RedWolf, Dittaeva, Klanda, Romanm, Nbarr, Phatsphere, Tim Ivorson, Markcollinsx, Mirv, Stewartadcock, Wjhonson, Merovingian, Pingveno, Ashdurbat, RossA, Henrygb, Clngre, Rursus, Texture, Meelar, Ckorff, Jondel, Paul G, Hadal, Dehumanizer, JesseW, Victor, Cbm, Ianml, Michael Snow, Fuelbottle, Mushroom, Boarder8925, Isopropyl, Diberri, Mattflaschen, Pengo, Dina, Tobias Bergemann, Mlk, Alan Liefting, David Gerard, Cedars, Psb777, Centrx, Giftlite, Julianp, Mshonle~enwiki, DavidCary, Elf, Sj, Jtg, Axeman, Nichalp, Markvs, Massysett, Tobiah, Kenny sh, Ævar Arnfjörð Bjarmason, Netoholic, Lethe, Tom harrison, Lupin, Tubular, Herbee, Dissident, Neuro, Bradeos Graphon, Jonabbey, Curps, NeoJustin, Michael Devore, Nomad~enwiki, Jfdwolff, Sdfisher, RatOmeter, Maroux, Energiza, Guanaco, Masken, Daniel Brockman, Alan Chang, Sinclair44, AlistairMcMillan, Gugilymugily, Cjensen, Darrien, Jaan513, MikaelSorlin, Python eggs, Alvestrand, Pne, Lakefall~enwiki, Bobblewik, AlanCox, Mobius, Ryanaxp, Peter Ellis, Utcursch, SoWhy, Shibboleth, CryptoDerk, Cbraga, SarekOfVulcan, Yath, Yardcock, Quadell, Emphazy, Antandrus, Demonslave, Onco p53, Joeblakesley, Estel~enwiki, Robert Brockway, Quarl, Melikamp, Bongbang, Am088, Bonethugnd, Jossi, Wehe, Hackeron, AlexanderWinston, Rdsmith4, MAxImUs ReX, Maximus Rex is a FAGOT!!!, Vbs, Bumm13, Bornslippy, Kbrooks, Daniel11, Halo, Bk0, Goh wz, Sam Hocevar, Talrias, Eanschuessler, Cynical, Stilroc, Troels Arvin, Gscshoyru, Gnu~enwiki, Meb, Oknazevad, Imjustmatthew, Goobergunch, Kevin Rector, StephanDoerner, Jiel.B, Now3d, Chmod007, Zondor, Trevor MacInnis, Squash, Intrigue, Moxfyre, Praveer, Grunt, RandalSchwartz, DmitryKo, Jfpierce, Kate, Daxkelson, J.B. NicholsonOwens, Corti, Ta bu shi da yu, Wanted, Daviis~enwiki, Rfl, Tom X. Tobin, Imroy, Sysy, MM23, Felix Wiemann, Trypa, Discospinster, Rich Farmbrough, Rhobite, Guanabot, Sladen, Bedel23, Hydrox, FT2, Invictus~enwiki, Cfailde, Drano, Magic5ball, Rama, Jpk, Iswm, Andrewferrier, Zen-master, Wk muriithi, EliasAlucard, Smyth, Will2k, Mjpieters, Michael Zimmermann, Paul August, Gronky, Stereotek, Shlomif, Lachatdelarue, Bender235, ESkog, Rokcathang, Moa3333, Kbh3rd, Dcabrilo, Kjoonlee, Kaisershatner, Elykyllek, Plugwash, BACbKA, Elwikipedista~enwiki, Evice, PlasmaDragon, RobyWiki~enwiki, CanisRufus, Kop, Pt, Shad0, Kiand, Miraceti, Kloy1334, Kwamikagami, Mwanner, Richard W.M. Jones, Tverbeek, Jantangring, Shanes, Spearhead, Mr. Strong Bad, Raidenmaru, Matteh, Pikestaff, Eltomzo, Mqduck, Migozared, Causa sui, Bobo192, Nigelj, Alegna~enwiki, Mike Schwartz, Rhoppenrath, Mrdelayer, StarFucks, John Vandenberg, Ch1pman, RAM, GTubio, Jericho4.0, Spug, ParticleMan, SoulJuice, Scott Ritchie, SpeedyGonsales, Rajah, Alexs letterbox, Franl, Jaguar2k, RichardNeill, Minghong, Towel401, Bobby Digital, James Foster, Npc, Obradovic Goran, Idleguy, Sam Korn, Mattl, Sean Kelly, Improv, Zachlipton, Djspiewak, Rernst, Poweroid, Alansohn, JYolkowski, Onursendag~enwiki, Proteus71, Jamyskis, Sheehan, Fadookie, Njaard, Eric Kvaalen, Conan, Atlant, A.M.~enwiki, Pravs, AzaToth, Yamla, Axl, AeneasMacNeill, Swift, Dkennert, Mysdaao, Mrholybrain, Malo, VladimirKorablin, Ashlux, Wtmitchell, Velella, Ronark, Gbeeker, SidP, Jrleighton, Suruena, Aka, Evil Monkey, 2mcm, Tony Sidaway, Gpvos, Geraldshields11, LFaraone, Zoohouse, Chevelle572, Deadworm222, P Ingerson, Joshbrez, Bestiarosa, Pauli133, Versageek, K3rb, Netkinetic, Voxadam, Btornado, Kbolino, Andyault, Dismas, Bruce89, Oleg Alexandrov, Mahanga, Kmself, Dejvid, INic, Weyes, Xanthar, Evolve75, Kelly Martin, Simetrical, Firsfron, OwenX, Woohookitty, Brazil4Linux, TigerShark, GVOLTT, Jesse Hannah, Timo Laine, LOL, Thorpe, Saragc, Uncle G, Borb, Gherald, Snodnipper, Scott.wheeler, Roblinux, Pages, MattGiuca, Ruud Koot, Dodiad, JeremyA, Mms, Hdante, Tedneeman, Rtdrury, Acerperi, Cy21, Wces423, Bkwillwm, Dmol, Bbatsell, TreveX, Frungi, El Suizo, Rchamberlain, CharlesC, Waldir, Crucis, Toussaint, Prashanthns, Gimboid13, Wisq, Karam.Anthony.K, Teemu Leisti, Omega21, Turnstep, Havocted, Rgbea, Marudubshinki, LeoO3, LimoWreck, Kesla, Graham87, Cuvtixo, Magister Mathematicae, Hillbrand, Ilya, BD2412, Qwertyus, Kbdank71, Lanoitarus, Haikupoet, JIP, Island, Reisio, Jshadias, Stdout, Phoenix-forgotten, Josh Parris, Ryan Norton, Canderson7, Rjwilmsi, Tizio, Koavf, DucoNihilum, Jake Wartenberg, Eddypoon, Buck09, Strait, Mjm1964, Bob A, MarSch, XP1, Quiddity, Linuxbeak, CDCAA18D, JHMM13, Tangotango, Bruce1ee, Fifty, Mitul0520, Gudeldar, Scorchsaber, 134 CHAPTER 6. TEXT AND IMAGE SOURCES, CONTRIBUTORS, AND LICENSES Ligulem, Boccobrock, Graibeard, Muj0, The wub, Bhadani, Dar-Ape, BirdbrainedPhoenix, FlavrSavr, Jakers3200, Sango123, Svaksha, Yamamoto Ichiro, Austrian, SNIyer12, Leithp, SLi, Titoxd, StuartBrady, RicKk, TrinkerBell, Toresbe, SchuminWeb, Vizion, Lolroxors, Loggie, Ysangkok, Godlord2, Crazycomputers, Harmil, Nivix, Chanting Fox, Soulnoise, Jsheehy, Flowerparty, Superchad, RexNL, Scottrainey, Intgr, Jagginess, Wingsandsword, ZScout370, Clockwork Soul, Alphachimp, Bmicomp, Greenpenguin~enwiki, Kedadi, Ahunt, Exe, Theshibboleth, Butros, King of Hearts, CStyle, Bornhj, DVdm, Actown, Korg, Bgwhite, Jpkotta, Mysekurity, Gwernol, Tone, Roboto de Ajvol, Siddhant, Lunarcloud, Wavelength, Eraserhead1, Sceptre, I need a name, Hairy Dude, Charles Gaudette, Mclayto, StuffOfInterest, Adam1213, Simoncpu, BruceDLimber, Hyad, Sakurina, Jtkiefer, John Quincy Adding Machine, The Storm Surfer, Splash, Hendrixski, Limulus, Gardar Rurak, SpuriousQ, Ansell, Akamad, Dotancohen, Archelon, Gaius Cornelius, Rsrikanth05, Yvovandoorn, Bovineone, Pelago, Tarheelcoxn, Draeco, Anomalocaris, Srini81, Antidrugue, Capi, Linuxguy3827, NawlinWiki, Stephen Burnett, Greenlead, Wiki alf, Mipadi, CrackMonster McFuckDemon, Msikma, Ozarfreo, Jaxl, Julien Deveraux, Mkouklis, Barberio, Dureo, Musteval, Saoshyant, Retired username, Aaron Brenneman, PrologFan, Randolf Richardson, ThomasChung, D. F. Schmidt, Jpbowen, Sekelsenmat, Raven4x4x, Fuck Linux, Dementedd, Off!, Voidxor, Vipsta, Beanyk, Tony1, Aaron Schulz, User-green, Leotohill, Suso, Mysid, Psy guy, MathNT, Jeremy Visser, T-rex, Jhinman, Hosterweis, Elkman, Dan Austin, Mike92591, Wknight94, The Halo, Mugunth Kumar, Rwxrwxrwx, FF2010, Sandstein, Zerathidune, Kenguest, Emijrp, Masatran, KingKane, Zzuuzz, Harrisonmetz, Encephalon, Nfreader, Mike Dillon, Ahmednh, IsUsername, Danudey, Petri Krohn, GraemeL, JoanneB, Kingkiki217, Janizary, Fram, Smurrayinchester, Peter, Kevin, JLaTondre, Gorgan almighty, WormNut, ViperSnake151, Katieh5584, Simxp, Kungfuadam, Camje lemon, DCEvoCE, RG2, Kuzain, Rwwww, Infinity0, Airconswitch, Ajross, Mardus, Arnabbh, Quadpus, Blastwizard, Hal peridol, DrJolo, Sardanaphalus, Sarah, SmackBot, John Lunney, Macorovi, Fireman biff, Sparkyf1, Kbedell, Historian932, Mihai cartoaje, Faisal.akeel, Andras23, Coq Rouge, Bobet, ThreeDee912, Rtc, State of Love and Trust, InverseHypercube, KnowledgeOfSelf, NaiPiak, Bd84, Lantianer, Pgk, Cutter, Vald, Elsewhere~enwiki, Gary Kirk, Wegesrand, Phaldo, KVDP, Actin, Delldot, Darklock, GeneralAntilles, Kangy, Arny, Tiberious726, CapitalSasha, Vilerage, Kintetsubuffalo, Kslays, Hbackman, BiT, Lucohami, 42istheanswer, HalfShadow, Flankk, Echimu, Tommstein, Gaff, Jmendez, Xaosflux, Diegotorquemada, 1c3d0g, Unforgettableid, KennethJ, PeterSymonds, Gilliam, Brianski, Ohnoitsjamie, Coplan, Oscarthecat, Richfife, Geronimooo, JorgePeixoto, Ioprwe, Jared0x90, Fetofs, Saros136, Westsider, LinuxDemos, Redk0de, Persian Poet Gal, JDCMAN, Thumperward, Morte, Snori, Rogerhc, Jojo 1, SchfiftyThree, Donnie Love, Akanemoto, Jerome Charles Potts, Imagine1989, Marc321, Wolf0403, Letdorf, Baronnet, Duneatreides, JGXenite, Gyrobo, Modest Genius, Dethme0w, Can't sleep, clown will eat me, Harumphy, 1(), Mohnke, Hildanknight, Frap, Sunnan, Klacquement, Juancnuno, Skidude9950, JonHarder, Adomas, Vegard, MrBobla, Zvar, Jcravens42, Cyber rigger, Edivorce, Rpgdude, Soosed, Krich, Zrulli, Emre D., Spectrogram, Cybercobra, Decltype, MureninC, Makemi, Nakon, Akulkis, Brithackemack, MichaelBillington, Blake-, Chargh, Orbitalwow, Localzuk, Monotonehell, Shadow1, Dreadstar, Dave-ros, Marc-André Aßbrock, Warren, Anoriega, Onlinej, Binary2k5, Markhobley, Weregerbil, Seven Days, CristianoMacaluso, Fitzhugh, Wisco, Freedom to share, SpiderJon, Phoenix314, Kotjze, James Mohr, Where, Sigma 7, Gurklurk, Curly Turkey, Pilotguy, Kukini, AnK, Ged UK, Ohconfucius, LN2, Caleb Parks, Liquidtenmillion, Nishkid64, Dr genestealer, ArglebargleIV, Rory096, AThing, Staalmannen, Guyjohnston, Axem Titanium, JzG, HeroTsai, Wtwilson3, Jaganath, Djwings, Sir Nicholas de Mimsy-Porpington, Shadowlynk, Tim Q. Wells, Zyqwux, CaptainVindaloo, Zarniwoot, Gnevin, MonstaPro, Mr. Lefty, Beefball, EvanR, Intiendes, Thomas Gilling, Ben Moore, Anguis, Plato2006, Aav, Agathoclea, Slakr, Hvn0413, 81120906713, Ems2, Thekittenofterra, SQGibbon, Subiet, Arkrishna, Optakeover, FourDollarsAndFiftyTwoCents, Սահակ, Waggers, Sasabune, Spiel496, Cbruno, Jose77, Peyre, LaMenta3, Thatcher, Galactor213, Inquisitus, Galadh, DanConnolly, Liquidat, Hu12, Lucid, Fasach Nua, JYi, Emx~enwiki, Jparshall, Iridescent, Bradojev, Bmuller, Ronius, JoeBot, Thepizzaking, Wiki man sam, Andrew Hampe, Tony Fox, Beno1000, Momet, Courcelles, Linkspamremover, Htmlland, Knirirr, Fdp, Tawkerbot2, Alegoo92, RaviC, Inkybutton, Lahiru k, AdrianTM, SkyWalker, Zealotgi, Ruykava, Nintendomania, Linuxerist, Sakurambo, Gebbun, CRGreathouse, Boborok, Raysonho, Mgumn, Ithuwakaga, Xose.vazquez, CWY2190, MonstrousBone, Tjkiesel, CuriousEric, Vbv4, Jaxad0127, Xakuzzah, DanielRigal, Requestion, Lentower, Lyoko is Cool, Avillia, Michael B. Trausch, Tim1988, Karenjc, Skybon, Rmallins, Inzy, Beowulf.1000, Cydebot, Karimarie, Bill (who is cool!), ChristTrekker, Scofield Boy, Asmitford, UncleBubba, Gogo Dodo, Red Director, Ttiotsw, ST47, A Softer Answer, Chasingsol, Huysman, Pascal.Tesson, RitBit, Tawkerbot4, Quibik, Enigma foundry, HitroMilanese, Msnicki, Codetiger, Nikopoley, Torc2, DumbBOT, Michaelbarnes, Brumar59, Blb9t, Jmartin678, Akcarver, Kozuch, Bsmntbombdood, Neustradamus, AVIosad, Gregvw, Daniel Olsen, Instaurare, Danhm, Epbr123, Barticus88, Mercury~enwiki, FromanylanD, Bytebear, KimDabelsteinPetersen, Edupedro, Cain Mosni, TZM, Sagaciousuk, Frozenport, Jdm64, Mojo Hand, Headbomb, Hugh G. Rection, Dddelfin, Blkf, James086, Java13690, Mr pand, X201, Turkeyphant, OtterSmith, Dfrg.msc, Aleksanteri, NigelR, TurboForce, Mlogic, Ranunculoid, Big Bird, Kohlrabi, Evmilker, Santoshsnayak, Rtoris288, Dawnseeker2000, Urdutext, CowardX10, AlefZet, Escarbot, Mentifisto, Hmrox, The prophet wizard of the crayon cake, AntiVandalBot, Luna Santin, Widefox, Clarenceville Trojan, Guy Macon, Wildboy211, Stephenx77, Prolog, Hectard, Robzz, SmokeyTheCat, DivineOmega, TimVickers, Tmopkisn, Scepia, Isilanes, Bakabaka, Dylan Lake, Coviti, Obsessiveatbest, Mutt Lunker, WChess, LéonTheCleaner, Dmerrill, Neur0X, Ioeth, JAnDbot, Deflective, Kigali1, Aibara, Kaobear, DuncanHill, Skridge, NapoliRoma, Barek, Dustin gayler, MER-C, Lino Mastrodomenico, Arch dude, Fetchcomms, Jephir, THEBLITZ1, Nickvikeras, Reverendnathan, ANTROPOCENTRIO, Amcleodx, Jpolster2005, Danwri, Alliance1911, Acroterion, SteveSims, I80and, Plamoa, Joebengo, Caronteycerbero~enwiki, Magioladitis, Chevy20Man, Canjth, Bongwarrior, VoABot II, Kamran Riaz Khan, Rhwawn, LOLDSFAN, Wikidudeman, Hasek is the best, JNW, JamesBWatson, Marko75, Jéské Couriano, Stuart Morrow, Tedickey, Jancikotuc, Twsx, Loqi, Rootxploit, Aka042, Avicennasis, JMBryant, Trapped2, Indon, Panser Born, Troykitch, 28421u2232nfenfcenc, Ciaccona, Sirsai, Allstarecho, LorenzoB, Zaid85, OpenAdvantage, Bugtrio, Alansing, Xavierorr, TehBrandon, Chris G, DerHexer, Esanchez7587, Nankai, ChaosE, Pax:Vobiscum, Patstuart, Calltech, Fluteflute, Wikinger, Pikolas, Murraypaul, Gwern, Aliendude5300, S3000, AVRS, Jerem43, Etinin, Conquerist, MartinBot, LiamUK, Pádraig Coogan, EyeSerene, BetBot~enwiki, Janolder, Arjun01, Faazshift, Aladdin Sane, Draconicus, Rettetast, Paunaro, Trevorp, Filksinger, Peco4, Dominic7848, R'n'B, CommonsDelinker, KTo288, Fattymcbluff, Senthryl, TinaSDCE, LouDogg, TLF1981, Leson2403, Slash, Exarion, J.delanoy, PriscillaBerry, Trusilver, Lord Samael, Deep Alexander, Kulshrax, Uncle Dick, Public Menace, Lonjers, Man123123, Jascha00, NerdyNSK, Footballfan42892, Cpiral, Arite, WikiTorch, Barts1a, Bogods, Dispenser, Katalaveno, Firedraikke, McSly, Nemo bis, Ignatzmice, Grosscha, Crakkpot, Starnestommy, Touisiau, SUOERMAX, NiGHTS into Dreams..., AntiSpamBot, RoboMaxCyberSem, Shaka908, NewEnglandYankee, Gelasius, Diego.viola, MKoltnow, Mufka, Rekiwi, Memmke, Orrs, BigHairRef, Mocoloco311, 2help, Bob, Cometstyles, Jamesontai, Remember the dot, GregJackP, Gwen Gale, Uluboz, Ilya Voyager, Phiv, Natl1, Rugby471, Bonadea, Nat682, Starnessonny, PowerSp00n, Xlunchboxtbx, Czarbender, Belegur, Jarry1250, Chris Pickett, HighKing, Raunaak, Mark the ma3, Butholer, Rémih, Ste03, Idioma-bot, Spellcast, Davidr89, Sagar bhatia26, Nomaxxx, Omglinuxrulez, Jyoungxxxx, Fultus, VolkovBot, Jrasmuss, Jeff G., Indubitably, Alexandria, Cadby Waydell Bainbrydge, Lear’s Fool, Philip Trueman, Fran Rogers, TXiKiBoT, WatchAndObserve, Jkstark, Raty2hotty, Tagno25, Shne, Ensign Q, Couilles007, Eastoff, Comrade Graham, Technopat, A4bot, Xerxesnine, GDonato, MrFirewall, Qxz, DaBest1, DFSwiki, Seraphim, Pikidalto, Martin451, Virtual11234, Nibsthomas, Leafyplant, Jackfork, LeaveSleaves, Sgbirch, Josepy, Tb33, Ilyushka88, Thomas419ca, Merctio, TJollans, ShedPlant, Craiggyb, Nonsequitor, Andy Dingley, Dougbertram, Henrysukumar, Dirkbb, Rbuicki, Meters, Lamro, Synthebot, Altermike, Prestondocks, Tomaxer, Enviroboy, EleFlameMax, Kalan, Chachy18, AlanS, Fr0dofraggins, The Devil’s Advocate, Nibios, Brianga, Treyfury, Monty845, HiDrNick, Twooars, Shdw.puppet, Michelleem, Thunder- 6.1. TEXT 135 bird2, Logan, Darxus, Jeremiah Griffin, Slidexd, EmxBot, Arne Brasseur, RedChinaForever, H92, Kbrose, Diah ayu, The Random Editor, Biscuittin, Qwertydvorak, Ewewfws, Wumingzi, Terryjones130, SieBot, TJRC, Dusti, Anhimgr8, Milnivri, Scatteredpixels, 0bj3c7i0n, Psbsub, Fanra, Blusme1, Krawi, Josh the Nerd, H.7004.Vx, Parhamr, Dawn Bard, Caltas, RJaguar3, Swaq, Radof94, Yintan, I Love Pi, ThomasJensenDaugaard, Boxxertrumps, Mr. Maka, Martinsanders, Mrmister001, Thejackisback, Pitilessbronze, Ham Pastrami, Jerryobject, Purbo T, Krishna.91, Cjayakumar, PookeyMaster, Acet0ne, Mattkicksbottomnomsayin, Android Mouse, Flyer22, Tiptoety, Radon210, Exert, Moosemanx, Momo san, Nopetro, Askild, Hiddenfromview, Narkou, Carazo~enwiki, Chemtype, Nslater, Oxymoron83, Majojohnson, Harry~enwiki, Shayolar, Poindexter Propellerhead, KathrynLybarger, Nicuro, Hobartimus, Astrale01, Iamnotyouami, Millstream3, Macy, Hatster301, Jorgen W, Pascal Steger, Nancy, KritonK, Svick, Maelgwnbot, Aa00076765aa, Rkarlsba, Soleedges, RedBlade7, Kentynet, Openiworld, Tcrow777, Maralia, Sapeli, Ascidian, Haris.tv, Dabomb87, Treekids, Baosheng, Jean pierreCamu5, Iccdel, Kanonkas, TuxDistro, PsyberS, Tuntable, StewartMH, Tranalogic~enwiki, Dav7, Missing Ace, Smashville, Martarius, Rfvuhbtg, ClueBot, Mapiwef, Smart Viral, Kevanv, Binksternet, GrandDrake, The Thing That Should Not Be, Aohara1986, Number774, Freed42, ImperfectlyInformed, Homelessboxman, Ryannelson714, Czarkoff, Arakunem, Rockonbon, Kl4m-AWB, Der Golem, Jamie Bates, Perkster, Wwood28, Alvarokr, Wikijens, CounterVandalismBot, Blanchardb, Mhmondragon 1, Tnchris, Ramif 47, Melizg, Carsoman, Chmpoure, Bald Eeagle, NotSuspicious, DragonBot, Damon S Lucas, Awickert, Excirial, Propeng, Bproffitt, Alexbot, Kanguole, Tuxthepenguin933, Eeekster, Vivio Testarossa, Lightedbulb, Lartoven, Technobadger, Cenarium, Nikesh.jauhari, Jotterbot, WalterGR, Barretboy, Rcsteve93, Dekisugi, Tempmj, Noxia, SchreiberBike, Mewtu, DanielPharos, Bald Zebra, Sdrtirs, Andy16666, TomoFR, Error −128, Gremoldo, Aitias, Count Truthstein, Scalhotrod, Wmadavis, Versus22, GameSlaveX-13, Callinus, Multikty~enwiki, SoxBot III, Somekindofusername, W4otn, SF007, Valdis.vitolins, DumZiBoT, Templarion, Steveozone, Chris1834, Hogman500, XLinkBot, Blaznspadz, Fleeson, Aaron north, Fastily, Ptfbending, Koolabsol, Xray7224, Marriottn, PseudoOne, SakJur, Estemi, Rror, Bradv, Dthomsen8, Btvideo, Leorojas82, Little Mountain 5, Klungel, SilvonenBot, Olegthezenon, Gazimoff, Bit Lordy, Soulzone, Zodon, Dwilso, Ryuinfinity, RyanCross, Dsimic, Gggh, Kgoetz, Kodster, Dr. Robotnic, Tayste, Addbot, Proofreader77, Man with one red shoe, Pyfan, Archerman2000, Grayfell, LPfi, Some jerk on the Internet, Titanramones, Msanguino, Tcncv, Okoura, Thomas888b, AlbinoFerret, Superw4w, Xicer14, Tothwolf, Grandscribe, Fieldday-sunday, Hoax99, Scientus, CanadianLinuxUser, ThinkMark, Leszek Jańczuk, GrrlPower, Jcgrob, Thunderpenguin, Laskdfj456, Michael2346, Pclunixos, Debresser, LinkFA-Bot, Jasper Deng, Jake7401, Fireaxe888, Tsange, Peter Napkin Dance Party, AgadaUrbanit, Darkanimematt, Irvanis, Numbo3-bot, Danutzdobrescu, Issyl0, R3ap3R, Tide rolls, Lightbot, Club5566~enwiki, Gail, Zorrobot, Jarble, Felisone, CountryBot, Team4Technologies, Blablablob, Yobot, CFeyecare, Legobot II, Darfellan, Ogredeschnique, DeluxNate, Mirosamek, Golftheman, QueenCake, Luizdl, Jerebin, Kailasisonline, Davidjohn1969, Knownot, Punctilius, Nightfire001, Xeku~enwiki, Steveux, Spammer64, South Bay, Tempodivalse, Magog the Ogre, Szajci, AnomieBOT, KDS4444, 1exec1, Götz, IncidentalPoint, Rjanag, Jose278, Royote, Keithbob, AdjustShift, Earizon, Flewis, Aaron dub, Mann jess, Frebel93, Skkamath, Materialscientist, Kr0n05931, The High Fin Sperm Whale, Citation bot, Carlsotr, Maxis ftw, Kellogg257~enwiki, Neurolysis, ArthurBot, Quebec99, Diddy29, The Firewall, MauritsBot, Xqbot, ChicagoDilettante, Timir2, Capricorn42, Y.P.Y, CoolingGibbon, 4twenty42o, Miracleworker5263, Smk65536, Foxcow, Person1936, Teddks, Alaaanwar, Wiki-Saboteur, Anna Frodesiak, Locos epraix, Someslowly, Taruean, GRAPEMAPLESYREP, Shadowrpg, Hi878, Noscope101, Jamie Bunting, Homyakchik, Socaltechboy, Shirik, Uniwersalista, RibotBOT, SassoBot, Kernel.package, Dalesc, Amaury, WilliamTheaker, Kpm0310, Doulos Christos, AlasdairEdits, GhalyBot, Minorworlder, 2ndAccount, Shadowjams, Tuxman, KFV101, Milanix, Josemanimala, Hiimluke, Dougofborg, Swatnio~enwiki, Cachorro Podre, Texasranger9, Vlad003, FrescoBot, 0imagination, Lagelspeil, IvarTJ, W Nowicki, Mhadi.afrasiabi, Srbobranac, Aperson5654236, Gaddarca, HJ Mitchell, L1ttleTr33, Mynam690, Tetraedycal, Grohlerg, Nobodys Fool, DivineAlpha, HamburgerRadio, Pinged007, Pshent, Busukxuan, Simple Bob, Viralmeme, WQUlrich, Pinethicket, I dream of horses, Farazv, Bolatan, Tóraí, 10metreh, Jonesey95, Martin Raybourne, Smuckola, Skyerise, Boston rider, BRUTE, RedBot, Houbysoft, 124Nick, SpaceFlight89, Jeliekbigbusanas, Σ, Doppelback, Jandalhandler, Footwarrior, Woona, Lineslarge, Full-date unlinking bot, ZxPezz, Travisman26, Wenet~enwiki, PixelRGB, Herakleitoszefesu, Dinmammaerfet, FoxBot, TobeBot, Diblidabliduu, Econtechie, Lexischemen~enwiki, Yunshui, Wolfehhgg, DicksForSale, André Caldas, Bendib, Lotje, Michael9422, Zvn, SeoMac, Iamsocool97, Drknkn, Aoidh, Saneeth.pr, David Hedlund, Diannaa, Ivanvector, Sniperdude0, Jimb0onwheelz, Knightmeepo, Lysander89, Sandhiav, Suffusion of Yellow, Nascar1996, Tbhotch, Jesse V., DARTH SIDIOUS 2, PaulFrields, SawyerL, RjwilmsiBot, Viper dove, Iliaskr, Benman557, DRAGON BOOSTER, Provehuman, Elium2, Florianwardell, Balph Eubank, Bimanpilot, Husseinmoien, ThDavidRuk, Kerrick Staley, Tomvanbraeckel, Nyxaus, Piotrek54321, Roney.thomas.0, EmausBot, Nikhil1234567890, Nima1024, Hrjohnson10, WikitanvirBot, Immunize, Zollerriia, Thelinuxkid, Hecta, GoingBatty, Collinrocks26, Curtis8712, Ballofstring, ZxxZxxZ, Drfrjenkins, Compsciguy1988, Huctwitha, Zaixionito, Dcirovic, Мирослав Ћика, K6ka, Bgismyfriend, Regression Tester, Icewalker~enwiki, Alisha.4m, Kkm010, ZéroBot, Cogiati, Checkingfax, Killertux666, Bollyjeff, Skiddielv1, Kennethaar, Bryce Carmony, Krd, Iajrz, RussellGee, TheAmericanizator, Cullero, H3llBot, Babkock, Logangorence, Demonkoryu, Funkiyak, Wayne Slam, Cosman246, Alperoguz, Capricorn4049, JasePow1968, Blackwidowhex, L Kensington, Lxr1234, Palosirkka, Wikiloop, HenriqueRocha, Operation Ubuntu, RedRabbit, Mescaicedo, Wei2912, ChuispastonBot, Lioncash, Kenny Strawn, Creopterouis, JustinC474, Oshidash, Mjbmrbot, Georgy90, Ultrabud, Petrb, Jwaked, Mnicolosi, Kenny4427, ClueBot NG, Pantergraph, Maclinwright, Iamiyouareyou, LogX, This lousy T-shirt, Wikinium, Satellizer, Lostick, Strcat, Yourmomblah, Baseball Watcher, Mjt365, RocketLauncher2, Frietjes, Delusion23, Rahulghose, MrMinarion, C. Jeremy Wong, O.Koslowski, ScottSteiner, I epic win fail, Josemonmaliakal, Blakedog, Linuxpl0x, Xenophonix, Jebethe, Alaukikyo, TurnspitDawg, Sanketg86, Gavin.perch, Kracethekingmaker, Anupmehra, Prejeeshp, Crazymonkey1123, Mtking, Mimarsapple, Gavinstubbs09, Helpful Pixie Bot, Squidwardrocs, BubbaTLC, Kezar12356, GRANYEBOY, ProtoFire, Ndavidow, Exeva, Ahme t 151, Karabulutis252, Bozkurte, BG19bot, Island Monkey, Linuxsux, Rijinatwiki, Puramyun31, Franciso Linux, XXAutisticJeezusXx, Thand3, AlphaSly, Kendall-K1, StuGeiger, Byu68, Vikingwarrior5678, Acpipower5678, Kavins92, Fallacy of the Masses, Trevayne08, ASCIIn2Bme, Applelinux, RadicalRedRaccoon, Medende, Jayadevp13, Ioanthecomputerguy, Svnpenn, Lux2545, Isokiho, Merritttttt, Isacdaavid, Rubinkumar, Carliitaeliza, MeanMotherJr, Tkbx, Abhilash Mhaisne, HueSatLum, Zhaofeng Li, Inops, Cyberbot II, Angela MacLean, Timothy Gu, EuroCarGT, Tow, Dexbot, Rezonansowy, Spameliminator, MirandaStreeter, Mogism, TwoTwoHello, Jc86035, Calinou1, Rotlink, Palmbeachguy, RicardAnufriev, Aweasd, Hnfiurgds, Ruby Murray, I am One of Many, The Editorial Voice, Theemathas, Jakec, EvergreenFir, Fsandlinux, Jacob.halsey1, Myconix, Flat Out, ElHef, DavidLeighEllis, Comp.arch, Jop2~enwiki, Haminoon, Huihermit, Ant.ton.t, Kharkiv07, Buffbills7701, NorthBySouthBaranof, The Herald, OliverBel, PrivateMasterHD, My name is not dave, Williamt5120, FDMS4, MattyWinder, Quenhitran, Paulo Jorge Tomé, Saniya2090, Jackmcbarn, Tronedit, DatEditorPenguin, AddWittyNameHere, WallnutKraken, ScotXW, Sashaursic98, Lucky7-phool, DwellingDreamr, Tetriminos, Ariel Lindo, Sofia Lucifairy, CarnivorousBunny, Lagoset, Monkbot, Sudsbuds, Stefenev, Helworld, Filedelinkerbot, Vieque, Jarrod lawrence69, Patelaarti2393, Ketansingh123, BethNaught, Mit Romney, OMPIRE, Aste9974, Hitechcomputergeek, Peter238, Amortias, DWIZKID10, Maulik1512, Blablabli~enwiki, Mario Castelán Castro, Fleivium, Iamahashtag, ChamithN, DarrenRainey, MuhammadSohail03, Kazoza404, Khoi D. Dinh, JAYAVAISHU, Knowledgebattle, Jeremy.rican, Orduin, Kethrus, Hchaudh3, Linuxtinkerer, SupertemplarDX, RagsGamingGamer, Pikachu9501, Godsy, Davidnotcoulthard, Sizeofint, Zoomoow, Kb333, Amit Bongir, Robinjons1515, Notarock, Uareafag, Dheer chudasama, Arandombunnyrabbit, Recharged, Ashmita Bichoury, Thediamondgames, KasparBot, Leowonderful, Meepermeepster, Cmatteri, Aznashwan, Qp0qp0qp0, Grammarindian, Firejuggler86, Alex98, Edwinbubble, Fire2222, Popstheannoying, SpiffyAnarchist, Pan- 136 CHAPTER 6. TEXT AND IMAGE SOURCES, CONTRIBUTORS, AND LICENSES cake2345 and Anonymous: 2639 • Mac OS Source: https://en.wikipedia.org/wiki/Mac_OS?oldid=683929113 Contributors: Damian Yerrick, General Wesc, Brion VIBBER, Ben-Zin~enwiki, Ellmist, Metz2000, Someone else, Hfastedge, Bdesham, Cprompt, Norm, Pnm, Liftarn, Dave Farquhar, Lquilter, Ahoerstemeier, Stan Shebs, Jimfbleak, Typhoon, Plop, Notheruser, Angela, Whkoh, Marksuppes, IMSoP, GRAHAMUK, Feedmecereal, Dysprosia, Fuzheado, Furrykef, Tempshill, Mattworld, Wernher, Nickshanks, Bloodshedder, Jusjih, Drernie, Robbot, Frutoseco~enwiki, Fireball1244, Tomchiukc, RickDikeman, RedWolf, Naddy, Lowellian, Chris Roy, Polonius, Bkell, Profoss, Mushroom, Supapuerco, Cyrius, David Gerard, Mkhadpe, DocWatson42, MaGioZal, Philwelch, Flimsyq, Quinn Laforet, Lupin, Brian Kendig, Home Row Keysplurge, Rick Block, Sdfisher, Scott Wilson, AlistairMcMillan, Bobblewik, MSTCrow, SarekOfVulcan, Knutux, Kjetil r, Antandrus, GroundedZero, MFNickster, Rattlesnake, Bumm13, Halo, Bk0, Sam Hocevar, Jh51681, Cab88, Muijz, Grm wnr, Chmod007, Heliocentric, Hmmm~enwiki, Grstain, DF08, Jkl, Discospinster, Jpk, Paul August, Gronky, Bender235, Sum0, Kjoonlee, Neko-chan, CanisRufus, Phil [email protected], Tverbeek, Juppiter, Causa sui, NetBot, Matt Keleher, Slicky, Jojit fb, Chuckstar, Boredzo, Eritain, Sukiari, Kx1186, Zetawoof, Minghong, Hagerman, Nsaa, Ehurtley, Hellis, Alansohn, Anthony Appleyard, Guy Harris, CyberSkull, Atlant, Eric Rasmussen, Geke, Pkeogh, Yamla, Ahruman, Rakerman, Njahnke, Wtmitchell, BRW, Stephan Leeds, Evil Monkey, Gortu, Harriseldon, Kitch, Kbolino, Y0u, KUsam, Thryduulf, Poppafuze, Rocastelo, DavidArthur, Deeahbz, Jacobolus, JeremyA, Mms, Frungi, Skybum, Rchamberlain, ThomasHarte, Gniw, Palica, Gerbrant, Marudubshinki, D.Holt, Mandarax, Ilya, Chun-hian, Reisio, Ttjoseph, Pentawing, Ketiltrout, Adjusting, JoshuacUK, UriBudnik, MarnetteD, Dar-Ape, A-rock, FlaBot, SchuminWeb, Arasaka, Flowerparty, RexNL, ApprenticeFan, Stormwatch, DannyDaWriter, Krun, Chairlunchdinner, Psantora, Chobot, Kjammer, Bgwhite, Hall Monitor, Skoosh, Gwernol, YurikBot, SuperBleda, Eraserhead1, MacManX, Hairy Dude, Charles Gaudette, Bdude, Arado, Sotomura, LordBleen, Gateman1997, Hydrargyrum, GPS Pilot, Gaius Cornelius, CambridgeBayWeather, Pseudomonas, Akhristov, Wimt, Ebow, NawlinWiki, SEWilcoBot, Mipadi, Msikma, Trademarx, JoeBruno, Sebastian406, Groink, Smaines, GraemeL, Andyluciano~enwiki, HereToHelp, Yaco, ViperSnake151, Destin, One, Borisbaran, Cranialsodomy, SmackBot, Down10, Ashill, Brian Patrie, Hydrogen Iodide, Wcquidditch, Duke53, Nmulder, Thecapitalizt, Jab843, Gilliam, Skizzik, Peter T.S., Chris the speller, Headwes, James Fryer, Mdwh, Lexlex, DHN-bot~enwiki, Impfac, Manhinli~enwiki, Amdma2003, UNV, Dethme0w, Frap, Alphathon, OrphanBot, JonHarder, Maurice45, Emre D., JR98664, Corby, Warren, Uliwitness, Jameshales, Salamurai, General Ization, Darepublican001, Thomas Gilling, Ivucica, MrMPS, Flibble, Mattabat, Sharcho, Glen Pepicelli, Iridescent, JHP, Sam Li, Courcelles, Tawkerbot2, Alegoo92, Thepreacher, Lnatan25, Locust43, Matthaeus123, Lhasapso, DevinCook, Drinibot, Mmiller~enwiki, ChristTrekker, Gogo Dodo, Corpx, Quibik, Omicronpersei8, DJBullfish, Epbr123, I do not exist, E. Ripley, Kaaveh Ahangar~enwiki, Pfranson, Dawnseeker2000, Escarbot, Dainis, I already forgot, Applemeister, AntiVandalBot, RobotG, Edokter, Mk*, Ozgod, Leuqarte, MikeLynch, JAnDbot, CombatWombat42, MER-C, Savant13, Newfoundlander, Bongwarrior, VoABot II, Charliesome, Michaeldim, Bequw, Kevinmon, N0dih, Alanbrowne, Inhumandecency, JaGa, Limtohhan, Jolenine, Gimpy530, MartinBot, HubmaN, Mustangwill, Rettetast, SuperMarioMan, Doc aberdeen, R'n'B, CommonsDelinker, PrestonH, Tgeairn, J.delanoy, ISC PB, Numbo3, Rhinestone K, Harry Fender, Little Professor, Djcederberg, Potatoswatter, Guyzero, RVJ, Wikieditor06, Johnshew316, VolkovBot, Numberp, Rhtc, Memex, TXiKiBoT, Joejoejo, ElinorD, Anna Lincoln, Wiikipedian, DennyColt, Jdtyler, LeaveSleaves, Cremepuff222, WinTakeAll, Ianjones50, Haseo9999, Synthebot, Falcon8765, Burntsauce, Typ932, Laval, NHRHS2010, EmxBot, Macintosh backup, Vodak, SieBot, Tiddly Tom, Josh the Nerd, Rockstone35, Dawn Bard, Yintan, Infodriveway, Mr.Z-bot, Keilana, Jimthing, SuperSpy00bob, RW Marloe, Iknowyourider, Owlmonkey, Tyson11, Denisarona, VanishedUser sdu9aya9fs787sads, Martarius, ClueBot, Avenged Eightfold, Wikievil666, Vikily, Quinxorin, Czarkoff, Frmorrison, Iuhkjhk87y678, Blanchardb, Oskilla, Lame Name, Rob Bednark, Kikii121, Vivio Testarossa, MacJoey, Razorflame, Zxcsde, Andy16666, Mac128, Stevenrasnick, DumZiBoT, XLinkBot, Fede.Campana, Petchboo, WikHead, ErkinBatu, Alexius08, Airplaneman, Addbot, Cxz111, Ghettoblaster, Jojhutton, Fyrael, Fluffernutter, Therestreacheryafoot, MrOllie, Tech30, Favonian, Numbo3-bot, Borisich, Missingno255, Lightbot, Jarble, רנדום, Narutolovehinata5, Kyro, JerryCS, Luckasbot, Yobot, 2D, TaBOT-zerem, AnomieBOT, Rubinbot, 1exec1, Sneaksy, Jim1138, Dwayne, Osxshortcuts, Andrewdunkcool, The High Fin Sperm Whale, Neurolysis, DirlBot, Xqbot, Capricorn42, Jeffrey Mall, Nasnema, Traceyjonas, Jeffwang, Jsharpminor, Keplik, Miym, Nasa-verve, GrouchoBot, Axendra, Rsmn, Mark Schierbecker, Ua hockey, A.amitkumar, FreeKnowledgeCreator, MTMT76, FrescoBot, Surv1v4l1st, D'ohBot, DivineAlpha, Redrose64, Spaceba11One-x, Unmotivate, I dream of horses, Recipe For Hate, Collinsakala, Smuckola, JohnHWiki, JPChatfield124, Andrius.kvaraciejus, Jauhienij, Crusoe8181, AgentB1, TobeBot, Vrenator, Reaper Eternal, Diannaa, Ian.bjorn, Tbhotch, Reach Out to the Truth, Onel5969, Bento00, Darkyeffectt, Thedavidruk, Rollins83, EmausBot, Cheenar, Alfstar1997, MatiasSingers, Beanygirl80, Tommy2010, LasquetiRonnie, IEB12345, AsceticRose, Almighty zod, Caseybutt, Redblue420, GoldRenet, Lv 2010, Doddy Wuid, NicatronTg, Dd9119, Jalapenoman321, Ja-BEN-Min, JimEOme, Jamvanderloeff, Jwelsh7, Monterey Bay, DrSauron, Peterh5322, L Kensington, Shyle screaming, Heater123, Elaz85, ChuispastonBot, Jona612, Czeror, DASHBotAV, ClueBot NG, Zyrath, Christopher1999, Bped1985, Corydor13, Ryanvanasse, Dodhead, Hi135792468, ScottSteiner, Widr, Blightyguy1994, Ryan Vesey, Hlm Z., Greenhawk420, Implyer, Helpful Pixie Bot, Johnny C. Morse, Danicool, Wbm1058, Lowercase sigmabot, BG19bot, Ragnoth, Msaunier, MusikAnimal, AvocatoBot, Wikiman3279, Cadiomals, Zach Vega, Killgore975, Snow Blizzard, Hikitty415, Alex.sti, Klilidiplomus, Yasht101, Joshuabarker, Pratyya Ghosh, Danny0000d, The Illusive Man, MattHPG, Codename Lisa, Webclient101, Mogism, 331dot, Rolandhelper, Cerabot~enwiki, AleksanderVatov, Sbvsion, Jc86035, Zziccardi, Google9999, Skinnywomanbull, Mcioffi, Fsandlinux, Weiglert, Comp.arch, Syncmaster913n, Alexnpika, D Eaketts, Sarabveer, Vladislav Voskubenko, Casey convol, JaconaFrere, GravyButter, 7Sidz, Hkcoms, Thetrollface3, Qwertyxp2000, OMPIRE, Amortias, Orangeandrew000, IllU nadoes, Jonnyw123, Cjshiley, Aytk, StewdioMACK, MdcEvans02, Eellsworth34, Myschoolsucks123, W3gnkolii, BatWookie, KasparBot, Mily3608, Lyon812345, Edx, Proud User, IRyan23 and Anonymous: 630 6.2 Images • File:100_000-files_5-bytes_each_--_400_megs_of_slack_space.png Source: https://upload.wikimedia.org/wikipedia/commons/9/9a/ 100_000-files_5-bytes_each_--_400_megs_of_slack_space.png License: CC BY-SA 3.0 Contributors: Own work Original artist: DMahalko • File:Ambox_important.svg Source: https://upload.wikimedia.org/wikipedia/commons/b/b4/Ambox_important.svg License: Public domain Contributors: Own work, based off of Image:Ambox scales.svg Original artist: Dsmurat (talk · contribs) • File:Android_4.2_on_the_Nexus_4.png Source: License: ? Contributors: https://upload.wikimedia.org/wikipedia/en/a/af/Android_4.2_on_the_Nexus_4.png http://images.derstandard.at/2012/11/29/1353250019206.png Original artist: Google 6.2. IMAGES 137 • File:Apple_Macintosh_Desktop.png Source: https://upload.wikimedia.org/wikipedia/en/5/50/Apple_Macintosh_Desktop.png License: ? Contributors: unknown Original artist: ? • File:Apple_Unix_with_Netscape.jpg Source: https://upload.wikimedia.org/wikipedia/en/9/93/Apple_Unix_with_Netscape.jpg License: ? Contributors: Taken by me on a Quadra 650 running A/UX 3.0.1. Original artist: ? • File:Bash_demo.png Source: https://upload.wikimedia.org/wikipedia/commons/8/84/Bash_demo.png License: GPL Contributors: Own work Original artist: Chealer • File:Bash_screenshot.png Source: https://upload.wikimedia.org/wikipedia/commons/e/e7/Bash_screenshot.png License: GPL Contributors: Wikimedia Foundation Original artist: Emx • File:Bus_icon.svg Source: https://upload.wikimedia.org/wikipedia/commons/c/ca/Bus_icon.svg License: Public domain Contributors: ? Original artist: ? • File:COMMAND_LINE.svg Source: https://upload.wikimedia.org/wikipedia/en/8/8a/COMMAND_LINE.svg License: CC-BY-SA-3.0 Contributors: I (Wtshymanski (talk)) created this work entirely by myself. Original artist: Wtshymanski (talk) • File:CPM-86.png Source: https://upload.wikimedia.org/wikipedia/en/2/26/CPM-86.png License: ? Contributors: Taken from http://www.hampa.ch/pce/screenshots/index.html Original artist: ? • File:CP⁄M_Ad,_Dec_11,_1978.png Source: https://upload.wikimedia.org/wikipedia/commons/1/12/CP%E2%81%84M_ Ad%2C_Dec_11%2C_1978.png License: Public domain Contributors: Scanned from the December 11, 1978 <a href='//en.wikipedia.org/wiki/InfoWorld' class='extiw' title='wikipedia:InfoWorld'>InfoWorld</a> magazine Original artist: Digital Research • File:CP⁄M_Ad,_InfoWorld,_November_29,_1982.jpg Source: https://upload.wikimedia.org/wikipedia/commons/0/03/CP%E2%81% 84M_Ad%2C_InfoWorld%2C_November_29%2C_1982.jpg License: Public domain Contributors: Scanned from the November 29, 1982 <a href='//en.wikipedia.org/wiki/InfoWorld' class='extiw' title='wikipedia:InfoWorld'>InfoWorld</a> magazine Original artist: Digital Research • File:Cmus-aamode.png Source: https://upload.wikimedia.org/wikipedia/commons/9/98/Cmus-aamode.png License: GPL Contributors: [1], selfmade screenshot Original artist: Efftee • File:Command_line.png Source: https://upload.wikimedia.org/wikipedia/commons/a/aa/Command_line.png License: GPL Contributors: Own work Original artist: The GNU Dev team, and the Arch Linux Dev team (for the Pacman command in the example) • File:Commons-logo.svg Source: https://upload.wikimedia.org/wikipedia/en/4/4a/Commons-logo.svg License: ? Contributors: ? Original artist: ? • File:Complex-adaptive-system.jpg Source: https://upload.wikimedia.org/wikipedia/commons/0/00/Complex-adaptive-system.jpg License: Public domain Contributors: Own work by Acadac : Taken from en.wikipedia.org, where Acadac was inspired to create this graphic after reading: Original artist: Acadac • File:Computer-aj_aj_ashton_01.svg Source: https://upload.wikimedia.org/wikipedia/commons/c/c1/Computer-aj_aj_ashton_01.svg License: CC0 Contributors: ? Original artist: ? • File:Desktop-Linux-Mint.png Source: https://upload.wikimedia.org/wikipedia/commons/4/41/Desktop-Linux-Mint.png License: CC BY-SA 4.0 Contributors: Own work Original artist: Benjamintf1 • File:Dir_command_in_Windows_Command_Prompt.png Source: https://upload.wikimedia.org/wikipedia/commons/1/10/Dir_ command_in_Windows_Command_Prompt.png License: Public domain Contributors: Screenshot of a Microsoft Windows command shell directory listing Original artist: Loadmaster (David R. Tribble) • File:Dolphin_FileManager.png Source: https://upload.wikimedia.org/wikipedia/commons/5/51/Dolphin_FileManager.png License: GPL Contributors: http://www.kde.org/applications/system/dolphin/ Original artist: KDE • File:Edit-clear.svg Source: https://upload.wikimedia.org/wikipedia/en/f/f2/Edit-clear.svg License: Public domain Contributors: The Tango! Desktop Project. Original artist: The people from the Tango! project. And according to the meta-data in the file, specifically: “Andreas Nilsson, and Jakub Steiner (although minimally).” • File:External_Fragmentation.svg Source: https://upload.wikimedia.org/wikipedia/commons/4/4a/External_Fragmentation.svg License: CC0 Contributors: Own work Original artist: Hjasud • File:Fdedit.png Source: https://upload.wikimedia.org/wikipedia/commons/c/c5/Fdedit.png License: GPL Contributors: Transferred from en.wikipedia to Commons. Original artist: The original uploader was NTOSKRNL VXE at English Wikipedia Later versions were uploaded by Intgr at en.wikipedia. • File:First_Web_Server.jpg Source: https://upload.wikimedia.org/wikipedia/commons/d/d1/First_Web_Server.jpg License: CC-BYSA-3.0 Contributors: Own work Original artist: User:Coolcaesar at en.wikipedia • File:Folder_Hexagonal_Icon.svg Source: https://upload.wikimedia.org/wikipedia/en/4/48/Folder_Hexagonal_Icon.svg License: Cc-bysa-3.0 Contributors: ? Original artist: ? • File:Free_Software_Portal_Logo.svg Source: https://upload.wikimedia.org/wikipedia/commons/6/67/Nuvola_apps_emacs_vector.svg License: LGPL Contributors: • Nuvola_apps_emacs.png Original artist: Nuvola_apps_emacs.png: David Vignoni 138 CHAPTER 6. TEXT AND IMAGE SOURCES, CONTRIBUTORS, AND LICENSES • File:Free_and_open-source-software_display_servers_and_UI_toolkits.svg Source: https://upload.wikimedia.org/wikipedia/ commons/7/7b/Free_and_open-source-software_display_servers_and_UI_toolkits.svg License: CC BY-SA 3.0 Contributors: Own work Original artist: ScotXW • File:Green_bug_and_broom.svg Source: https://upload.wikimedia.org/wikipedia/commons/8/83/Green_bug_and_broom.svg License: LGPL Contributors: File:Broom icon.svg, file:Green_bug.svg Original artist: Poznaniak, pozostali autorzy w plikach źródłowych • File:IBM360-65-1.corestore.jpg Source: https://upload.wikimedia.org/wikipedia/commons/6/6a/IBM360-65-1.corestore.jpg License: CC-BY-SA-3.0 Contributors: Transferred from en.wikipedia to Commons. Original artist: The original uploader was ArnoldReinhold at English Wikipedia • File:Internet_map_1024.jpg Source: https://upload.wikimedia.org/wikipedia/commons/d/d2/Internet_map_1024.jpg License: CC BY 2.5 Contributors: Originally from the English Wikipedia; description page is/was here. Original artist: The Opte Project • File:Interrupt_Process.PNG Source: https://upload.wikimedia.org/wikipedia/commons/c/cf/Interrupt_Process.PNG License: CC BYSA 3.0 Contributors: Own work Original artist: Stephen Charles Thompson (anon_lynx) • File:Itmouse.png Source: https://upload.wikimedia.org/wikipedia/en/9/95/Itmouse.png License: Fair use Contributors: Screenshot of Impulse Tracker running in Dosbox, scaled to 2x normal size. Original artist: ? • File:Jolla_smartphones.jpg Source: https://upload.wikimedia.org/wikipedia/commons/2/2c/Jolla_smartphones.jpg License: CC BY 2.0 Contributors: Flickr: Jolla smartphone Original artist: pestoverde • File:KDE_4.png Source: https://upload.wikimedia.org/wikipedia/commons/5/54/KDE_4.png License: GPL Contributors: Self-made screenshot Original artist: KDE • File:Kernel_Layout.svg Source: https://upload.wikimedia.org/wikipedia/commons/8/8f/Kernel_Layout.svg License: CC BY-SA 3.0 Contributors: Own work Original artist: Bobbo • File:LAMP_software_bundle.svg Source: https://upload.wikimedia.org/wikipedia/commons/8/82/LAMP_software_bundle.svg License: CC BY-SA 3.0 Contributors: This image includes elements that have been taken or adapted from this: <a href='//commons.wikimedia.org/wiki/File:Tux-shaded.svg' class='image'><img alt='Tux-shaded.svg' src='https://upload. wikimedia.org/wikipedia/commons/thumb/0/0a/Tux-shaded.svg/17px-Tux-shaded.svg.png' width='17' height='20' srcset='https: //upload.wikimedia.org/wikipedia/commons/thumb/0/0a/Tux-shaded.svg/25px-Tux-shaded.svg.png 1.5x, https://upload.wikimedia. org/wikipedia/commons/thumb/0/0a/Tux-shaded.svg/33px-Tux-shaded.svg.png 2x' data-file-width='249' data-file-height='297' /></a> Tux-shaded.svg. Original artist: ScotXW • File:LampFlowchart.svg Source: https://upload.wikimedia.org/wikipedia/commons/9/91/LampFlowchart.svg License: CC-BY-SA-3.0 Contributors: vector version of Image:LampFlowchart.png Original artist: svg by Booyabazooka • File:Linus_Torvalds_(cropped).jpg Source: https://upload.wikimedia.org/wikipedia/commons/5/5c/Linus_Torvalds_%28cropped% 29.jpg License: CC-BY-SA-3.0 Contributors: • Linus_Torvalds.jpeg Original artist: • derivative work: thumperward Thumperward'>talk</a>) (<a href='//commons.wikimedia.org/wiki/User_talk:Thumperward' title='User talk: • File:Linux-menuconfig.png Source: https://upload.wikimedia.org/wikipedia/commons/2/27/Linux-menuconfig.png License: CC BYSA 3.0 Contributors: Own work Original artist: Attys • File:LinuxWasch3.jpg Source: https://upload.wikimedia.org/wikipedia/commons/5/50/LinuxWasch3.jpg License: Public domain Contributors: Self-photographed Original artist: StromBer • File:Linux_0_12.jpg Source: https://upload.wikimedia.org/wikipedia/commons/e/ee/Linux_0_12.jpg License: CC BY-SA 3.0 Contributors: Transferred from en.wikipedia; transferred to Commons by User:Liftarn using CommonsHelper. Original artist: Shermozle (talk). Original uploader was Shermozle at en.wikipedia • File:Linux_command-line._Bash._GNOME_Terminal._screenshot.png Source: https://upload.wikimedia.org/wikipedia/commons/ 2/29/Linux_command-line._Bash._GNOME_Terminal._screenshot.png License: GPL Contributors: Own work Original artist: ZxxZxxZ • File:Linux_kernel_INPUT_OUPUT_evdev_gem_USB_framebuffer.svg Source: https://upload.wikimedia.org/wikipedia/commons/ a/a1/Linux_kernel_INPUT_OUPUT_evdev_gem_USB_framebuffer.svg License: CC BY-SA 3.0 Contributors: Own work Original artist: ScotXW • File:Linux_kernel_ubiquity.svg Source: https://upload.wikimedia.org/wikipedia/commons/3/3a/Linux_kernel_ubiquity.svg License: CC BY-SA 3.0 Contributors: This image includes elements that have been taken or adapted from this: <a href='//commons.wikimedia. org/wiki/File:Tux-shaded.svg' class='image'><img alt='Tux-shaded.svg' src='https://upload.wikimedia.org/wikipedia/commons/thumb/0/ 0a/Tux-shaded.svg/17px-Tux-shaded.svg.png' width='17' height='20' srcset='https://upload.wikimedia.org/wikipedia/commons/thumb/ 0/0a/Tux-shaded.svg/25px-Tux-shaded.svg.png 1.5x, https://upload.wikimedia.org/wikipedia/commons/thumb/0/0a/Tux-shaded.svg/ 33px-Tux-shaded.svg.png 2x' data-file-width='249' data-file-height='297' /></a> Tux-shaded.svg. Original artist: ScotXW • File:Loudspeaker.svg Source: https://upload.wikimedia.org/wikipedia/commons/8/8a/Loudspeaker.svg License: Public domain Contributors: New version of Image:Loudspeaker.png, by AzaToth and compressed by Hautala Original artist: Nethac DIU, waves corrected by Zoid • File:M_box.svg Source: https://upload.wikimedia.org/wikipedia/commons/9/94/M_box.svg License: Public domain Contributors: Own work based on: File:Microsoft.svg Original artist: Ariesk47 (<a href='//commons.wikimedia.org/wiki/User_talk:Ariesk47' title='User talk:Ariesk47'>talk</a>) • File:Mac_OSX_Lion_screen.png Source: https://upload.wikimedia.org/wikipedia/en/8/80/Mac_OSX_Lion_screen.png License: Fair use Contributors: Screenshot Original artist: ? 6.2. IMAGES • File:Macintosh_128k_transparency.png Source: transparency.png License: CC-BY-SA-3.0 Contributors: 128k No Text.jpg Original artist: w:User:Grm wnr 139 https://upload.wikimedia.org/wikipedia/commons/e/e3/Macintosh_128k_ Modifications of Image:Macintosh 128k.jpg and w:Image:Macintosh • File:Matlab7.4.png Source: https://upload.wikimedia.org/wikipedia/en/2/25/Matlab7.4.png License: ? Contributors: This is a screenshot taken from an optical disc, television broadcast, web page, computer software or streaming media broadcast. Copyright holder: MathWorks Original artist: ? • File:Mergefrom.svg Source: https://upload.wikimedia.org/wikipedia/commons/0/0f/Mergefrom.svg License: Public domain Contributors: ? Original artist: ? • File:MicroVGA_TUI_demoapp.jpg Source: https://upload.wikimedia.org/wikipedia/commons/a/a1/MicroVGA_TUI_demoapp.jpg License: CC-BY-SA-3.0 Contributors: Digital camera :-) Original artist: Martin Hinner • File:Midnight_Commander_(2005)_en.png Source: https://upload.wikimedia.org/wikipedia/commons/b/b8/Midnight_Commander_ %282005%29_en.png License: GPL Contributors: ? Original artist: ? • File:Msdosad.jpg Source: https://upload.wikimedia.org/wikipedia/en/1/1a/Msdosad.jpg License: ? Contributors: ftp.microsoft.com Original artist: ? • File:My_green_Nokia_X_(13582469484).jpg Source: https://upload.wikimedia.org/wikipedia/commons/1/1a/My_green_Nokia_X_ %2813582469484%29.jpg License: CC BY 2.0 Contributors: My green Nokia X Original artist: Vee Satayamas from Rayong, Thailand • File:NewTux.svg Source: https://upload.wikimedia.org/wikipedia/commons/b/b0/NewTux.svg License: Attribution Contributors: Based on original image by Larry Ewing, created using Sodipodi Original artist: gg3po (kde-look.org source) • File:Nexus_5_(1).jpg Source: https://upload.wikimedia.org/wikipedia/commons/e/ed/Nexus_5_%281%29.jpg License: CC BY 2.0 Contributors: http://www.flickr.com/photos/lge/10600449773/ Original artist: LG • File:Nuvola_apps_ksim.png Source: https://upload.wikimedia.org/wikipedia/commons/8/8d/Nuvola_apps_ksim.png License: LGPL Contributors: http://icon-king.com Original artist: David Vignoni / ICON KING • File:OS_X_El_Capitan_logo.svg Source: https://upload.wikimedia.org/wikipedia/commons/b/bb/OS_X_El_Capitan_logo.svg License: Public domain Contributors: http://www.apple.com/osx/elcapitan-preview/ Original artist: Apple Inc. • File:Open_book_nae_02.svg Source: https://upload.wikimedia.org/wikipedia/commons/9/92/Open_book_nae_02.svg License: CC0 Contributors: OpenClipart Original artist: nae • File:PC_DOS_1.10_screenshot.png Source: https://upload.wikimedia.org/wikipedia/commons/f/f9/PC_DOS_1.10_screenshot.png License: Public domain Contributors: Originally uploaded as “PC DOS Command Window.gif” on 21 May 2006 by Alexzero77. This new version is in the PNG format and is exactly the same quality as the original but with a smaller file size. Transferred from en.wikipedia to Commons by User:Leyo using CommonsHelper. Original artist: Remember the dot at en.wikipedia (PNG) • File:People_icon.svg Source: https://upload.wikimedia.org/wikipedia/commons/3/37/People_icon.svg License: CC0 Contributors: OpenClipart Original artist: OpenClipart • File:Phablet.jpg Source: https://upload.wikimedia.org/wikipedia/en/e/e0/Phablet.jpg License: CC-BY-2.5 Contributors: Android Original artist: Google • File:Portal-puzzle.svg Source: https://upload.wikimedia.org/wikipedia/en/f/fd/Portal-puzzle.svg License: Public domain Contributors: ? Original artist: ? • File:Priv_rings.svg Source: https://upload.wikimedia.org/wikipedia/commons/2/2f/Priv_rings.svg License: CC-BY-SA-3.0 Contributors: Transferred from en.wikipedia to Commons. Original artist: Hertzsprung at English Wikipedia • File:Question_book-new.svg Source: https://upload.wikimedia.org/wikipedia/en/9/99/Question_book-new.svg License: Cc-by-sa-3.0 Contributors: Created from scratch in Adobe Illustrator. Based on Image:Question book.png created by User:Equazcion Original artist: Tkgd2007 • File:Schema_of_the_layers_of_the_graphical_user_interface.svg Source: https://upload.wikimedia.org/wikipedia/commons/9/95/ Schema_of_the_layers_of_the_graphical_user_interface.svg License: CC BY-SA 3.0 Contributors: Own work Original artist: ScotXW • File:Screen_Shot_2015-06-10_at_11.12.34.png Source: https://upload.wikimedia.org/wikipedia/en/0/06/Screen_Shot_2015-06-10_ at_11.12.34.png License: Fair use Contributors: http://www.apple.com/osx/elcapitan-preview/ Original artist: Apple Inc. • File:Speakerlink-new.svg Source: https://upload.wikimedia.org/wikipedia/commons/3/3b/Speakerlink-new.svg License: CC0 Contributors: Own work Original artist: Kelvinsong • File:StartingMsdos.png Source: https://upload.wikimedia.org/wikipedia/commons/b/b6/StartingMsdos.png License: Public domain Contributors: Transferred from en.wikipedia to Commons by Codename Lisa. Original artist: The original uploader was Andrewpmk at English Wikipedia • File:Symbol_book_class2.svg Source: https://upload.wikimedia.org/wikipedia/commons/8/89/Symbol_book_class2.svg License: CC BY-SA 2.5 Contributors: Mad by Lokal_Profil by combining: Original artist: Lokal_Profil • File:Symbol_list_class.svg Source: https://upload.wikimedia.org/wikipedia/en/d/db/Symbol_list_class.svg License: Public domain Contributors: ? Original artist: ? • File:Symbol_neutral_vote.svg Source: https://upload.wikimedia.org/wikipedia/en/8/89/Symbol_neutral_vote.svg License: Public domain Contributors: ? Original artist: ? • File:Synchronet.png Source: https://upload.wikimedia.org/wikipedia/en/f/f1/Synchronet.png License: Public domain Contributors: ? Original artist: ? 140 CHAPTER 6. TEXT AND IMAGE SOURCES, CONTRIBUTORS, AND LICENSES • File:Tesla_Model_S_digital_panels.jpg Source: https://upload.wikimedia.org/wikipedia/commons/a/a3/Tesla_Model_S_digital_ panels.jpg License: CC BY 2.0 Contributors: http://www.flickr.com/photos/jurvetson/7408464122/in/photostream/ Original artist: jurvetson (Steve Jurvetson) • File:Text_document_with_red_question_mark.svg Source: https://upload.wikimedia.org/wikipedia/commons/a/a4/Text_document_ with_red_question_mark.svg License: Public domain Contributors: Created by bdesham with Inkscape; based upon Text-x-generic.svg from the Tango project. Original artist: Benjamin D. Esham (bdesham) • File:Tux.svg Source: https://upload.wikimedia.org/wikipedia/commons/3/35/Tux.svg License: Attribution Contributors: [1] Original artist: Larry Ewing, Simon Budig, Anja Gerwinski • File:US_Navy_110129-N-7676W-152_Culinary_Specialist_3rd_Class_John_Smith_uses_the_existing_DOS-based_food_ service_management_system_aboard_the_aircraft.jpg Source: https://upload.wikimedia.org/wikipedia/commons/f/f9/US_Navy_ 110129-N-7676W-152_Culinary_Specialist_3rd_Class_John_Smith_uses_the_existing_DOS-based_food_service_management_ system_aboard_the_aircraft.jpg License: Public domain Contributors: This Image was released by the United States Navy with the ID 110129-N-7676W-152 <a class='external text' href='//commons.wikimedia. org/w/index.php?title=Category:Files_created_by_the_United_States_Navy_with_known_IDs,<span>,&,</span>,filefrom=110129-N7676W-152#mw-category-media'>(next)</a>. This tag does not indicate the copyright status of the attached work. A normal copyright tag is still required. See Commons:Licensing for more information. Original artist: U.S. Navy photo by John F. Williams • File:Ubuntu_12.04_Final_Live_CD_Screenshot.png Source: https://upload.wikimedia.org/wikipedia/commons/b/b9/Ubuntu_12.04_ Final_Live_CD_Screenshot.png License: GPL Contributors: Live CD screenshot Original artist: Canonical Ltd • File:Ubuntu_15.04.png Source: https://upload.wikimedia.org/wikipedia/commons/4/4d/Ubuntu_15.04.png License: CC BY-SA 3.0 Contributors: Screenshot Original artist: Cjbayliss • File:Unix_timeline.en.svg Source: https://upload.wikimedia.org/wikipedia/commons/c/cd/Unix_timeline.en.svg License: Public domain Contributors: Original image: Image:Unix.png Original artist: Guillem, Wereon, Hotmocha (copied from old version's history) • File:Virtual_memory.svg Source: https://upload.wikimedia.org/wikipedia/commons/6/6e/Virtual_memory.svg License: CC BY-SA 3.0 Contributors: Own work Original artist: Ehamberg • File:Visicalc.png Source: https://upload.wikimedia.org/wikipedia/commons/7/7a/Visicalc.png License: Public domain Contributors: apple2history.org Original artist: User:Gortu • File:Wiki_letter_w_cropped.svg Source: https://upload.wikimedia.org/wikipedia/commons/1/1c/Wiki_letter_w_cropped.svg License: CC-BY-SA-3.0 Contributors: • Wiki_letter_w.svg Original artist: Wiki_letter_w.svg: Jarkko Piiroinen • File:Wikibooks-logo-en-noslogan.svg Source: https://upload.wikimedia.org/wikipedia/commons/d/df/Wikibooks-logo-en-noslogan. svg License: CC BY-SA 3.0 Contributors: Own work Original artist: User:Bastique, User:Ramac et al. • File:Wikibooks-logo.svg Source: https://upload.wikimedia.org/wikipedia/commons/f/fa/Wikibooks-logo.svg License: CC BY-SA 3.0 Contributors: Own work Original artist: User:Bastique, User:Ramac et al. • File:Wikinews-logo.svg Source: https://upload.wikimedia.org/wikipedia/commons/2/24/Wikinews-logo.svg License: CC BY-SA 3.0 Contributors: This is a cropped version of Image:Wikinews-logo-en.png. Original artist: Vectorized by Simon 01:05, 2 August 2006 (UTC) Updated by Time3000 17 April 2007 to use official Wikinews colours and appear correctly on dark backgrounds. Originally uploaded by Simon. • File:Wikiquote-logo.svg Source: https://upload.wikimedia.org/wikipedia/commons/f/fa/Wikiquote-logo.svg License: Public domain Contributors: ? Original artist: ? • File:Wikisource-logo.svg Source: https://upload.wikimedia.org/wikipedia/commons/4/4c/Wikisource-logo.svg License: CC BY-SA 3.0 Contributors: Rei-artur Original artist: Nicholas Moreau • File:Wikiversity-logo-Snorky.svg Source: https://upload.wikimedia.org/wikipedia/commons/1/1b/Wikiversity-logo-en.svg License: CC BY-SA 3.0 Contributors: Own work Original artist: Snorky • File:Wikiversity-logo.svg Source: https://upload.wikimedia.org/wikipedia/commons/9/91/Wikiversity-logo.svg License: CC BY-SA 3.0 Contributors: Snorky (optimized and cleaned up by verdy_p) Original artist: Snorky (optimized and cleaned up by verdy_p) • File:Wiktionary-logo-en.svg Source: https://upload.wikimedia.org/wikipedia/commons/f/f8/Wiktionary-logo-en.svg License: Public domain Contributors: Vector version of Image:Wiktionary-logo-en.png. Original artist: Vectorized by Fvasconcellos (talk · contribs), based on original logo tossed together by Brion Vibber • File:Windows1.0.png Source: https://upload.wikimedia.org/wikipedia/en/4/4e/Windows1.0.png License: ? Contributors: Screenshot taken and uploaded by Remember the dot (talk · contribs) Original artist: ? • File:WindowsCE7.png Source: https://upload.wikimedia.org/wikipedia/en/b/bc/WindowsCE7.png License: ? Contributors: Microsoft Press Pass website URL of Source Original artist: ? • File:Windows_10_build_10240_(RTM).png Source: https://upload.wikimedia.org/wikipedia/en/4/43/Windows_10_build_10240_ %28RTM%29.png License: Fair use Contributors: Self Original artist: Microsoft • File:Windows_3.0_workspace.png Source: https://upload.wikimedia.org/wikipedia/en/1/15/Windows_3.0_workspace.png License: ? Contributors: Screenshot is taken and uploaded by Tyomitch (talk · contribs) Original artist: ? • File:Windows_PowerShell_1.0_PD.png Source: https://upload.wikimedia.org/wikipedia/commons/d/d5/Windows_PowerShell_1.0_ PD.png License: Public domain Contributors: Screenshot taken by User:Ghettoblaster from en.wikipedia Original artist: Microsoft Corporation 6.3. CONTENT LICENSE 141 • File:Windows_Updated_Family_Tree.png Source: https://upload.wikimedia.org/wikipedia/commons/6/6d/Windows_Updated_ Family_Tree.png License: CC BY-SA 3.0 Contributors: Own work Made with CorelDraw 16. I tried saving in .SVG but it always showed bugs when rendering in Wikimedia. Original artist: Kristiyan Bogdanov • File:Windows_logo_-_2012.svg Source: https://upload.wikimedia.org/wikipedia/commons/5/5f/Windows_logo_-_2012.svg License: Public domain Contributors: This file was derived from Windows 8 logo and wordmark.svg: <a href='//commons.wikimedia.org/wiki/File: Windows_8_logo_and_wordmark.svg' class='image'><img alt='Windows 8 logo and wordmark.svg' src='https://upload.wikimedia. org/wikipedia/commons/thumb/f/fe/Windows_8_logo_and_wordmark.svg/131px-Windows_8_logo_and_wordmark.svg.png' width='131' height='25' srcset='https://upload.wikimedia.org/wikipedia/commons/thumb/f/fe/Windows_8_logo_and_wordmark. svg/199px-Windows_8_logo_and_wordmark.svg.png 1.5x, https://upload.wikimedia.org/wikipedia/commons/thumb/f/fe/Windows_8_ logo_and_wordmark.svg/261px-Windows_8_logo_and_wordmark.svg.png 2x' data-file-width='459' data-file-height='88' /></a> Original artist: File:Windows 8 logo and wordmark.svg: Multiple editors; see image description page • File:Windows_logo_and_wordmark_-_2015.svg Source: https://upload.wikimedia.org/wikipedia/en/6/61/Windows_logo_ Fair use Contributors: <a href='//en.wikipedia.org/wiki/File:Windows10Logo.png' and_wordmark_-_2015.svg License: class='image'><img alt='Windows10Logo.png' src='//upload.wikimedia.org/wikipedia/commons/thumb/a/a3/Windows10Logo.png/ 220px-Windows10Logo.png' width='220' height='40' class='thumbimage' srcset='//upload.wikimedia.org/wikipedia/commons/thumb/a/ a3/Windows10Logo.png/330px-Windows10Logo.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/a/a3/Windows10Logo. png/440px-Windows10Logo.png 2x' data-file-width='479' data-file-height='88' /></a> Original artist: Microsoft Corporation • File:X-Window-System.png Source: https://upload.wikimedia.org/wikipedia/commons/d/d4/X-Window-System.png License: MIT Contributors: Liberal Classic Original artist: Liberal Classic • File:XFdrake.png Source: https://upload.wikimedia.org/wikipedia/en/2/25/XFdrake.png License: Public domain Contributors: ? Original artist: ? • File:Xerox_Alto.jpg Source: https://upload.wikimedia.org/wikipedia/commons/8/8b/Xerox_Alto.jpg License: CC BY-SA 2.5 Contributors: ? Original artist: ? • File:Xerox_Star_8010_workstations.jpg Source: https://upload.wikimedia.org/wikipedia/en/1/1d/Xerox_Star_8010_workstations.jpg License: Fair use Contributors: Original publication: Digibarn Computer Museum Immediate source: https://commons.wikimedia.org/wiki/File:Xerox_Star_8010_workstation.jpg Original artist: Digibarn Computer Museum 6.3 Content license • Creative Commons Attribution-Share Alike 3.0