https://aosabook.org/en/index.html#500lines
The Architecture of Open Source Applications
Software Design by Example in Python is now in beta.
All the material is free to read and re-use under open licenses, and
we would be very grateful for feedback and corrections.
If you enjoy these books, you may also enjoy Software Design by
Example in JavaScript, Research Software Engineering with Python,
JavaScript for Data Science, Teaching Tech Together, and It Will
Never Work in Theory.
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.
500 Lines or Less
500Lines Cover
Buy 500 Lines
Introduction Michael DiBernardo
1 Blockcode: A visual Dethe Elza
programming toolkit
2 A Continuous Integration Malini Das
System
3 Clustering by Consensus Dustin J. Mitchell
4 Contingent: A Fully Dynamic Brandon Rhodes and Daniel Rocco
Build System
5 A Web Crawler With asyncio A. Jesse Jiryu Davis and Guido van
Coroutines Rossum
6 Dagoba: an in-memory graph Dann Toliver
database
7 DBDB: Dog Bed Database Taavi Burns
8 An Event-Driven Web Leo Zovic
Framework
9 A Flow Shop Scheduler Dr. Christian Muise
10 An Archaeology-Inspired Yoav Rubin
Database
11 Making Your Own Image Cate Huston
Filters
12 A Python Interpreter Allison Kaptur
Written in Python
13 A 3D Modeller Erick Dransch
14 A Simple Object Model Carl Friedrich Bolz
15 Optical Character Marina Samuel
Recognition (OCR)
16 A Pedometer in the Real Dessy Daskalov
World
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
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
Applying Optimization Principle Patterns Doug C. Schmidt, William
6 to Component Deployment and R. Otte, and Aniruddha
Configuration Tools 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
Kazu Yamamoto, Michael
11 Warp Snoyman, and Andreas
Voellmy
12 Working with Big Data in Bioinformatics Eric McDonald and C.
Titus Brown
AOSA Volume 2
Volume 2 cover
Buy Volume II
Introduction Amy Brown and Greg Wilson
1. Scalable Web Architecture Kate Matsudaira
and Distributed Systems
Chris AtLee, Lukas Blakk, John
2. Firefox Release Engineering O'Duinn, and Armen Zambrano
Gasparnian
3. FreeRTOS Christopher Svec
4. GDB Stan Shebs
5. The Glasgow Haskell Simon Marlow and Simon Peyton-Jones
Compiler
6. Git Susan Potter
7. GPSD Eric Raymond
The Dynamic Language
8. Runtime and the Iron Jeff Hardy
Languages
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 Sustrik
Bibliography
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 Chet Ramey
Shell
4. Berkeley DB Margo Seltzer and Keith Bostic
5. CMake Bill Hoffman and Kenneth Martin
6. Eclipse Kim Moir
7. Graphite Chris Davis
The Hadoop Robert Chansler, Hairong Kuang, Sanjay Radia,
8. Distributed File Konstantin Shvachko, and Suresh Srinivas
System
9. Continuous C. Titus Brown and Rosangela Canino-Koning
Integration
10. Jitsi Emil Ivov
11. LLVM Chris Lattner
12. Mercurial Dirkjan Ochtman
13. The NoSQL Adam Marcus
Ecosystem
14. Python Packaging Tarek Ziade
15. Riak and Erlang/ Francesco Cesarini, Andy Gross, and Justin
OTP Sheehy
16. Selenium WebDriver Simon Stewart
17. Sendmail Eric Allman
18. SnowFlock Roy Bryant and Andres Lagar-Cavilla
19. SocialCalc Audrey Tang
20. Telepathy Danielle Madeley
21. Thousand Parsec Alan Laudicina and Aaron Mavrinac
22. Violet Cay Horstmann
Juliana Freire, David Koop, Emanuele Santos,
23. VisTrails 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
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.