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 Automake

Automake is a tool for automatically generating "Makefile.in" files compliant with the GNU Coding Standards. Automake requires the use of Autoconf.

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 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.

C/C++ Language Reference

C Language Reference (C89, C99, C11)

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

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.

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".

Parallel Programming

Parallel Programming book by Paul E. Mc Kenney:

Secure Programming

Secure Programming for Linux and Unix HOWTO by dwheeler

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.

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.:

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

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

Linker and Loaders

Linkers and loaders by John R. Levine - 1999.

Linux Shell programming

Bash (GNU Bourne-Again Shell)

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).

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.

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

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

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.