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