Participate in development

You may want to participate in the AIT QKD R10 development. If so and the legal aspects have been cleared then this in the following is a good way to do so:

1. Get familiar with git. has a great and comprehensive documentation online.

2. Get an "Developer"-account for the git repository

3. Clone the sources.

$ git clone

The git repository holds (at least) 2 branches: the master branch and the develop branch. The master branch holds the current, latest stable QKD R10 software whereas the develop branch is current HEAD of development. You may not push into the master branch on the AIT git repository, this is restricted. You may consult A successful Git branching model for further thoughts on git branching.

4. Switch into the develop

$ git checkout develop

5. Check the for further instructions on how to build the software.

6. Work on the software and make your changes.

7. Add your changes to your (local) index.

$ git add ...

8. Commit you changes (locally).

$ git commit

Hint: check A Note About Git Commit Messages for some ideas how nice git log lines could be done.

Up till now now changes are done in the AIT QKD R10 repository. There is one crucial step missing:

9. Push your changes to the AIT QKD repository.

$ git push -v

Do not add intermediate, IDE related, or other generated files to the repository. Binary data is ok, if it is part of shared files to be shipped (like icons and images) or is used in some test cases and reproduction is expensive and cumbersome.

Needed Skills for Development

If you are interested in participating or developing with the AIT QKD software you need at least these skills:

  • A profound understanding of Unix/Linux
  • Shell scripting (BASH)
  • TCP/IP networking
  • SystemV and systemd init concepts
  • Multithreading
  • C++11 ("old school" C/C++ is not sufficient)
  • Shared objects (aka "dll") programming
  • CMake
  • Qt4/Qt5 (Networking and GUI)
  • Security Algorithms, Protocols and Implementations
  • FHS (File Hierarchy Standard)
  • DBus
  • SSH
  • Basic packaging and deployment techniques

Some of these are more needed than others rating C++11 and Multithreading the top most important.