The Architecture of Open Source Applications

Architects look at thousands of buildings during their training, and study critiques of those buildings written by masters. In contrast, most software developers only ever get to know a handful of large programs well—usually programs they wrote themselves—and never study the great programs of history. As a result, they repeat one another's mistakes rather than building on one another's successes.

Our goal is to change that. In these two books, the authors of four dozen open source applications explain how their software is structured, and why. What are each program's major components? How do they interact? And what did their builders learn during their development? In answering these questions, the contributors to these books provide unique insights into how they think.

If you are a junior developer, and want to learn how your more experienced colleagues think, these books are the place to start. If you are an intermediate or senior developer, and want to see how your peers have solved hard design problems, these books can help you too.

AOSA Volume 1

Volume 1 cover

Buy Volume I

Introduction Amy Brown and Greg Wilson
1. Asterisk Russell Bryant
2. Audacity James Crook
3. The Bourne-Again Shell Chet Ramey
4. Berkeley DB Margo Seltzer and Keith Bostic
5. CMake Bill Hoffman and Kenneth Martin
6. Eclipse Kim Moir
7. Graphite Chris Davis
8. The Hadoop Distributed File System Robert Chansler, Hairong Kuang, Sanjay Radia, Konstantin Shvachko, and Suresh Srinivas
9. Continuous Integration C. Titus Brown and Rosangela Canino-Koning
10. Jitsi Emil Ivov
11. LLVM Chris Lattner
12. Mercurial Dirkjan Ochtman
13. The NoSQL Ecosystem Adam Marcus
14. Python Packaging Tarek Ziadé
15. Riak and Erlang/OTP Francesco Cesarini, Andy Gross, and Justin Sheehy
16. Selenium WebDriver Simon Stewart
17. Sendmail Eric Allman
18. SnowFlock Roy Bryant and Andrés Lagar-Cavilla
19. SocialCalc Audrey Tang
20. Telepathy Danielle Madeley
21. Thousand Parsec Alan Laudicina and Aaron Mavrinac
22. Violet Cay Horstmann
23. VisTrails Juliana Freire, David Koop, Emanuele Santos, Carlos Scheidegger, Claudio Silva, and Huy T. Vo
24. VTK Berk Geveci and Will Schroeder
25. Battle For Wesnoth Richard Shimooka and David White
Bibliography

AOSA Volume 2

Volume 2 cover

Buy Volume II

Introduction Amy Brown and Greg Wilson
1. Scalable Web Architecture and Distributed Systems Kate Matsudaira
2. Firefox Release Engineering Chris AtLee, Lukas Blakk, John O'Duinn, and Armen Zambrano Gasparnian
3. FreeRTOS Christopher Svec
4. GDB Stan Shebs
5. The Glasgow Haskell Compiler Simon Marlow and Simon Peyton-Jones
6. Git Susan Potter
7. GPSD Eric Raymond
8. The Dynamic Language Runtime and the Iron Languages Jeff Hardy
9. ITK Luis Ibanez and Brad King
10. GNU Mailman Barry Warsaw
11. matplotlib John Hunter and Michael Droettboom
12. MediaWiki Sumana Harihareswara and Guillaume Paumier
13. Moodle Tim Hunt
14. nginx Andrey Alexeev
15. Open MPI Jeff Squyres
16. OSCAR Jennifer Ruttan
17. Processing.js Mike Kamermans
18. Puppet Luke Kanies
19. PyPy Benjamin Peterson
20. SQLAlchemy Michael Bayer
21. Twisted Jessica McKellar
22. Yesod Michael Snoyman
23. Yocto Elizabeth Flanagan
24. ZeroMQ Martin Sústrik
Bibliography

The Performance of Open Source Applications

POSA Cover

Buy POSA

Introduction Tavish Armstrong
1 High Performance Networking in Chrome Ilya Grigorik
2 From SocialCalc to EtherCalc Audrey Tang
3 Ninja Evan Martin
4 Parsing XML at the Speed of Light Arseny Kapoulkine
5 MemShrink Kyle Huey
6 Applying Optimization Principle Patterns to Component Deployment and Configuration Tools Doug C. Schmidt, William R. Otte, and Aniruddha Gokhale
7 Infinispan Manik Surtani
8 Talos Clint Talbert and Joel Maher
9 Zotonic Arjan Scherpenisse and Marc Worrell
10 Secrets of Mobile Network Performance Bryce Howard
11 Warp Kazu Yamamoto, Michael Snoyman, and Andreas Voellmy
12 Working with Big Data in Bioinformatics Eric McDonald and C. Titus Brown

500 Lines or Less

500Lines Cover

Buy 500 Lines

Introduction Michael DiBernardo
1 Blockcode: A visual programming toolkit Dethe Elza
2 A Continuous Integration System Malini Das
3 Clustering by Consensus Dustin J. Mitchell
4 Contingent: A Fully Dynamic Build System Brandon Rhodes and Daniel Rocco
5 A Web Crawler With asyncio Coroutines A. Jesse Jiryu Davis and Guido van Rossum
6 Dagoba: an in-memory graph database Dann Toliver
7 DBDB: Dog Bed Database Taavi Burns
8 An Event-Driven Web Framework Leo Zovic
9 A Flow Shop Scheduler Dr. Christian Muise
10 An Archaeology-Inspired Database Yoav Rubin
11 Making Your Own Image Filters Cate Huston
12 A Python Interpreter Written in Python Allison Kaptur
13 A 3D Modeller Erick Dransch
14 A Simple Object Model Carl Friedrich Bolz
15 Optical Character Recognition (OCR) Marina Samuel
16 A Pedometer in the Real World Dessy Daskalov
17 The Same-Origin Policy Eunsuk Kang, Santiago Perez De Rosso, and Daniel Jackson
18 A Rejection Sampler Jessica B. Hamrick
19 Web Spreadsheet Audrey Tang
20 Static Analysis Leah Hanson
21 A Template Engine Ned Batchelder
22 A Simple Web Server Greg Wilson

License and Royalties

This work is made available under the Creative Commons Attribution 3.0 Unported license. Please see the full description of the license for details. All royalties from sales of these books will be donated to Amnesty International.

Contributing

Dozens of volunteers worked hard to create this book, but there is still lots to do. You can help by reporting errors, by helping to translate the content into other languages and formats, or by describing the architecture of other open source projects. Please contact us the coordinators for various translations listed below, or mail us directly at gvwilson@third-bit.com if you would like to start a new translation or write a chapter yourself.