24
|
1 .TL
|
|
2 \fR\s-6Why\s0\fP
|
|
3 .br
|
|
4 the Unix Philosophy
|
|
5 .br
|
|
6 .vs -4
|
|
7 \fR\s-6(still) matters\s0\fP
|
|
8 .AU
|
|
9 .ft R
|
|
10 .sp 1.2i
|
|
11 .ps 11
|
|
12 markus schnalke <meillo@marmaro.de>
|
|
13
|
|
14
|
|
15 .S "goals of this talk
|
|
16 .I
|
|
17 introduce the Unix Phil
|
|
18 .I
|
|
19 explain why most modern software is crap
|
|
20 .I
|
|
21 explain why the Unix Phil leads to better software
|
|
22 .I
|
|
23 convince you that good software is of matter
|
|
24 .sp 2
|
|
25 .I
|
|
26 make you think
|
|
27
|
|
28
|
|
29 .S "roadmap
|
|
30 .I
|
|
31 Historical background
|
|
32 .I
|
|
33 What is the Unix Philosophy?
|
|
34 .I
|
|
35 The Unix Phil after Gancarz
|
|
36 .I
|
|
37 Discussion on real world examples
|
|
38 .I
|
|
39 The Unix Phil is more than software dev guidelines
|
|
40
|
|
41
|
|
42
|
|
43 .S "me and the UP
|
|
44 .LP
|
|
45 first contact: through the suckless project
|
|
46 .LP
|
|
47 ``cat -v Considered Harmful''
|
|
48 .LP
|
|
49 ``The Unix and the Echo''
|
|
50 .LP
|
|
51 ``The Unix Programming Environment''
|
|
52 .sp 1
|
|
53 .LP
|
|
54 better understanding through digging in the past
|
|
55
|
|
56
|
|
57
|
|
58
|
|
59
|
|
60 .P "historical background
|
|
61
|
|
62
|
|
63
|
|
64
|
|
65 .S "historical background
|
|
66 .I
|
|
67 the late 60s and early 70s
|
|
68 .I
|
|
69 operating systems are complex
|
|
70 .I
|
|
71 MULTICS just failed
|
|
72 .I
|
|
73 Brooks' ``The Mythical Man-Month''
|
|
74 .I
|
|
75 a lot of different hardware
|
|
76 .I
|
|
77 limited computing power
|
|
78 .I
|
|
79 textual input and output (line printers)
|
|
80
|
|
81
|
|
82 .S "everything is a file
|
|
83 .LP
|
|
84 is the(?) basic concept in Unix (and even more in Plan9)
|
|
85 .LP
|
|
86 made simple operating systems possible
|
|
87 .LP
|
|
88 it is not covered by the Unix Phil; the Unix Phil is on a different level
|
|
89 .sp 2
|
|
90 .LP
|
|
91 Unix is mainly two things:
|
|
92 .I
|
|
93 an operating system (system calls)
|
|
94 .I
|
|
95 a toolchest (coreutils)
|
|
96
|
|
97
|
|
98
|
|
99 .P "What is the Unix Phil
|
|
100
|
|
101
|
|
102
|
|
103 .S "What is the Unix Phil *itself*?
|
|
104 .LP
|
|
105 ``The Unix philosophy is a set of cultural norms and philosophical
|
|
106 approaches to developing software based on the experience of
|
|
107 leading developers of the Unix operating system.''
|
|
108 (wikipedia)
|
|
109 .sp 2
|
|
110 .LP
|
|
111 How the inventors of Unix write software.
|
|
112 .LP
|
|
113 Common things of classic Unix tools.
|
|
114 .sp 2
|
|
115 .LP
|
|
116 difficult to define
|
|
117
|
|
118
|
|
119 .S "Unix Phil vs. SW dev processes
|
|
120 .LP
|
|
121 the Unix Phil
|
|
122 .I
|
|
123 much: *what* to program
|
|
124 .I
|
|
125 few: *how* to program
|
|
126
|
|
127 .LP
|
|
128 Software developments processes:
|
|
129 .I
|
|
130 few: *what* to program
|
|
131 .I
|
|
132 much: *how* to program
|
|
133
|
|
134 .sp 2
|
|
135 .LP
|
|
136 Extreme Programming is like the Unix Phil
|
|
137 but with more *how* than *what*,
|
|
138 and with formalisms
|
|
139
|
|
140
|
|
141
|
|
142
|
|
143
|
|
144 .S "What is the Unix Phil?
|
|
145 .I
|
|
146 Doug McIlroy (1978)
|
|
147 .I
|
|
148 Mike Gancarz: ``The Unix Philosophy'' (1994)
|
|
149 .I
|
|
150 Eric S. Raymond: ``The Art of Unix Programming'' (2003)
|
|
151 .sp 2
|
|
152 .I
|
|
153 Richard Gabriel: ``Worse is Better'' (1989)
|
|
154
|
|
155
|
|
156 .S "Doug McIlroy
|
|
157 .LP
|
|
158 This is the Unix philosophy:
|
|
159 .I
|
|
160 Write programs that do one thing and do it well.
|
|
161 .I
|
|
162 Write programs to work together.
|
|
163 .I
|
|
164 Write programs to handle text streams, because that is a universal interface.
|
|
165
|
|
166
|
|
167 .S "Mike Gancarz: ``The Unix Philosophy''
|
|
168 .I
|
|
169 Small is beautiful.
|
|
170 .I
|
|
171 Make each program do one thing well.
|
|
172 .I
|
|
173 Build a prototype as soon as possible.
|
|
174 .I
|
|
175 Choose portability over efficiency.
|
|
176 .I
|
|
177 Store data in flat text files.
|
|
178 .I
|
|
179 Use software leverage to your advantage.
|
|
180 .I
|
|
181 Use shell scripts to increase leverage and portability.
|
|
182 .I
|
|
183 Avoid captive user interfaces.
|
|
184 .I
|
|
185 Make every program a filter.
|
|
186 .sp 1
|
|
187 .LP
|
|
188 plus ten lesser tenets
|
|
189
|
|
190
|
|
191
|
|
192
|
|
193 .P "The Unix Phil after Gancarz
|
|
194
|
|
195 .S "Small is beautiful.
|
|
196 .LP
|
|
197 foo
|
|
198
|
|
199
|
|
200 .S "Make each program do one thing well.
|
|
201 .LP
|
|
202 foo
|
|
203
|
|
204
|
|
205 .S "Build a prototype as soon as possible.
|
|
206 .LP
|
|
207 foo
|
|
208
|
|
209
|
|
210 .S "Choose portability over efficiency.
|
|
211 .LP
|
|
212 foo
|
|
213
|
|
214
|
|
215 .S "Store data in flat text files.
|
|
216 .LP
|
|
217 foo
|
|
218
|
|
219
|
|
220 .S "Use software leverage to your advantage.
|
|
221 .LP
|
|
222 foo
|
|
223
|
|
224
|
|
225 .S "Use shell scripts to increase leverage and portability.
|
|
226 .LP
|
|
227 foo
|
|
228
|
|
229
|
|
230 .S "Avoid captive user interfaces.
|
|
231 .LP
|
|
232 foo
|
|
233
|
|
234
|
|
235 .S "Make every program a filter.
|
|
236 .LP
|
|
237 foo
|
|
238
|
|
239
|
|
240
|
|
241
|
|
242
|
|
243 .P "real world examples
|
|
244
|
|
245
|
|
246 .S "various
|
|
247 .LP
|
|
248 who uses
|
|
249 .CW "grep -R
|
|
250 ?
|
|
251
|
|
252 .sp 1
|
|
253 .LP
|
|
254 .CW "cat -v
|
|
255
|
|
256 .sp 1
|
|
257 .LP
|
|
258 pagers are taken for granted
|
|
259
|
|
260 .sp 1
|
|
261 .LP
|
|
262 what about the readline?
|
|
263
|
|
264
|
|
265
|
|
266 .S "find -printf
|
|
267 .LP
|
|
268 How to reformat the output of find(1) to have ``FILENAME PATH''
|
|
269 instead of ``PATH/FILENAME''?
|
|
270
|
|
271 .LP
|
|
272 the ``easy'' way:
|
|
273 \f(CWfind /dir -printf "%P %h\en"\fP
|
|
274
|
|
275 .LP
|
|
276 the ``good'' way:
|
|
277 .br
|
|
278 .CW "\s-1find /dir | sed 's,\e(.*\e)/\e(.*\e),\e2 \e1,'
|
|
279
|
|
280 .LP
|
|
281 The difference shows off when one wants, for instance,
|
|
282 the path to be manipulated further.
|
|
283
|
|
284
|
|
285 .S "MH / nmh
|
|
286 .LP
|
|
287 a Mail User Agent (MUA)
|
|
288
|
|
289
|
|
290 .S "uzbl
|
|
291 .LP
|
|
292 a web browser that adheres to the Unix Phil
|
|
293
|
|
294
|
|
295
|
|
296
|
|
297
|
|
298 .P "more than software dev guidelines
|
|
299
|
|
300
|
|
301
|
|
302
|
|
303
|
|
304 .P "literature
|
|
305
|
|
306
|
|
307 .S literature
|
|
308 .I
|
|
309 ``\fBText Processing and Typesetting with Unix\fP''
|
|
310 by Barron and Rees
|
|
311 explains everything pretty good (focus on
|
|
312 .CW nroff )
|
|
313 .I
|
|
314 ``\fBHeirloom Documentation Tools Nroff/Troff User's Manual\fP''
|
|
315 by Ossanna, Kernighan, and Ritter
|
|
316 is more a technical reference
|
|
317 .I
|
|
318 Various documents collected on
|
|
319 .CW \s-2http://troff.org\s+2
|
|
320
|
|
321
|
|
322 .S
|
|
323 .LP
|
|
324 this talk was prepared using tools of the Heirloom project:
|
|
325 .CW \s-2http://heirloom.sf.net\s+2
|
|
326 .LP
|
|
327 the slides macros are based on
|
|
328 .br
|
|
329 .CW \s-2http://repo.cat-v.org/troff-slider/\s+2
|
|
330 .sp
|
|
331
|
|
332 .LP
|
|
333 the slides are available on my website
|
|
334 .CW \s-2http://marmaro.de/docs\s+2
|
|
335 and on
|
|
336 .CW \s-2http://ulm.ccc.de/ChaosSeminar/\s+2
|
|
337 .sp
|
|
338
|
|
339 2010-03-08
|