. -----------------------------------------. | Recommendation: Notepad Notepad Tool browsing edit this document || Recommended font: lucida console, rule, five words || suggestion setting: automatic wrap | * ----------------------- ------------------ *
------- | Preface | Foreword ---------
Unix Is Not So Much An Operating System As An Oral History.Unix is that it is an operating system, it is better to say that the history of the department. (Solstice correction) [Note] -
NEALSTEPHENSON
Author: NealStephenson ([Note] :( SkyMountain provided) ...... Oral History (Oral History) in the modern sense, namely the oral history as a specialized discipline, from the beginning of the 1940s in 1948, to switch from the journalists. Historic scholar Aaron Nevins, established the first modern oral historical archives in the University of Columbia, which is used to record, save the meaningful private memories of American life. He promoted the Ford Motor Company Historical access, from the boss, down to ordinary employees, interview records more than 26,000 pages, becoming the most abundant, vivid information of the company. - From http://www.historyshanghai.com/shanghai/file/koushu /1-jiazhi.htm, Oral History is a science of science, similar to physics, chemistry, is a branch of modern history. This discipline is very popular in foreign countries, using Google can search for a lot. Generally translated as "oral history", it is also seen that it is translated as "oral history".)
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 knowledge and expertise (expert opinion) there is a big difference. Knowledge let you infer what is right; Expertise makes "correct things" becomes a conditional reflection - almost completely do not need a conscious thinking. (Thank you: Solstice correction)
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 are not 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. This book is full of knowledge But it is very professional. It tries to teach you a lot of things you know about UNIX experts, but they don't realize. Therefore, it is different from most UNIX books, which is rarely related to technical details, more of sharing culture. It takes into account cultural expressions and connotations, realized and unrecognized traditional habits. It's not telling you how to do ', but' why do you do this' 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 did not Anticipate. The release of this book will learn Somethingy What UNIX HAS TO TEACH ABOUT Good Design. 'Why do you have a bigger practical value, because most of the software is lacking design. Most of their pain expansion is extremely difficult to maintain, and it is difficult to transplant to a new platform, or expand it in a manner that is difficult to expect in the original developers. We hope that the readers of this book can learn some unix 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. This book is divided into four chapters: Context, designs, tools and societies. The first part (Context) includes Philosophy (ideology) and history, which describes the foundation and motivation of subsequent parts. The second part (design) expands the principle of UNIX Philosophy (ideas), is a more specific design and implementation methods and recommendations. Part III (Tool) Focus on the software provided by UNIX to help you solve the problem. The fourth part (the community) is what kind of Effective (vital) of UNIX culture communication and collaboration of people. 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 This book is about sharing culture, and I plan to describe it separately. You will notice that there are many views of the Unix developers in the text, and they are all UNIX traditional founders. After a long-term disclosure comment, I invite these knowledgeable people to evaluate and discuss the text, more better in the final version flooding out the results. These friends are encouraged to express their own voice, expand their development, and even completely different from the main line of this article.
In this book, when I use the ed to pretend omniscience but to one in this book, when I quote 'We', I don't want to leave anything, but it does reflect the fact that it tries to reflect the entire opinion of the 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. Because this book is for broadcast culture, it contains more history and legend, not usual technical books. Enjoy; this process is also a gain of a UNIX programmer. There is an indispensable thing without any individual historical events, but all of them are important. We think this road creates a more interesting story. Understand how Unix comes with it, how it is going to be, it will be more important. It helps you find an intuitive feeling, 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. For the same reason, we reject the description of the past history. You will find a lot of unusual references you referenced when you write this book. We do not want this practice to be able to get some eternal very logical prophecy results. References in writing is intended to remind readers, two, three or five years of relevant statements will become dated (outdated) or should be dunk-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, each Specifics Better, and this book point, other things, this book is not a C language tutorial, nor A guide for a UNIX command or API. He is not a reference for SED / YACC / Perl / Python. It is not a network programming entry reading, not a detailed X system secret. It is not guidance from the core and architectural structure of UNIX. Other books have been described very well, this book is just some. Beyond all these technical specifics, the Unix culture has an unwritten engineering tradition that has developed over literally millions of man-years [1] 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. On all of these technical details, UNIX culture has an incomplete engineering tradition, which has developed into a million man-years (people) Skilled Effort. The writing of this book is based on understanding the traditional belief, then adding its development model as your toolkit and helping you become a more excellent 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. Culture is composed of traditional Unix culture from others through Folklore, Osmosis (penetration), from others. This book is not a replacement of Person-to-Person Aculturation, but it helps to accelerate this process, so you can easily experience the experience of others.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~ `
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. If you are a wealthy Experience UNIX programmers are in place, or to teach novice, or arguing with other operating system guerrillas, and you find out that it is difficult for Articulate (clearly express) UNIX Approach (Method). You should read this book. 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. If you are a C, C , or Java programmer, and there are other Experience in the operating system, and you are trying to start a UNIX base project, you should look at this book.
....................................................... Three and a hlf Decades Between 1969 and 2003 IS a long time. Going by the historical trend curve in number of Unix sites during that period, probably somewhere upwards of fifty million man-years have been plowed into Unix development worldwide. [1] 35 years between 1969 to 2003 is a long time. The growth history trend line of the UNIX site, probably 50,000,000 man-years (a year) has already puted into to UNIX Development Worldwide (developed globalization). `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` ``
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. If you are a Unix user, There are primary to intermediate operating system application techniques, but there is a little development experience, I want to learn how to design efficient software under UNIX. You should read this book.
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 if you are a non-Unix programmer, but you can find traditional Unix What are you taught, you should read this book. We believe that you are right, UNIX Philosophy can be converted to other operating systems. Therefore, we hope to spend more attention to non-UNIX environments (especially Microsoft operating systems), not just a usual UNIX book, especially tools and case studies, more portable (convenient), we say SO (we think 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. If you are an application architect, design platform or execution policy to a major General-Market (General Market), or Vertical Application (top application), you should read this book. It can help you understand UNIX as a development platform and open source as a UNIX traditional Stregths (force).
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). If you want to find C coding details or how to use the Unix system kernel API, you Don't read this book. There are many good books to discuss this topic; such as: "Advanced Programming in UNIX Environment" [Stevens92] is the classic exploration of UNIX API, and "Programming Practice" [kernighan-Pike99] is recommended to all C programmer reading (even It is a plenary, regardless of any language).
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~ `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 IN Use Every Day. This book contains both practice and design ideas. Some part of the like a spokes are also summarized, and some of them are concerned about the details of UNIX development case research. We use Precede or Follow universal laws and Aphaorisms (principles) to draw them in cases: these examples are never a toy demo, but the actual work of the actual work used 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 oppositive direction. We intentionally avoid a lot of code or Specification-File (Description Document), although many places can be easily used (or some). Most of the books have given too many low-level details and examples, resulting in incorrectly a senior feel "real reproduction". This book, we would rather make the opposite mistake.
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. Therefore, when you often be directed to read the code and documentation, books There are very few in the middle. Instead, we give the URL of these examples.
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 a Web 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 will not break up exposition that has To be continuous. These interesting examples will help you Solidify (focused), you learned the work knowledge of Semi-Instinctive (half-edition). Ideally, you should use the UNIX system terminal to read this book with a web browser. All UNIX can support, but software case studies need to be pre-installed, soon Linux will also support. Pointers in the book helps browsing and experimenting. These footnotes are placed in places where they need to be studying but can't interrupt. 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 WE SUGGEST WAYS to Do this Near The Urls We Cite. NETROUND OF THE INFORMATION If we strive to make each URL of the referenced is stable and available, it is still not guaranteed. If you find that a connection is already stale (old), use your intuition to choose a phrase with your favorite search engine to search. The URL we reference will be more effective.
Most Abbreviations Used In this Book Areviance, We Have Also Provided A Glossary In an appendix. Most abbreviations, this book expands it when used. For convenience, we also provide a glossary in the appendix.
References are uotnotes are for urls.. URL's number footnote, will be annotated or we think may be Perishable; there is asides, war story, 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 NEED. In order to make this book's non-systematic readers easy to understand, we invited some non-programmetors to read it and distinguish it, but also the terms they must read. We also use footnotes to give basic terms to define, may have an experienced programmer does not need. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ `
. 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. Some famous papers have been involved in this area before booking for Early Developers. "UNIX programming environment" [kernighan-pike84] is a fairly prominent one, which is a classic. But today it looks some, it does not cover the Internet, and the web or new interpretation language, like Perl, TCL, and 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 MOSTNTENT AND SUCCESSFUL ANDONES. We learned Mike Gancarz's "UNIX System Thought". This book is very good within its discussion, but it is not possible to fully cover the relevant topics we feel that we need to discuss. However, we still thank these authors tell us this truth, very simple Unix design mode is already the most stable and successful model.
...................................... [2] this particular footnote is Dedicated to Terry Pratchett, Whose use of footnotes is quite ... Inspiring. [2] These detailed footnotes are done by Terry PratChett, which is quite investful in the use of footnotes. `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` 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 higher-level partitioning of problems) than this book. The authors' philosophy is an outgrowth of Unix experience, and it is An Excellent Complement to this book. "Pragmatic" [hunt-thomas] is a discussion of a more tangible mulk to this book is Pitched (positioned) subtle different levels of software design techniques ( Pay more attention to the encoding, less attention to advanced issues). The author's point of view is the derived of UNIX practices. He is a great supplement of 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. "Programming practices" [Kernighan-Pike99] discussed the identity of a veteran Unix traditional programming practitioners Similar levels of problems.
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 is final (intentional) We recommend "Zen (Zen) Flesh (meat), Zen Bones" [REPS-SENZAKI], an important zen buddhist (Zen) origin Collection tells. Reference distribution about Zen in whole book. The reason why it quoted because Zen provides some ideas, it became very important for software design, but it is difficult to grasp in the mind. Readers with religious beliefs believe that Zen is not a religion but a spiritual training form - in its inactivated form, Zen is very exactly (strict). . ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
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 Our Examples) IS A UNIX Under this Definition. The term "unix" is a technical and legally trademark, belonging to Open Group (Open Source Organization), forms of the operating system in the form, which is the finest in the open source organization. Standards-Conformance (standardized) test. In this book, "UNIX" is widely used by today's programmers, and the relevant operating system (whether it is labeled with a UNIX-based sign) is more or less to reference the most original UNIX code or other in the Bell Lab. Closed development of its descendants version. Special pointed out that Linux (we use the most to demonstrate our example) is such a 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). this The book is used to use the unix manual's page practice to represent the Unix facilities, and the manual section of the incomplete manual is usually in our homage. It is usually the emergence of it is a UNIX command. Thus, for example, read "Munger (1)" The "'Munger' program from the first paragraph from the UNIX man page, whether it appears in your system." Paragraph 2 is C system call, paragraph 3 is the C library call Paragraph 5 is the file format and protocol, and paragraph 8 is the system management tool. Other paragraphs have different UNIXs, and this book does not discuss it. Try, entered MAN 1 Man (old System v Unixes) by UNIX command line. MAN-S 1 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 itm. Emacs, for example, incrudes Xemacs. Sometimes, we discuss a UNIX application (such as Emacs), no manual paragraph envelopes and uppercase start letters. This is a clue that has been formed as a series of Unix program series, which is essentially the same function, and we will discuss all of their ordinary properties. For example, Emacs 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 Memory-Constrained Machines Have Wrought Some Significant Changes on The UNIX Programming Style. There are many points behind this book, and we talk about 'Old School' and 'New School' Method. As RAP music, New-school begins in 1990. Here, it is the rise of the scripting language, Guis, open source unixes, and the Internet. Old-school refers to the era of expensive (especially 1985) computers (especially 1985), private unixes, housing scripts, and ubiquitous C language. This difference indicates very valuable because the inexpensive low memory demand machine will make UNIX programming style. ~~~~~~~~~~~~~~~~~~.! Our case! Our case study` ~~~~~~~~~~~~~~~~~~ `
A lot of books on programming rely on toy examples constructed specifically to prove a point. This one will not. 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: Most of the programming books rely on toy examples to build a specific point of view. This book is not. Our case studies are true and is the existing fragments of the software used every day. Here is a few of the main:
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/]. These two related items are usually used together. The CDRTools Toolkit is a series of CLI about writing CD-ROMs; search "CDRTools" over the network. XcDroast Applications are a GUI front-end using CDRTools; refer to the XcDroast Engineering 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). The Fetchmail program uses the POP3 or IMAP Mail Protocol from the Remote Mail Server from the remote mail server. Refer to the homepage of Fetchmail [http://www.catb.org/~esr/fetchmail] (or search "fetchmail" from 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 avail-able from the GIMP home page [http.: //www.gimp.org/] (or search for "gimp" on the web). GIMP (GNU Image Manager) is a full-featured painting and an image management program, which can be edited by the most traditional classic method A wide range of image formats. Source code can be from the GIMP home page [http://www.gimp.org/] (or search "GIMP" from the Internet).
mutt: The mutt mail user agent is the current best-of-breed among text-based 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 Mail User Agent is the most variety of text-based UNIX email agents A good one, it supports MIME (Multipurpose Internet Mail Extensions) and uses a private assistant PGP (Pretty Good Privacy) and GPG (GNU Privacy Guard). Source code and executable code can be at the MUTT engineering site [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/] xmlto command. Convert DOCBOOK and other XML documents to a variety of other formats, including HTML, plain text, and postscript. Source and documentation, see the XMLTO project website [http://cybereelk.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. in order to reduce the amount of code examples to read the user to understand, we try to select case studies can It is used to express different design principles and practices. For the same purpose, many examples have a self-project. It is not that they are the best, but I use them to express a variety of different explanations more familiar and free. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~ `
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. friends 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) has added a lot of good advice to this book. Doug Mcilroy, contributing his criticism and profound views, showing the same attention and excellence, and he brought 30 years ago to the original UNIX management profile.
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. Especially for Rob Landley and my wife Catherine Raymond, they scrutinize and comments on my manuscript. Rob's insight and detailed comments are more inspiration than a whole final manuscript, and he has made a lot of arrangement and finishing work; if he will write all words, I will improve, I will have to call him cooperation. Author. Cathy is a non-technical reader I tested by the audience; enhances this book to readers of non-service readers, mainly her work.
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 Surve Cox Helped Develop The Survey of Plan 9. Dennis Rusts IE Corrected Me on Some Historical Points About C. This book benefits from the discussion of many people in 5 years, which prompted me to write it out. Mark M. Miller helped me complete the enlightenment for Threads. John Cowan provides some opinions on interface design patterns and case studies of Wily and VM / CMS, and Jef Raskin told me that rule of least surprise came from there. The UIUC System Structure organization provides an early section for useful feedback. UNIX Gets WRONG (making mistakes) and flexibility in Depth directly source their REVIEW (evaluation). Russell J. Nelson provides some information for Chapter 7 Bernstein Chaining. Jay MayNard provides most of the information for Chapter 3 MVS case studies. LES Hatton provides useful comments for language chairs and the starting part of Chapter 4 Best Module Size. David A. Wheeler proposes a constructive criticism and some case studies, especially in the design part. Russ Cox helps to develop a planned 9 survey. Dennis Ritchie corrected some historical reference points for my C language.
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. Hundreds of UNIX programmers cannot be listed here, which gives a lot of advice and suggestions during the public comment from January to June 2003, from this book. . Moreover, I found that the process of online Open Peer Review (public evaluation) has both fierce challenges and fierce returns. Any wrong responsibility before the end of the work is left to me.
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 did not, because I disagree with some of the implicit central dogmas. of the movement and do not 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 work [3] (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 introductionto design patterns expository book (illustrated) style and some of the points by the design patterns movement (design mode motion) (SkyMountain corrections) effects; even I have Change the title The idea of "UNIX design mode". I didn't end because I didn't agree with the implicit core dogma of this movement, and I don't think it is necessary to use all of its form, or its cultural Baggage (bag). However, my point of view is also affected by Christopher Alexander [3] (especially "Building a Eternal Method and Mode Language", and "The Gang Of Four [Note]" influence and others of their school. A lot of help, tell me how to discuss software design at a high degree of Alexander, not just completely blurred, no value, interested readers should look at "Design mode: can be used for object-oriented software The foundation (Skymountain correction) [Gangoffour] has made a certain introduction to the design mode. [Note: "The design model" "The Gang of Four" "The Gang of Four" is "gof", Chinese translated name translate "Four Help"] (Thanks: Skymountain added)
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. The title of the book, of course, is Donald Knuth The imitation of "computer programming art". Although there is no association with UNIX tradition, Knuth has an impact on us. Editors with vision and imagination are not 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 is not 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. vision and imagination (appearance) editor did not As they are usually the same. Mark Taub is one, he kensouched to the value of the newsstand market and cleverly encouraged me to complete this book. Copy Copy Editing Relieves Writing Skills with Swift and Sufficient Ability rather than they usually, especially Mary Lou Nohr gives a higher rating. Jerry Votta seized the essence of my cover and made it look more than I can imagine. Prentice-Hall gives a high concern to edit and production processes, and help me control my ideas, not just simply in text, or even meticulous design, art and market.
....................................... [3] An appreciation of alexander's work, with links To on-line Versions of Significant Portions, May Befactant AT Some Notes On Christopher Alexander [http://www.math.utsa.edu/sphere/salingar/chris.text.html].[3] Work in Alexander Thank you, here is some valuable online version of the online version, you can find [http://www.math.utris.edu/sphere/salingar/chris.edu/sphere/salingar/chris.edu/sphere/salingar/chris.edu/sphere/salingar/chris.edu/sphere/salingar/chris.edu/sphere/salingar/chris.edu/sphere/salingar/chris.edu/sphere/salingar/chris.Text.html]. [Note]: (Skymountain) Christopher Alexander is a famous architecture, and his work has a great impact on the generation and development of design patterns. The Timeless Way of Building and a Pattern Language is the two books of Alexander: "The Eternal Road of Architecture" and its sisters "Building Mode Language". According to online information, the Chinese version of the two books has been published by Intellectual Property Publishing House in 2002, 2002. `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `----------------- | Part I. context | 来 龙 去 --------------- -
Chapter 1. Philosophy first chapter. Ideological system
Philosophy Mattersthose WHO Do Not Understand Unix Are Condemned To Reinvent It, Poorly. Philosophical essence is: those who don't understand Unix often think that it is for it (repeating inventions) in the case where others are inventive. -
HenrySpencer
Usenet signature, November 1987 Author: HenrySpencerUsenet signed in November 1987
. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Culture ?! 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 Program 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. This is a book about UNIX programming, but we invest more about "cultural" "art" "philosophy". If you are not a programmer, or you are a programmer but very much contact with the UNIX world, this looks more unfamiliar. But UNIX has a culture; there is a different programming art; it also carries a powerful design philosophy. Understanding these traditions will help you build better software, although you are developing on 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 Hue Bodies of Implicit Knowledge, Which The Pass To Their Juniors BY (As Zen Buddhists Put It) "a Special Transmission, Outside The Scriptures". Each project branch and design have technical culture. Most of the types of projects, compared to official manuals and textbooks, the tradition of unwritten in this field is an important part of the practitioners to receive education (also, experience accumulation, often more important). Senior engineers have developed a huge implicit knowledge system, and PASS (delivery) is given (Zen called PUT (given)) new engineers, "the process is special, free to text."
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 in software engineering is usually an exception to this rule;. rapid change of technology, software environment frequently come and go, technology and culture become weak and short-lived . However, there is still an exceptional except for this exception. Very few software processes have been proven to have sustained, can develop into powerful technical culture, unique art, and related design ideas spread in a generation 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 will not try Particularly Hard.Unix culture is one of them. Internet culture is another - or, in the 21st century, it is the same one. As early as 1980, these two have become increasingly growing and difficult to separate, this book does not want to try to discuss independently.
. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~`
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 was born in 1969 Year, it has been used in it. This is a physical sense of several computer industrial standards - the first semiconductor memory of the same era is also older than the PC / Workstation / Microprocessor / Video Display Terminal. All Today's time-time system products, not only IBM VM / CMS is mentioned with how long life, UNIX machine also provides hundreds of service hours; in fact, UNIX probably be borne than other points When the system is added together, it has long calculated support. 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. For any other operating system, UNIX has been more widely used in a variety of machines. From supercomplers to handheld and embedded network devices, there are PCs and microcomputers through workstations and servers, and Unix has appeared more Architectures, more ODD Hardware (Structure), more ODD Hardware (Structure), and ODD hardware. Hardware is not related.
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 The Internet.unix has supported a mind-bogglingly (??) widely used. Not as described in other operating systems, is a research tool, but a host, a host, a platform for commercial software in a non-business model, an important part of an Internet technology.
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 Seem Stronger Than Ever Today. It has enriched too much "confident prediction" since it, and UNIX will disappear, or squeezed by other operating systems. But still UNIX, in incarnation to Linux and BSD and Solaris and Macos X and many successors, it seems more strengthened than before. 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. [4] Unix has already undergone several such transformations. Robert Metcalf [Ethernet invention People say that if anything will replace Ethernet in the future, it is called "Ethernet", so Ethernet will never die. [4]. UNIX has also experienced several such transformations. -
Kenthompson
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 tree-shaped.. File Namespace with Directory Nodes and The Pipeline for Connecting Programs. The last UNIX core technology - C language - has been widely transplanted to elsewhere. In fact, it has been rooted in all software engineering, and there is no language in which the C language is generally existed in the system programming. UNIX also creates a tree file naming method that is now nowhere to have a directory node, and pipe technology for the connection program.
.. 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 Best Software Technologists on the Planet.Unix is not just a short surprise. Other techniques are really flying like butterflies. Machine performance has grown thousands, the language has also varied, and industrial practice has passed many changes - however, UNIX still stands there, still producing, still paying various fees, in this planet, still orders Many faithful best and smart software technicians. .................................. [4] in Fact, Ethernet Has Already Been Replace by a Different Technology with The Same Name - TWICE.ONCE WHEN COAX WAS Replaced with Twisted Pair, And A Second Time When GigaBit Ethernet Came In. [4] In fact, Ethernet has been replaced by different technologies, despite the same name - TWICE. That is replaced by Twisted Pair (twisted pair) from COAX, the second time is Gigabit Ethernet arrival. `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `
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 During the calculation results of many power index curves, 50% of the corresponding software development steps were eliminated every 18 months. Unix is not eliminated in this phenomenon, but the opposite is a good result being retained. There is such a constant basic root base - language, system call, and tool - it will continue to use for many years, or even decades. There is something else, it will be unpredictable; even the entire operating system cycle is no longer used. Under UNIX, there is a quite obvious distinction is TRANSIENT (short) knowledge and Lasting knowledge, when a person can get some things accumulated before (about 90%), when a person learns it, it is like The leaves are deposited. This is the loyalty of the UNIX command.
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. most of Unix Stability and success, have to be due to its inherent strong, relevant design decisions (thanks: Elife's correction), Ken Thompson, Dennis Ritchie, Brian Kernighan, Doug Mcilroy, Rob Pike and other early UNIX developers have been Determine; and repeatedly demonstrate it again. Not only these, regarding design ideas, programming art, technical culture, etc., have grown around its early days. Since then, this tradition has been constantly successfully reproducing with UNIX. . ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.! The Case against Learning Unix Culture! `~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~