Open-source programming

The subject provides insight into world of open-source projects and techniques proved to be usesfull for larger applications and operating systems development. Reasons leading to the founding of GNU project is discussed and possible andwantages of this approach for cooperation even for commercial subjects is shown. Usual tools used for development, debugging and source code control and functional testing are described. Description of POSIX type operating system structure and introduction to the driver development, user-space libraries and user graphics environments comes next. The last topic is introduction how to use earlier described techniques and support for embedded applications development and real-time control.

Assessment + Examination
Lectures contents

1. Introductory words for subject; Open-source software, project GNU,
license and operating systems and projects based on
its philosophy
2. GNU project - foundation of basic development tools and their use
3. Overview of major Open-source projects (even as guide for choice of semester work)
4. Founding of independent project and participation in existing project
5. Tools infrastructure (version control, bug tracking, communication, wiki)
6. Commercial model; Social and decision making concept
7. Inter-developers communication
8. Version releasing, packaging and continual development
9. Volunteers, evolution and branching
10. Licenses, copyrights and patents
11. Target platforms, portability and open-source hardware
12. Linux kernel - foundation, development, structure and drivers
13. Future trends and development

Tutorials contents

Introduction to GNU/Linux system environment and overview of development tools:

Implementation of simple application in "C" language using automake
or alternative methods for program assembly.

Work with large project and its history:

Good candidate is Linux kernel.

Examination an learning from history (git), development trees, configuration and building

Own work to implement simple character device.

Individual work:

The student select work on it own or some existing project. The project
should have structure of project using conventional programming
languages (C, C++, Java, Mono) and should follow portability rules (POSIX)
or should be targetted to some open source operating system/components development.

Work on project/patches, interaction with project community, consultations with exercises leader.
Project result presentation and evaluation and rating of the work success, incorporation into mainline projects and the student ability to cooperate
and communicate with other team members.