Development Resources
Development under Linux
Building systems
CMake
CMake is a cross-platform, open-source build system.CMake is used to control the software compilation process using simple platform-independent and compiler-independent configuration files. CMake generates native makefiles and workspaces that can be used in the compiler environment of your choice.
View the CMake online documentation to learn more about CMake.
The GNU build system
The GNU build system, also known as the Autotools, is a suite of programming tools designed to assist in making source code packages portable to many Unix-like systems.
Autotools is part of the GNU toolchain and is widely used in many free software and open source packages.
GNU Autoconf
Autoconf is an extensible package of M4 macros that produce shell scripts to automatically configure software source code packages. These scripts can adapt the packages to many kinds of UNIX-like systems without manual user intervention. Autoconf creates a configuration script for a package from a template file that lists the operating system features that the package can use, in the form of M4 macro calls.
GNU Autoconf manual (online version available in different formats).
GNU Automake
Automake is a tool for automatically generating "Makefile.in" files compliant with the GNU Coding Standards. Automake requires the use of Autoconf.
GNU Autoconf manual (online version available in different formats).
GNU Make
Make is a tool which controls the generation of executables and other non-source files of a program from the program's source files. Make gets its knowledge of how to build your program from a file called the makefile, which lists each of the non-source files and how to compute it from other files.
GNU Make manual (online version available in different formats).
GNU M4 macro processor
GNU M4 is a macro processor in the sense that it copies its input to the output expanding macros as it goes. Macros are either builtin or user-defined and can take any number of arguments. Besides just doing macro expansion, m4 has builtin functions for including named files, running UNIX commands, doing integer arithmetic, manipulating text in various ways, recursion etc... m4 can be used either as a front-end to a compiler or as a macro processor in its own right.
GNU M4 manual (online version available in different formats).
C/C++ Language Reference
C Language Reference (C89, C99, C11)
ISO/IEC 9899 - Programming Languages - C
The latest publicly available version of the C99 standard (pdf)
C++ Language Reference (C++98, C++03, C++11)
The GNU C Reference Manual
The GNU C Reference Manual is a reference for the C programming language, as implemented by the GNU C Compiler.
This manual is strictly a reference, not a tutorial. Its aim is to cover every linguistic construct in GNU C, but not the library functions (which are documented elsewhere).
You can also read an HTML version or a PDF version of the manual.
Computer Science
Foundations of Computer Science: C Edition - by Al Aho, Jeff Ullman
Foundations of Computer Science - Home Page
Chapter 1 - Computer Science: The Mechanization of Abstraction
Chapter 2 - Iteration, Induction, and Recursion
Chapter 3 - The Running Time of Programs
Chapter 4 - Combinatorics and Probability
Chapter 5 - The Tree Data Model
Chapter 6 - The List Data Model
Chapter 7 - The Set Data Model
Chapter 8 - The Relational Data Model
Chapter 9 - The Graph Data Model
Chapter 10 - Patterns, Automata, and Regular Expressions
Chapter 11 - Recursive Description of Patterns
Chapter 12 - Propositional Logic
Chapter 13 - Using Logic to Design Computer Components
Chapter 14 - Predicate Logic
On-Line Access to Code, Errata, and Notes
Anonymous ftp to host ftp-cs.stanford.edu.
Login with user name anonymous and give your name and host as a password.
You may then execute: cd fcsc
Advanced Linux Programming
Advanced Linux Programming by CodeSourcery LLC.
Book in pdf format available at: http://www.advancedlinuxprogramming.com/downloads.html
Code listing from Advanced Linux Programming: http://www.advancedlinuxprogramming.com/listings/
Network Programming
Beej’s Guide to Network Programming by Brian "Beej Jorgensen" Hall. A little how-to guide guide on network programming using Internet sockets, or "sockets programming".
View the online version (as multipage HTML).
Download for printing (as PDF).
Parallel Programming
Parallel Programming book by Paul E. Mc Kenney:
View the online version.
Secure Programming
Secure Programming for Linux and Unix HOWTO by dwheeler
View the online version (as multipage HTML).
Download for printing (as PDF).
Safe C Library (safeclib)
The Safe C Library provides bound checking memory and string functions per ISO/IEC TR24731.
These functions are alternative functions to the existing standard C library that promote safer, more secure programming. The latest upload supports building static library, a shared library and a linux kernel module.
Source code: http://sourceforge.net/projects/safeclib
License: MIT License
Secure Portability
This paper introduces the issues of portability for C applications between Unix variants, including semantic differences in libraries and system calls, API support and reasonable minimum platform requirements.
It also describes the approach used by Portable OpenSSH to the problems of secure portability and points to some areas where more work is needed by platform vendors.:
View the online version (as PDF).
Linux Kernel
Linux Source Code
The Linux source code can be browsed here or here (git reposiries).
Linux Kernel Web Sites
The official Linux Kernel Archives.
Kernel wikis.
Greg Kroah-Hartman's "Long Term Support Initiative" (LTSI).
Linux Device Drivers
Linux Device Drivers by Jonathan Corbet, Alessandro Rubini, and Greg Kroah-Hartman
Download for printing (as PDF).
Linux Device Drivers 3 Examples Updated: github repository, maintained by Javier Martinez Canillas:
Linux Device Drivers 3 (http://lwn.net/Kernel/LDD3/) book is now a few years old and most of the example drivers do not compile in recent kernels. Also, many new changes were introduced in the kernel since version 2.6.10. Examples for many ABIs are not covered in the book, like netlink sockets, threaded interrupt handlers, debugfs, etc.
This project aims to keep LDD3 example drivers up-to-date with recent kernels. The original code can be found at: http://examples.oreilly.com/9780596005900/
Besides the original drivers, there is a plan to add more examples that cover more recent kernel features like the listed before.
Linux Graphic Drivers
The book "Linux Graphic Drivers: an introduction" can be downloaded from freedesktop.org (PDF format).
This book, written by Stéphan Marchesin, is intended as an introduction to the inner workings and development of graphics drivers under Linux. Although its primary audience is the graphics driver developer, this book details the internals of the full Linux graphics stack and therefore can also be useful to application developers seeking to enhance their vision of the Linux graphics world.
Git: http://cgit.freedesktop.org/~marcheu/lgd/
Documentation and technical articles
Index page of all the articles published in the LWM (Linux Weekly News) Kernel Page.
List of the major changes done to the last available Linux kernel release on kernelnewbies.org.
List of changes of older releases can be found at Linux26Changes.
Futexes Are Tricky by Ulrich Drepper.
Linker and Loaders
Linkers and loaders by John R. Levine - 1999.
Book in postscript format available at: ftp://ftp.iecc.com/pub/linker
Sample code from Linker and Loaders.
Linux Shell programming
Bash (GNU Bourne-Again Shell)
Advanced Bash-Scripting Guide: an in-depth exploration of the art of shell scripting by Mendel Cooper.
BASH by example by Davide Madrisan.
Sed (The stream editor)
Sed is a stream editor. A stream editor is used to perform basic text transformations on an input stream (a file or input from a pipeline).
Over 100 handy one-liners for sed, including many simple, useful scripts, compiled by Eric Pement.
Writing if/elseif/else scripts with sed by Eric Pement.
Sed - An Introduction and Tutorial by Bruce Barnett
See also at sed.sourceforge.net, the ultimate reference page on sed.
The Perl Language
If you are new to the Perl language, good places to start reading are the introduction and overview at perlintro, which is a general intro for beginners and provides some background to help you navigate the rest of Perl's extensive documentation, and the extensive FAQ section.
Full documentation (contains HTML and PDF files).
Index to all the sections that of the on-line Perl documentation.
Linux manpages
Online documentation known as manpages (short for "manual pages").
Cryptography
Handbook of Applied Cryptography by A. Menezes, P. van Oorschot, and S. Vanstone - 1996
Book in pdf format available at: http://www.cacr.math.uwaterloo.ca/hac/
Typesetting with TeX
TeX, pronounced as "tech" is a professional typesetting system created in 1977 by Donald E. Knuth, a professor at Stanford University, and the author of famous The Art of Computer Programming.
Together with the METAFONT language for font description and the Computer Modern typefaces, it was designed with two main goals in mind: to allow anybody to produce high-quality books using a reasonable amount of effort, and to provide a system that would give the exact same results on all computers, now and in the future.
TeX provides a simple text-only code describing a typesetted document with a high quality output file in DVI (DeVice Independent) format, PostScript or PDF.
A Gentle Introduction to TeX by Michael Doob: pdf version and source code.
Make Documentation
AsciiDoc - Text based document generation
AsciiDoc is a plain text human readable/writable document format that can be translated to DocBook or HTML using the asciidoc(1) command.
You can then either use asciidoc(1) generated HTML directly or run asciidoc(1) DocBook output through your favorite DocBook toolchain or use the AsciiDoc a2x(1) toolchain wrapper to produce PDF, EPUB, DVI, LaTeX, PostScript, man page, HTML and text formats.
The AsciiDoc format is a useful presentation format in its own right: AsciiDoc markup is simple, intuitive and as such is easily proofed and edited.