Mercurial > docs > unix-phil
annotate unix-phil.ms @ 3:aebbe3e76f5e
minor rework
author | meillo@marmaro.de |
---|---|
date | Wed, 10 Feb 2010 13:19:04 +0100 |
parents | fbd7baf6a61f |
children | c707b0c5c849 |
rev | line source |
---|---|
2
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
1 .\".if n .pl 1000i |
0 | 2 .de XX |
3 .pl 1v | |
4 .. | |
5 .em XX | |
1 | 6 .\".nr PI 0 |
7 .\".if t .nr PD .5v | |
8 .\".if n .nr PD 1v | |
0 | 9 .nr lu 0 |
10 .de CW | |
11 .nr PQ \\n(.f | |
12 .if t .ft CW | |
13 .ie \\$1 .if n .ul 999 | |
14 .el .if n .ul 1 | |
15 .if t .if !\\$1 \&\\$1\f\\n(PQ\\$2 | |
16 .if n .if \\n(.$=1 \&\\$1 | |
17 .if n .if \\n(.$>1 \&\\$1\c | |
18 .if n .if \\n(.$>1 \&\\$2 | |
19 .. | |
20 .ds [. \ [ | |
21 .ds .] ] | |
1 | 22 .\"---------------------------------------- |
0 | 23 .TL |
24 Why the Unix Philosophy matters | |
25 .AU | |
26 markus schnalke <meillo@marmaro.de> | |
27 .AB | |
1 | 28 .ti \n(.iu |
2
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
29 This paper discusses the importance of the Unix Philosophy in software design. |
0 | 30 Today, few software designers are aware of these concepts, |
3 | 31 and thus most modern software is limited and does not make use of software leverage. |
0 | 32 Knowing and following the tenets of the Unix Philosophy makes software more valuable. |
33 .AE | |
34 | |
2
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
35 .if t .2C |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
36 |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
37 .FS |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
38 .ps -1 |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
39 This paper was prepared for the seminar ``Software Analysis'' at University Ulm. |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
40 Mentor was professor Schweiggert. 2010-02-05 |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
41 .br |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
42 You may get this document from my website |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
43 .CW \s-1http://marmaro.de/docs |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
44 .FE |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
45 |
0 | 46 .NH 1 |
47 Introduction | |
48 .LP | |
49 Building a software is a process from an idea of the purpose of the software | |
3 | 50 to its release. |
0 | 51 No matter \fIhow\fP the process is run, two things are common: |
52 the initial idea and the release. | |
3 | 53 The process inbetween can be of any shape. |
54 The the maintainance work after the release is ignored for the moment. | |
1 | 55 .PP |
0 | 56 The process of building splits mainly in two parts: |
57 the planning of what and how to build, and implementing the plan by writing code. | |
3 | 58 This paper focuses on the planning part \(en the designing of the software. |
59 .PP | |
60 Software design is the plan of how the internals and externals of the software should look like, | |
61 based on the requirements. | |
62 This paper discusses the recommendations of the Unix Philosphy about software design. | |
63 .PP | |
64 The here discussed ideas can get applied by any development process. | |
65 The Unix Philosphy does recommend how the software development process should look like, | |
66 but this shall not be of matter here. | |
0 | 67 Similar, the question of how to write the code is out of focus. |
1 | 68 .PP |
3 | 69 The name ``Unix Philosophy'' was already mentioned several times, but it was not explained yet. |
1 | 70 The Unix Philosophy is the essence of how the Unix operating system and its toolchest was designed. |
3 | 71 It is no limited set of rules, but what people see to be common to typical Unix software. |
1 | 72 Several people stated their view on the Unix Philosophy. |
73 Best known are: | |
74 .IP \(bu | |
75 Doug McIlroy's summary: ``Write programs that do one thing and do it well.'' | |
76 .[ | |
77 %A M. D. McIlroy | |
78 %A E. N. Pinson | |
79 %A B. A. Taque | |
80 %T UNIX Time-Sharing System Forward | |
81 %J The Bell System Technical Journal | |
82 %D 1978 | |
83 %V 57 | |
84 %N 6 | |
85 %P 1902 | |
86 .] | |
87 .IP \(bu | |
88 Mike Gancarz' book ``The UNIX Philosophy''. | |
89 .[ | |
90 %A Mike Gancarz | |
91 %T The UNIX Philosophy | |
92 %D 1995 | |
93 %I Digital Press | |
94 .] | |
95 .IP \(bu | |
96 Eric S. Raymond's book ``The Art of UNIX Programming''. | |
97 .[ | |
98 %A Eric S. Raymond | |
99 %T The Art of UNIX Programming | |
100 %D 2003 | |
101 %I Addison-Wesley | |
2
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
102 %O .CW \s-1http://www.faqs.org/docs/artu/ |
1 | 103 .] |
0 | 104 .LP |
1 | 105 These different views on the Unix Philosophy have much in common. |
3 | 106 Especially, the main concepts are similar for all of them. |
1 | 107 But there are also points on which they differ. |
108 This only underlines what the Unix Philosophy is: | |
109 A retrospective view on the main concepts of Unix software; | |
110 especially those that were sucessful and unique to Unix. | |
111 .PP | |
112 Before we will have a look at concrete concepts, | |
113 we discuss why software design is important | |
114 and what problems bad design introduces. | |
0 | 115 |
116 | |
117 .NH 1 | |
118 Importance of software design | |
119 .LP | |
2
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
120 Why should we design software at all? |
3 | 121 It is general knowledge, that a bad plan is better than no plan. |
2
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
122 As stated earlier in this document, the process of building a software |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
123 means going from an idea to a release. |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
124 The development process tells how to get from the idea to the release. |
3 | 125 Software design is the shape of the built software. |
126 This means, that different designs of a software would be different target points to go to. | |
127 Thus, the design of a software defines the global direction the development goes. | |
2
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
128 .PP |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
129 It is not enough that the released software offers all requested functionality. |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
130 It is a misbelief that only function matters. |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
131 Building a software the first time is only a small part of the overall work. |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
132 The larger part begins when the software is released for the first time |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
133 \(en maintainance and extending work.. |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
134 This part soon covers more time than the time which was needed to build the software the first time. |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
135 .\" cf. brooks? |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
136 .PP |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
137 The extendability and maitainability of a software highly depends on its design. |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
138 Good design eases these tasks much. |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
139 Bad design, in contrast, requires much more effort for maintaining and |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
140 extending the software. |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
141 Developers should, for their own best, have maintainability and extendability in mind |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
142 when they design the software. |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
143 .PP |
3 | 144 Users of the software, in contrast, do not care about maintainability and extendability, |
2
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
145 at least not directly. |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
146 They care about usability and flexibility. |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
147 They want the software to directly solve their problems. |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
148 They want to be able to to use all its functions if they learned a few of them. |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
149 They want to use the software for similar tasks. |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
150 Software is successful if users enjoy using it. |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
151 Good software design can offer great flexibility and usability. |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
152 .PP |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
153 Good design matters for developers \fIand\fP for users. |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
154 Hence both groups should care about good software design. |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
155 Bad design limits the software in some way. |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
156 It may still provide all requested function, but it will have worse quality, |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
157 and thus require more work effort for developers or frustrate users. |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
158 .PP |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
159 Good software design is to the implementation like data structures are to algorithms |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
160 \(en if you get the former right, then you do not need to care about the latter, |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
161 it will simply go the right way. |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
162 .\" cf. ??? ``good data, bad algos'' |
0 | 163 |
164 | |
165 | |
166 | |
167 .NH 1 | |
168 The Unix Philosophy | |
169 | |
170 .NH 2 | |
171 what it is | |
172 .LP | |
173 definitions by McIlroy, Gancarz, ESR (maybe already in the intro) | |
174 .LP | |
175 cf. unix tool chain | |
176 .LP | |
177 enabler pipe | |
178 | |
179 .NH 2 | |
2
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
180 Architecture |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
181 .LP |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
182 the most important design decision. |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
183 |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
184 the topic here |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
185 |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
186 .NH 2 |
0 | 187 Interface architecture |
188 .LP | |
189 standalone vs. tool chain | |
190 .LP | |
191 software leverage | |
192 .LP | |
193 possiblities | |
194 | |
195 .NH 2 | |
196 Results | |
197 .LP | |
198 The unix phil is an answer to the sw design question | |
199 .LP | |
200 tool chains empower the uses of sw | |
201 | |
202 .NH 1 | |
203 Case study: nmh | |
204 | |
205 .NH 2 | |
206 History | |
207 .LP | |
208 MH, nmh. | |
209 They are old. | |
210 | |
211 .NH 2 | |
212 Contrasts to similar sw | |
213 .LP | |
214 vs. Thunderbird, mutt, mailx, pine | |
215 .LP | |
216 flexibility, no redundancy, use the shell | |
217 | |
218 .NH 2 | |
219 Gains of the design | |
220 .LP | |
221 | |
222 .NH 2 | |
223 Problems | |
224 .LP | |
225 | |
226 .NH 1 | |
227 Case study: uzbl | |
228 | |
229 .NH 2 | |
230 History | |
231 .LP | |
232 uzbl is young | |
233 | |
234 .NH 2 | |
235 Contrasts to similar sw | |
236 .LP | |
237 like with nmh | |
238 .LP | |
239 addons, plugins, modules | |
240 | |
241 .NH 2 | |
242 Gains of the design | |
243 .LP | |
244 | |
245 .NH 2 | |
246 Problems | |
247 .LP | |
248 broken web | |
249 | |
250 .NH 1 | |
251 Final thoughts | |
252 | |
253 .NH 2 | |
254 Quick summary | |
255 .LP | |
256 good design | |
257 .LP | |
258 unix phil | |
259 .LP | |
260 case studies | |
261 | |
262 .NH 2 | |
263 Why people should choose | |
264 .LP | |
265 Make the right choice! | |
266 | |
267 .nr PI .5i | |
268 .rm ]< | |
269 .de ]< | |
270 .LP | |
271 .de FP | |
272 .IP \\\\$1. | |
273 \\.. | |
274 .rm FS FE | |
275 .. | |
276 .SH | |
277 References | |
278 .[ | |
279 $LIST$ | |
280 .] | |
281 .wh -1p |