img pomb


发表于2004/7/16 16:10:00  4560人阅读







时间 改动 贡献人 备注
2004-07-16 贴到Blog上 西门吹牛(我)
2004-07-16 改了第一句话 Solstice更正之 在袁兄那里看到
2004-07-16 原来漏翻了一句,加上 看人家的翻译才发现漏了,惭愧
2004-07-19 这些问题都是糟糕的设计的症状 aa “糟糕”与前句重复,改为“不良”
2004-07-19  《禅之精髓》改为《禅意》     aa  这里 
2004-07-21  “写的”改为“写得”  taft  这里 
2004-07-23  “Numbered footnotes” 译法 taft  改动在这里 






























pretend omniscience








这里不知是用作名词还是asides than??




mysteries of X





make good use of

case study



major general-market or vertical application









war stories



mined this territory


mined this territory







Zen Flesh, Zen Bones


位于Zen Flesh, Zen Bones

therapeutic form of mental discipline


位于therapeutic form of mental discipline
















toss around


位于toss around

implicit knowledge


原意应为“隐含的知识”,我的翻译或许更妥帖。见implicit knowledge










shone simultaneously









Unix is not so much an operating system as an oral history.



与其说 Unix 是一个操作系统,不如称之为一部口头历史

There is a vast difference between knowledge and expertise. Knowledge lets you deduce the right
thing to do; expertise makes the right thing a reflex, hardly requiring conscious thought at all.
This book has a lot of knowledge in it, but it is mainly about expertise. It is going to try to teach
you the things about Unix development that Unix experts know, but aren’t aware that they know.
It is therefore less about technicalia and more about shared culture than most Unix books — both
explicit and implicit culture, both conscious and unconscious traditions. It is not a ‘how-to’ book,
it is a ‘why-to’ book.
The why-to has great practical importance, because far too much software is poorly designed. Much
of it suffers from bloat, is exceedingly hard to maintain, and is too difficult to port to new platforms
or extend in ways the original programmers didn’t anticipate. These problems are symptoms of bad
design. We hope that readers of this book will learn something of what Unix has to teach about
good design.
This book is divided into four parts: Context, Design, Tools, and Community. The first part
(Context) is philosophy and history, to help provide foundation and motivation for what follows.
The second part (Design) unfolds the principles of the Unix philosophy into more specific advice
about design and implementation. The third part (Tools) focuses on the software Unix provides
for helping you solve problems. The fourth part (Community) is about the human-to-human
transactions and agreements that make the Unix culture so effective at what it does.
Because this is a book about shared culture, I never planned to write it alone. You will notice that
the text includes guest appearances by prominent Unix developers, the shapers of the Unix tradition.
The book went through an extended public review process during which I invited these luminaries
to comment on and argue with the text. Rather than submerging the results of that review process
in the final version, these guests were encouraged to speak with their own voices, amplifying and
developing and even disagreeing with the main line of the text.
In this book, when I use the editorial ‘we’ it is not to pretend omniscience but to reflect the fact that it attempts to articulate the expertise of an entire community.
Because this book is aimed at transmitting culture, it includes much more in the way of history and
folklore and asides than is normal for a technical book. Enjoy; these things, too, are part of your
education as a Unix programmer. No single one of the historical details is vital, but the gestalt of
them all is important. We think it makes a more interesting story this way. More importantly,
understanding where Unix came from and how it got the way it is will help you develop an intuitive
feel for the Unix style.
For the same reason, we refuse to write as if history is over. You will find an unusually large number
of references to the time of writing in this book. We do not wish to pretend that current practice
reflects some sort of timeless and perfectly logical outcome of preordained destiny. References to
time of writing are meant as an alert to the reader two or three or five years hence that the associated
statements of fact may have become dated and should be double-checked.
Other things this book is not is neither a C tutorial, nor a guide to the Unix commands and API. It
is not a reference for sed or Yacc or Perl or Python. It’s not a network programming primer, nor an
exhaustive guide to the mysteries of X. It’s not a tour of Unix’s internals and architecture, either.
Other books cover these specifics better, and this book points you at them as appropriate.
Beyond all these technical specifics, the Unix culture has an unwritten engineering tradition that has
developed over literally millions of man-years1 of skilled effort. This book is written in the belief
that understanding that tradition, and adding its design patterns to your toolkit, will help you become
a better programmer and designer.
Cultures consist of people, and the traditional way to learn Unix culture is from other people and
through the folklore, by osmosis. This book is not a substitute for person-to-person acculturation,
but it can help accelerate the process by allowing you to tap the experience of others.



Who Should Read This Book



You should read this book if you are an experienced Unix programmer who is often in the position
of either educating novice programmers or debating partisans of other operating systems, and you
find it hard to articulate the benefits of the Unix approach.
You should read this book if you are a C, C++, or Java programmer with experience on other
operating systems and you are about to start a Unix-based project.
You should read this book if you are a Unix user with novice-level up to middle-level skills in
the operating system, but little development experience, and want to learn how to design software
effectively under Unix.
You should read this book if you are a non-Unix programmer who has figured out that the Unix
tradition might have something to teach you. We believe you're right, and that the Unix philosophy
can be exported to other operating systems. So we will pay more attention to non-Unix environments
(especially Microsoft operating systems) than is usual in a Unix book; and when tools and case
studies are portable, we say so.
You should read this book if you are an application architect considering platforms or implementation
strategies for a major general-market or vertical application. It will help you understand
the strengths of Unix as a development platform, and of the Unix tradition of open source as a
development method.
You should not read this book if what you are looking for is the details of C coding or how to use
the Unix kernel API. There are many good books on these topics; Advanced Programming in the
Unix Environment [Stevens92] is classic among explorations of the Unix API, and The Practice of
Programming [Kernighan-Pike99] is recommended reading for all C programmers (indeed for all
programmers in any language).
 若你想在本书中寻找C编码的细节或是如何使用Unix核心API的方法,那么这本书并不适合你。有很多关于这些问题的好书;《Unix环境编程进阶》[Stevens92] 在Unix API方面是比较经典的,《编程的实践》[Kernighan-Pike99],推荐所有C程序员阅读(事实上不管使用什么语言的程序员都应该读读)。


How to Use This Book


This book is both practical and philosophical. Some parts are aphoristic and general, others will
examine specific case studies in Unix development. We will precede or follow general principles
and aphorisms with examples that illustrate them: examples drawn not from toy demonstration
programs but rather from real working code that is in use every day.
We have deliberately avoided filling the book with lots of code or specification-file examples, even
though in many places this might have made it easier to write (and in some places perhaps easier
to read!). Most books about programming give too many low-level details and examples, but fail at
giving the reader a high-level feel for what is really going on. In this book, we prefer to err in the
opposite direction.
Therefore, while you will often be invited to read code and specification files, relatively few are
actually included in the book. Instead, we point you at examples on the Web.
Absorbing these examples will help solidify the principles you learn into semi-instinctive working
knowledge. Ideally, you should read this book near the console of a running Unix system, with aWeb
browser handy. Any Unix will do, but the software case studies are more likely to be preinstalled
and immediately available for inspection on a Linux system. The pointers in the book are invitations
to browse and experiment. Introduction of these pointers is paced so that wandering off to explore
for a while won't break up exposition that has to be continuous.
 吸收这些例子将帮助你将学到的原则固化为半直觉性的工作知识。理想情况下,你应当在一台运行Unix系统的终端机旁,在很容易能找到一个Web浏览器的地方阅读本书。任何类型的Unix都行,不过对在Linux系统上的考查而言,软件案例学习将会是已经安装好的并且马上能用的。书中的指示鼓励你去浏览和实验。这些指示的介绍都有定位标识(译者注:可以参见List of Examples),因而离开去浏览一会儿并不会打断需要连续进行的展示。
Note: while we have made every effort to cite URLs that should remain stable and usable, there is
no way we can guarantee this. If you find that a cited link has gone stale, use common sense and do
a phrase search with your favorite Web search engine. Where possible we suggest ways to do this
near the URLs we cite.
Most abbreviations used in this book are expanded at first use. For convenience, we have also
provided a glossary in an appendix.
References are usually by author name. Numbered footnotes are for URLs that would intrude on
the text or that we suspect might be perishable; also for asides, war stories, and jokes.2
To make this book more accessible to less technical readers, we invited some non-programmers to
read it and identify terms that seemed both obscure and necessary to the flow of exposition. We
also use footnotes for definitions of elementary terms that an experienced programmer is unlikely to


注②:这个脚注是献给Terry Pratchett的,他对脚注的使用是……呃,令人鼓舞的:^)


Related References


Some famous papers and a few books by Unix's early developers have mined this territory before.
Kernighan & Pike's The Unix Programming Environment [Kernighan-Pike84] stands out among
these and is rightly considered a classic. But today it shows its age a bit; it doesn't cover the Internet,
and the World Wide Web or the new wave of interpreted languages like Perl, Tcl, and Python.
 Kerninghan和Pike的《Unix编程环境》[Kerninghan-Pike84]在这些书中脱颖而出,并且被(正确地)奉为经典。不过今天看来,它确乎显现出一些老态了:它没有提及Internet,以及万维网(World Wide Web)或是类似Perl、Tcl和Python这类解释型语言的新浪潮。
About halfway into the composition of this book, we learned of Mike Gancarz's The Unix Philosophy
[Gancarz]. This book is excellent within its range, but did not attempt to cover the full spectrum
of topics we felt needed to be addressed. Nevertheless we are grateful to the author for the reminder
that the very simplest Unix design patterns have been the most persistent and successful ones.
大约在本书的中间部分,我们会学到Mike Gancarz的《Unix哲学》[Gancarz]。这本书在它涵盖的范围内是非常优秀的,但是它并未尝试涵盖所有我们觉得需要说明的话题类型。然而,我们仍然很感激作者给出的提示:最简单的Unix设计模式正是最持久也最成功的。
The Pragmatic Programmer [Hunt-Thomas] is a witty and wise disquisition on good design practice
pitched at a slightly different level of the software-design craft (more about coding, less about higherlevel
partitioning of problems) than this book. The authors' philosophy is an outgrowth of Unix
experience, and it is an excellent complement to this book.
The Practice of Programming [Kernighan-Pike99] covers some of the same ground as The Pragmatic
Programmer from a position deep within the Unix tradition.
Finally (and with admitted intent to provoke) we recommend Zen Flesh, Zen Bones [Reps-Senzaki],
an important collection of Zen Buddhist primary sources. References to Zen are scattered
throughout this book. They are included because Zen provides a vocabulary for addressing some
ideas that turn out to be very important for software design but are otherwise very difficult to hold in
the mind. Readers with religious attachments are invited to consider Zen not as a religion but as a
therapeutic form of mental discipline-which, in its purest non-theistic forms, is exactly what Zen


Conventions Used in This Book


The term "UNIX" is technically and legally a trademark of The Open Group, and should formally
be used only for operating systems which are certified to have passed The Open Group's elaborate
standards-conformance tests. In this book we use "Unix" in the looser sense widely current among
programmers, to refer to any operating system (whether formally Unix-branded or not) that is either
genetically descended from Bell Labs's ancestral Unix code or written in close imitation of its
descendants. In particular, Linux (from which we draw most of our examples) is a Unix under
this definition.
 术语"UNIX"从技术上和法律上来说是Open Group的注册商标,而且仅允许正式地用于那些经过了Open Group的细化标准一致性测试认证的操作系统。本书中,我们使用当前在程序员中广泛认同的"Unix"的更加宽泛的含义,来指代所有的直接继承自贝尔实验室的原始Unix代码的,或是以非常类似它的后代的代码的方式写出的操作系统(不管它是不是正式的以Unix为商标的)。特别地,Linux(就是从它身上我们抽取了大部分的示例)在这种定义下就是一个Unix。
This book employs the Unix manual page convention of tagging Unix facilities with a following
manual section in parentheses, usually on first introduction when we want to emphasize that this
is a Unix command. Thus, for example, read "munger(1)" as "the 'munger' program, which will
be documented in section 1 (user tools) of the Unix manual pages, if it's present on your system."
Section 2 is C system calls, section 3 is C library calls, section 5 is file formats and protocols, section
8 is system administration tools. Other sections vary among Unixes but are not cited in this book.
For more, type man 1 man at your Unix shell prompt (older System V Unixes may require man -s
1 man).
 本书使用了Unix手册中的约定,通过在Unix功能之后加上一个括号和它在手册中的章节数来进行标识。通常我们会在初次引用的时候这样标注,以强调它是一个Unix指令。因而,举个例子,"munger(1)"应当解释为"munger程序,可以在Unix手册的第1节(用户工具)中找到相应文档,如果它在你的系统中存在的话"。第2节是C系统调用,第3节是C库调用,第5节是文件格式和协议,第8节是系统管理工具。其它的章节随Unix系统的不同而不同,不过它们在本书中都没有引用到。要了解更多,请在你的Unix shell(译者注:我不想把shell译为"外壳",还是保留吧)提示下键入man l man(老的System V Unix可能需要man -s l man)。
Sometimes we mention a Unix application (such as Emacs, without a manual-section suffix and
capitalized. This is a clue that the name actually represents a well-established family of Unix
programs with essentially the same function, and we are discussing generic properties of all of
them. Emacs, for example, includes xemacs.
At various points later in this book we refer to 'old school' and 'new school' methods. As
with rap music, new-school starts about 1990. In this context, it's associated with the rise of
scripting languages, GUIs, open-source Unixes, and the Web. Old-school refers to the pre-1990
(and especially pre-1985) world of expensive (shared) computers, proprietary Unixes, scripting in
shell, and C everywhere. This difference is worth pointing out because cheaper and less memoryconstrained machines have wrought some significant changes on the Unix programming style.
 在本书后面不同的位置上我们都提到了"老学校"和"新学校"方法。"新学校"和rap music一样开始于上世纪90年代。在这个背景下,它与脚本语言、图形用户界面、开源的Unix和网络的兴起联系在一起。"老学校"指代的是90年代之前的(特别是1985年之前的)世界,那个时代充斥着昂贵的(共享的)计算机,私有的Unix,shell下的脚本,以及遍地都是的C。这个差异值得我们特别指出,因为更便宜、更不受存储器约束的机器在Unix程序设计风格方面形成了一些重大的改变。


Our Case Studies

 A lot of books on programming rely on toy examples constructed specifically to prove a point. This one won't. Our case studies will be real, pre-existing pieces of software that are in production use every day. Here are some of the major ones:

cdrtools/xcdroast       These two separate projects are usually used together. The cdrtools package is a set of CLI tools for writing CD-ROMs; Web search for “cdrtools”. The xcdroast application is a GUI front end for cdrtools; see the xcdroast project site [http://www.xcdroast.org/].
fetchmail            The fetchmail program retrieves mail from remote-mail servers using the POP3 or IMAP post-office protocols. See the fetchmail home page [http://www.catb.org/~esr/fetchmail] (or search for “fetchmail” on the Web).
GIMP                 The GIMP (GNU Image Manipulation Program) is a full-featured paint, draw, and image-manipulation program that can edit a huge variety of graphical formats in sophisticated ways. Sources are available from the GIMP home page [http://www.gimp.org/] (or search for "GIMP" on the Web).
mutt                     The mutt mail user agent is the current best-of-breed among textbased Unix electronic mail agents, with notably good support for MIME (Multipurpose Internet Mail Extensions) and the use of privacy aids such as PGP (Pretty Good Privacy) and GPG (GNU Privacy Guard). Source code and executable binaries are available at the Mutt project site [http://www.mutt.org].
                            mutt 邮件用户助理是现有的基于文本的Unix电子邮件助理同类产品中最出色的,它拥有对MIME(多用途Internet邮件扩展)极好的支持和对隐私辅助程序如PGP(Pretty Good Privacy,这个不用翻了吧?)和GPG(GNU隐私卫士)的支持。[http://www.mutt.org]
xmlto                  The xmlto command renders DocBook and other XML documents in various output formats, including HTML and text and PostScript. For sources and documentation, see the xmlto project site [http://cyberelk.net/tim/xmlto/].
To minimize the amount of code the user needs to read to understand the examples, we have tried
to choose case studies that can be used more than once, ideally to illustrate several different design principles and practices. For this same reason, many of the examples are from my projects. No claim that these are the best possible ones is implied, merely that I find them sufficiently familiar to be useful for multiple expository purposes.


Author’s Acknowledgements


The guest contributors (Ken Arnold, Steven M. Bellovin, Stuart Feldman, Jim Gettys, Steve Johnson,Brian Kernighan, David Korn, Mike Lesk, Doug McIlroy, Marshall Kirk McKusick, Keith Packard,Henry Spencer, and Ken Thompson) added a great deal of value to this book. Doug McIlroy, in particular, went far beyond the call of duty in the thoroughness of his critique and the depth of his contributions, displaying the same care and dedication to excellence which he brought to managing the original Unix research group thirty years ago.
 客座撰稿者们(Ken Arnold, Steven M. Bellovin, Stuart Feldman, Jim Gettys, Steve Johnson,Brian Kernighan, David Korn, Mike Lesk, Doug McIlroy, Marshall Kirk McKusick, Keith Packard,Henry Spencer, 以及Ken Thompson)大大增加了本书的价值。这里要特别提到Doug McIlroy,他在保持评论的严谨性和所作贡献的深度方面大大超出了他的义务范围,表现出了与他在三十年前管理原来的Unix研究组时同样的关切和对追求卓越所作的贡献。
Special thanks go to Rob Landley and to my wife Catherine Raymond, both of whom delivered
intensive line-by-line critiques of manuscript drafts. Rob's insightful and attentive commentary
actually inspired more than one entire chapter in the final manuscript, and he had a lot to do with
its present organization and range; if he had written all the text he pushed me to improve, I would
have to call him a co-author. Cathy was my test audience representing non-technical readers; to the extent this book is accessible to people who aren't already programmers, that's largely her doing.
 对Rob Landley和我的妻子Catherine Raymond致以特别的谢意。他们两人对我的手稿草样的每一行都给出了精细的评论。Rob那些富有洞察力而体贴的注释事实上促成了最终手稿中超过一整章的内容,而且他为现在这本书的组织结构和范围也做了相当多的贡献;如果他把催我加油改进的那些话都写下来的话,我就该把他称作合著人了。Cathy是代表非技术类读者作为本书的试阅人的;关于本书能够为非程序员人群所接受的程度,很大程度上都得益于她。
This book benefited from discussions with many other people over the five years it took me to write it. Mark M. Miller helped me achieve enlightenment about threads. John Cowan supplied some insights about interface design patterns and drafted the case studies of wily and VM/CMS, and Jef Raskin showed me where the Rule of Least Surprise comes from. The UIUC System Architecture Group contributed useful feedback on early chapters. The sections on What Unix Gets Wrong and Flexibility in Depth were directly inspired by their review. Russell J. Nelson contributed the material on Bernstein chaining in Chapter 7. Jay Maynard contributed most of the material in the MVS case study in Chapter 3. Les Hatton provided many helpful comments on the Languages chapter and motivated the portion of Chapter 4 on Optimal Module Size. David A. Wheeler contributed many perceptive criticisms and some case-study material, especially in the Design part. Russ Cox helped develop the survey of Plan 9. Dennis Ritchie corrected me on some historical points about C.
 在我写作的五年中与很多其他人的讨论使得本书受益良多。Mark M. Miller在线程方面给予了我很大的启迪。John Cowan 提供了关于接口设计的一些远见卓识,并且起草了wily和VM/CMS的案例研究;Jef Raskin为我指明了"最少惊奇"原则的出处。UIUC系统架构组对前面几章给出了很有用的反馈。"Unix在哪里犯了错"和"深入探究可伸缩性"两节都是直接由他们的审阅所激起的。Russell J. Nelson 为第7章中有关伯恩斯坦链的内容提供了素材。Jay Maynard 则为第3章中有关MVS案例研究的内容提供了素材。Les Hatton 为"语言"一章提供了很多有益的注解,并且促成了第4章"优化的模块大小"中的部分内容。David A. Wheeler 提出了很多敏锐的批评以及一些案例研究的素材,尤其是关于"设计"那一部分的。Russ Cox帮助展开了"计划9"的调查。Dennis Ritchie在C语言的一些历史性要点上指正了我的错误。
Hundreds of Unix programmers, far too many to list here, contributed advice and comments during the book's public review period between January and June of 2003. As always, I found the process of open peer review over the Web both intensely challenging and intensely rewarding. Also as always, responsibility for any errors in the resulting work remains my own.
The expository style and some of the concerns of this book have been influenced by the design
patterns movement; indeed, I flirted with the idea of titling the book Unix Design Patterns. I didn't, because I disagree with some of the implicit central dogmas of the movement and don't feel the need to use all its formal apparatus or accept its cultural baggage. Nevertheless, my approach has certainly been influenced by Christopher Alexander's work3 (especially The Timeless Way of Building and A Pattern Language, and I owe the Gang of Four and other members of their school a large debt of gratitude for showing me how it is possible to use Alexander's insights to talk about software design at a high level without merely uttering vague and useless generalities. Interested readers should see Design Patterns: Elements of Reusable Object-Oriented Software [GangOfFour] for an introduction to design patterns.
 说明的风格和书中的一些观念受到了设计模式运动的影响;事实上,我曾经在是否要把本书命名为"Unix设计模式"这个主意上摇摆不定。我没有这样做,因为我并不赞成(设计模式)运动中所带有的一些盲从的教条主义,而且我也不觉得需要使用它所提供的全套正规的设施或是接受它的文化包袱。然而,我的方式不可避免的受到了Christopher Alexander的著作的影响③ (特别是《建筑的永恒之道》和《模式语言》),而且我对"四人帮"和他们那派的其他成员充满了感激之情,因为他们向我展示了如何在软件设计领域利用Alexander的洞察力来进行更高层次上的交流,而不是仅仅发出一些含糊不清、毫无意义的嘟囔。感兴趣的读者应该看看《设计模式:可复用面向对象软件的基础》[GangOfFour],以便对设计模式有一个基本的了解。(译者注:《设计模式》一书现在已成为设计模式领域中的圣经,而著者四人通常被亲昵的称为Gang Of Four,或是缩写为GOF,这里我们把他们称作"四人帮"没有一点诋毁的意思。相应的,这本书通常也被称为GOF设计模式)
The title of this book is, of course, a reference to Donald Knuth's The Art of Computer Programming. While not specifically associated with the Unix tradition, Knuth has been an influence on us all.
 当然,本书的标题是模仿Donald Knuth的《计算机程序设计艺术》一书的标题而作。尽管Knuth与Unix传统并没有什么具体的联系,但他影响了我们所有人。(译者注:Knuth在计算机领域是一位宗师级人物,其著作The Art of Computer Programming也被奉为程序设计经典书籍(教材)。同时他的写作风格也影响了一大批的技术作家)



注③:对Alexander著作的正确评价,以及一些重要内容的on-line版本的链接,都可在“Some Notes on Christopher Alexander”网站 [http://www.math.utsa.edu/sphere/salingar/Chris.text.html]找到。


Editors with vision and imagination aren’t as common as they should be. Mark Taub is one; he saw merit in a stalled project and skillfully nudged me into finishing it. Copy editors with a good ear for prose style and enough ability to improve writing that isn’t like theirs are even less common, but Mary Lou Nohr makes that grade. Jerry Votta seized on my concept for the cover and made it look better than I had imagined. The whole crew at Prentice-Hall gets high marks for making the editorial and production process as painless as possible, and for cheerfully accommodating my control-freak tendencies not just over the text but deep into the details of the book’s visual design, art, and marketing.

       拥有远见和想象力的编辑们并非如期望的那样随处可见。而Mark Taub正是一位这样的编辑;他发现了一个停滞的项目的价值,并且极有技巧地说服了我去完成它。拥有对散文风格的敏锐听觉,并拥有改善与他们风格完全不同的文章的能力的拷贝编辑就更加的少见了。不过Mary Lou Nohr达到了这个级别。Jerry Votta从我的概念中抓出了本书的封面,而且把它做的比我的想象还要号。Prentice-Hall的全体工作人员都给我留下了很好的印象,因为他们努力降低了编辑和出版流程(给我)带来的困扰,并且很乐意的接受了我在文字中表现出的,甚至深入到了书的视觉设计、艺术、市场等等细节中的“控制癖”倾向。




Culture? What Culture?


This is a book about Unix programming, but in it we're going to toss around the words 'culture','art', and 'philosophy' a lot. If you are not a programmer, or you are a programmer who has had little contact with the Unix world, this may seem strange. But Unix has a culture; it has a distinctive art of programming; and it carries with it a powerful design philosophy. Understanding these traditions will help you build better software, even if you're developing for a non-Unix platform.
Every branch of engineering and design has technical cultures. In most kinds of engineering,
the unwritten traditions of the field are parts of a working practitioner's education as important
as (and, as experience grows, often more important than) the official handbooks and textbooks.
Senior engineers develop huge bodies of implicit knowledge, which they pass to their juniors by (as Zen Buddhists put it) "a special transmission, outside the scriptures".
Software engineering is generally an exception to this rule; technology has changed so rapidly,
software environments have come and gone so quickly, that technical cultures have been weak and ephemeral. There are, however, exceptions to this exception. A very few software technologies have proved durable enough to evolve strong technical cultures, distinctive arts, and an associated design philosophy transmitted across generations of engineers.
The Unix culture is one of these. The Internet culture is another - or, in the twenty-first century,
arguably the same one. The two have grown increasingly difficult to separate since the early 1980s,and in this book we won't try particularly hard.


The Durability of Unix


Unix was born in 1969 and has been in continuous production use ever since. That's several geologic eras by computer-industry standards - older than the PC or workstations or microprocessors or even video display terminals, and contemporaneous with the first semiconductor memories. Of all production timesharing systems today, only IBM's VM/CMS can claim to have existed longer, and Unix machines have provided hundreds of thousands of times more service hours; indeed, Unix has probably supported more computing than all other timesharing systems put together.
Unix has found use on a wider variety of machines than any other operating system can claim. From supercomputers to handhelds and embedded networking hardware, through workstations and servers and PCs and minicomputers, Unix has probably seen more architectures and more odd hardware than any three other operating systems combined.
Unix has supported a mind-bogglingly wide spectrum of uses. No other operating system has shone simultaneously as a research vehicle, a friendly host for technical custom applications, a platform for commercial-off-the-shelf business software, and a vital component technology of the Internet.
Confident predictions that Unix would wither away, or be crowded out by other operating systems, have been made yearly since its infancy. And yet Unix, in its present-day avatars as Linux and BSD and Solaris and MacOS X and half a dozen other variants, seems stronger than ever today.
 那些自信满满的预言要么说Unix将会幻灭,要么说它会被其它操作系统挤垮。这种预言从Unix的婴儿时代开始就年年不拉。然而化身为今天的Linux、BSD、Solaris、MacOS X以及超过半打的其它变种的Unix,却看起来是空前的强大了。

 Robert Metcalf [the inventor of Ethernet] says that if something comes along to replace Ethernet, it will be called “Ethernet”, so therefore Ethernet will never die.④ Unix has already undergone several such transformations.

Robert Metcalf(以太网之父)说,如果有什么东西涌现出来代替掉以太网的话,那玩意儿就会被叫做“以太网”,所以以太网永远不会消亡④。Unix早已经经历过若干次这样的转化了。

At least one of Unix's central technologies - the C language - has been widely naturalized
elsewhere. Indeed it is now hard to imagine doing software engineering without C as a ubiquitous
common language of systems programming. Unix also introduced both the now-ubiquitous treeshaped file namespace with directory nodes and the pipeline for connecting programs.
Unix's durability and adaptability have been nothing short of astonishing. Other technologies have come and gone like mayflies. Machines have increased a thousandfold in power, languages have mutated, industry practice has gone through multiple revolutions - and Unix hangs in there, still producing, still paying the bills, and still commanding loyalty from many of the best and brightest software technologists on the planet.
Once when coax was replaced with twisted pair, and a second time when gigabit Ethernet came in. One of the many consequences of the exponential power-versus-time curve in computing, and the
corresponding pace of software development, is that 50% of what one knows becomes obsolete over every 18 months. Unix does not abolish this phenomenon, but does do a good job of containing it. There's a bedrock of unchanging basics-languages, system calls, and tool invocations-that one can actually keep using for years, even decades. Elsewhere it is impossible to predict what will be stable; even entire operating systems cycle out of use. Under Unix, there is a fairly sharp distinction between transient knowledge and lasting knowledge, and one can know ahead of time (with about 90% certainty) which category something is likely to fall in when one learns it. Thus the loyalty Unix commands.
Much of Unix's stability and success has to be attributed to its inherent strengths, to design decisions Ken Thompson, Dennis Ritchie, Brian Kernighan, Doug McIlroy, Rob Pike and other early Unix developers made back at the beginning; decisions that have been proven sound over and over. But just as much is due to the design philosophy, art of programming, and technical culture that grew up around Unix in the early days. This tradition has continuously and successfully propagated itself in symbiosis with Unix ever since.
 Unix的稳定性和成功应当归功于它所继承的实力,归功于Ken Thompson, Dennis Ritchie, Brian Kernighan, Doug McIlroy, Rob Pike以及其他的Unix开发者早在开始时所作出的设计决定,这些决定一再地被证明是合理地。同样应当归功于在早期围绕Unix所形成地设计哲学、编程艺术以及技术文化。自那时起,这种传统就在与Unix的共生中得到了持续的、成功的传播。



0 0



取 消