Fragen zu Open-Source Software

1   Anregung: Suche nach Videos

Suchen Sie begleitend zur Vorlesung im Internet nach weiterführenden Informationen, die gerne in multimedialen Formaten sein dürfen: Vortragsvideos ("Tech Talks"), Filme (z.B. Youtube), gefilmte Vorlesungen, freie Hochschulskripte, Screencasts, Podcasts, eBooks, Wikipedia Einträge, Wikibooks und ähnliches. Bitte achten Sie darauf, nur freies Material zu nehmen. Diese Aufgabe sollen Sie bis zum Semesterende als "Hintergrundprozess" bearbeiten. Ich möchte die gefundenen Informationen auch auf meiner Homepage anderen zur Verfügung stellen.

Beispiele (beide auf Youtube - bitte mit Google suchen):

  • Linus Torvalds on git.
  • Carsten Dominik, Emacs Org-mode - a system for note-taking and project planning.

2   Was ist freie Software?

Bitte lesen Sie: Volker Grassmuck, "Was ist freie Software, wie entsteht sie, wer macht sie?" (S. 233 - 258), in http://freie-software.bpb.de/vgrass.html. Erarbeiten Sie sich die folgenden Themen:

  1. Quellcode und Objektcode
  2. Wie funktioniert ein Projekt der freien Software?
  3. Core-Team und Maintainer
  4. Die Community
  5. Entscheidungsfindung: »rough concensus and running code«
  6. Code-Forking
  7. Die Werkzeuge
  8. Debugging
  9. Freie Software als Prozess, nicht als Produkt.
  10. Die Motivation (S. 252/253)
  11. Softwarezyklus: Entwickler, Power-User, Endnutzer

Das Buch finden Sie hier: http://hhoegl.informatik.hs-augsburg.de/oss. Zusätzlich gibt es ein paar Lesetipps.

3   "Four Freedoms" Video

Sehen Sie sich das Video von Richard Stallman auf Youtube an: What is free software?

http://www.youtube.com/watch?v=uJi2rkHiNqg

Er dauert etwa zwei Minuten. Notieren Sie sich die Kernaussagen.

4   Eigene Softwareverwendung analysieren

Machen Sie eine tabellarische Aufstellung der Softwareprogramme, die Sie häufig im Alltag und im Studium auf dem PC oder Notebook verwenden. (Die Programme auf dem Smartphone interessieren nicht). Halten Sie sich in etwa an folgendes Beispiel:

Name     |    Zweck     |     OS    |    Lizenz   |  FLOSS
---------+--------------+-----------+-------------+--------
Firefox    WWW Browser     Win/Lin        MPL        ja
IExplorer  WWW Browser     Win           MS EULA     nein
...

5   Volker Grassmuck: Geschichte des Internet

Buch S. 180 bis 200.

  1. In welche drei Phasen lässt sich grob die Entwicklung des Internet einteilen?
  2. Was war das legendäre "IPTO" und wer war dessen Leiter?
  3. Was sollte der Computer nach dem ARPA Leitmotiv dem Menschen ausserdem ermöglichen? (neben der reinen Nutzung als Rechenmaschine)
  4. Welche zwei Forscher haben wann (fast zur gleichen Zeit) die gleiche Technik erfunden, auf denen heute immer noch das Internet basiert?
  5. Was entspricht im heutigen Internet ungefähr dem damaligen IMP?
  6. In welchen Dokumenten wird die Standardisierung des Internet festgehalten? Wer hat wann das erste solche Dokument geschrieben?
  7. Aus wieviel Knoten bestand das Netz 1971?
  8. Welche Protokolle wurden in den 70er Jahren zunächst implementiert?
  9. Wann wurde das TCP Protokoll zum ersten mal verwendet?
  10. Warum wurde das ARPAnet ein so grosser Erfolg? Siehe Zitat auf S. 186.
  11. Wann wurden die TCP/IP Protokolle in das Berkeley UNIX integriert? (S. 190). Was heisst "BSD"? Unter welcher Lizenz wurde diese Software veröffentlicht?
  12. Was war das USENET? Gibt es das heute noch?
  13. Wann, wo und von wem wurde das World Wide Web entwickelt?
  14. Ab wann beginnt ungefähr die kommerzielle Phase des Internet?

6   Volker Grassmuck: Geschichte der Softwareentwicklung

Bitte lesen Sie:

Beantworten Sie folgende Fragen zum Text:

  1. Wurde in der Frühzeit der Computer Software auch schon als kommerzielle Ware betrachtet?
  2. Worum dreht sich der "Open Letter to Fellow Hobbyists" Brief von Bill Gates?
  3. Wann kam der PC auf den Markt? Von welcher Firma stammt er?
  4. Welches Betriebssystem war vor MSDOS weit verbreitet?
  5. Wie hat Microsoft sein "Imperium" über die Jahre erweitert?
  6. Was versteht man unter dem "Infoware Paradigma" von Tim O'Reilly?
  7. Ist Ihrer Meinung nach Software ein Produktmarkt oder ein Dienstleistungsmarkt?
  8. Wie entstand UNIX?
  9. Wie entstand das GNU Projekt?
  10. Was versteht man unter der "Hacker Ethik"? Was versteht man heute unter einem "Hacker"?
  11. Was beinhaltet das "GNU Manifest"?
  12. Wie entstand GNU/Linux?
  13. Wie und wann wurde der Begriff "Open-Source Software" geprägt?

7   Aus der Open-Source-Geschichte lernen

Lesen Sie den zweiteiligen Artikel von Gundolf S. Freyermuth: "Aus der Open- Source-Geschichte lernen", erschienen im c't Magazin. Sie finden die Texte hier:

Beantworten Sie die Klausuraufgaben, die ich sehr häufig zu diesem Text stelle. Alte Klausuren finden Sie hier:

http://hhoegl.informatik.hs-augsburg.de/hhweb/oss/Klausuren/

8   OSS: GNU vs. OSS

Stellen Sie in einer Tabelle mit zwei Spalten die Freie Software (links) und die Open Source Software (rechts) gegenüber. Gehen Sie dabei nacheinander auf die Punkte (a) Gründungszeit, (b) Hauptinitiator, (c) Ziele, (d) zeitliche Entwicklung, (e) Lizenz(en), (f) wesentliche Erfolge und (g) Schwachpunkte ein. Welches Verhältnis haben beide zueinander?

Weitere Fragen zu GNU:

  1. Warum gründet Richard Stallman das GNU Projekt, wo es doch von der Berkeley Universität das BSD UNIX Projekt gibt, von dem man ganz viel Software hätte wiederverwenden können?
  2. Wie viel Zeit ist vergangen zwischen der Gründung des GNU Projekts und dem ersten freien GNU/Linux Betriebssystem?

    (a) 3 Jahre      (b) 10 Jahre       (c) 20 Jahre
  3. Was bedeutet GNU/Linux?

    • für Kostenbewusste
    • für User und Service Provider
    • für Profis und Programmierer
    • für Dienstleister, Verlage, Verkäufer und einzelne Hardware-Firmen
    • für Liberale
    • für alternative Globalisierer
    • für Firmen wie Microsoft
    • für die Medien- und Rechte-Industrie
    • für Entwicklungsländer
    • für Weitsichtige

    Übernommen von http://wilhelmtux.ch, OpenSource@School: Freie Software für die Schule

  4. Die FSF Europe schreibt monatlich einen Newsletter in verschiedenen Sprachen, in Deutsch siehe

    https://fsfe.org/news/newsletter.de.html

    Worum geht es hauptsächlich in diesen Texten? Sehen Sie sich ein paar dieser Briefe an.

9   OSS: Kathedrale

Lesen Sie "Die Kathedrale und der Bazaar" von Eric Raymond:

http://www.selflinux.org/selflinux/pdf/die_kathedrale_und_der_basar.pdf

Wie lauten die darin enthaltenen 19 Richtlinien für gute Code?

10   OSS: Lizenzen

Sehen Sie sich die Lizenz-Statistik von github an:

http://github.com/blog/1964-open-source-license-usage-on-github-com

Welches sind die beliebtesten Lizenzen?

Github möchte mehr Anwender zur Auswahl einer Lizenz bewegen. Aus diesem Grund gibt es http://choosealicense.com. Welche Lizenzen werden dort vorgestellt?

11   GNU: GNU Standards

Schauen Sie sich das GNU Manual zum Thema "Standards" an. Das Kommando info standards sollte zum Ziel führen. Sehen Sie sich darin die folgenden Themen an:

  • Program Behavior
  • Writing C
  • Managing Releases

Finden Sie heraus, zu welchem Zweck die Dateien README, ChangeLog, NEWS, Makefile und configure vorhanden sind.

Auf einem Debian Linux -- oder Verwandten wie Knoppix, Ubuntu, Kubuntu -- ist dieser Text im Paket gnu-standards enthalten.

12   GNU Hello

Das GNU "Hello" Programm demonstriert die vielen Arbeitsschritte, die bei einem echten freien Softwarepaket zu erledigen sind:

http://www.gnu.org/software/hello/

"Yes, this is another implementation of the classic program that
prints "Hello, world!" when you run it. Unlike the elementary
version often seen, GNU Hello processes its argument list to modify
its behavior, supports greetings in many languages, and so on. The
primary purpose of this program is to demonstrate how to write other
programs that do these things; it serves as a model for all of the
GNU coding standards."

Bitte das Programm holen (aktuell verwende ich hello-2.7.tar.gz), entpacken, kompilieren, installieren (lokal in Ihr Home!) und untersuchen. In INSTALL finden Sie ein wenig Hilfe. Das Programm demonstriert unter anderem:

  • Automake/Autoconf
  • Installation
  • Lokalisierung mit gettext (intl/ und po/)
  • Preprozessor (m4)
  • Dokumentationsformate (texinfo, man-pages, help2man, texi2html)
  • GNU Software Standard (ChangeLog, NEWS, TODO, THANKS, COPYING, ...)
  • Tests
  • Contributed material (contrib/)

Sehen Sie sich zum besseren Verständnis auch die GNU Coding Standards an.

Fragen zu GNU Hello

  • Wie kompiliert und installiert man das Programm? Sehen Sie sich auch die Datei INSTALL an.
  • Wie findet man heraus, welche Optionen configure versteht?
  • Wie kann man es in das eigene Homeverzeichnis installieren?
  • Wo findet man die Dokumentation und in welchem Format liegt sie vor?
  • In welchen Formaten kann man daraus die Dokumentation erstellen?
  • Wie kann man die Dokumentation online lesen?
  • Wo ist die Man-Page und in welchem Format liegt sie vor?
  • Was ist in gnulib/?
  • Was ist in po/?
  • Wie kann man das Programm in eine andere Sprache schalten?

14   GNU Build System

14.1   GNU: Configure, Make, Install

Holen Sie sich vom GNU Softwareverzeichnis ftp://ftp.gnu.org/pub/gnu ein Paket Ihrer Wahl - zum Beispiel das Paket bc, das ich in der Vorlesung gezeigt habe. Entpacken und installieren Sie es auf Ihrem Linux Betriebssystem. Bearbeiten Sie folgende Punkte:

  • Was macht das Programm?

  • Wie startet man das Programm?

  • Wo ist die Dokumentation des Programmes und wie liest man sie?

  • Wie kann man alle Kommandozeilenoptionen anzeigen?

  • Was macht folgende Konfigurations-Option:

    ./configure --prefix=/mein/pfad/

14.2   Beispiel von Peter Novotnik

Sehen Sie sich die Sourcen des "autoconf" Beispiels von Peter Novotnik im Verzeichnis http://hhoegl.informatik.hs-augsburg.de/oss/aufgaben/autotools_novotnik an. Vollziehen sie alle beschriebenen Schritte nach.

Sie können alles komplett im Archiv http://hhoegl.informatik.hs-augsburg.de/oss/aufgaben/autotools_novotnik.tar.gz herunterladen.

15   Diff, Patch und Git

15.1   Patch erstellen

Legen Sie ein Verzeichnis a an mit beliebigen Quelltexten und anderen Dokumenten. Machen Sie eine Kopie b dieses Verzeichnisses mit cp -rv a b.

Machen Sie nun Änderungen in b. Mit Hilfe von diff und patch können Sie diese Änderungen auf a übertragen.

  • Erstellen Sie einen Patch, der die Informationen enthält, um von b nach a zu kommen.

Fragen:

  • Kann man einen Patch mit dem ASCII-Editor ansehen? Was steht drin?
  • Kann man in einen Patch Kommentare schreiben?
  • Was bedeuten die Optionen -Naur bei diff?
  • Was bedeutet die Option -p1 bei patch?
  • Installieren Sie das Paket diffstat und finden Sie heraus, was es macht.
  • Finden Sie einige grafische diff Werkzeuge.

Literatur:

15.2   Diff und Patch

  1. Diffutils auf Linux installieren

    Debian/Ubuntu: apt-get install diffutils

    Dokumentation:

  2. Diff und Patch kennenlernen

  3. Patch anwenden

    Holen Sie sich von http://ftp.gnu.org/gnu/hello/ das GNU Hello Paket hello-2.10.tar.gz und wenden Sie folgenden Patch an:

    diff -Naur hello-2.10/src/hello.c hello-2.10-hh/src/hello.c
    --- hello-2.10/src/hello.c  2014-07-19 18:53:25.000000000 +0200
    +++ hello-2.10-hh/src/hello.c       2015-04-24 12:52:53.310796435 +0200
    @@ -57,7 +57,7 @@
     #endif
    
       /* Having initialized gettext, get the default message. */
    -  greeting_msg = _("Hello, world!");
    +  greeting_msg = _("Hello, this is open-source!");
    
       /* Even exiting has subtleties.  On exit, if any writes failed, change
          the exit status.  The /dev/full device on GNU/Linux can be used for

    Machen Sie am besten eine Kopie des originalen Quelltext-Verzeichnis und wenden Sie den Patch darauf an. Kompilieren Sie das Programm und führen Sie es aus.

  4. Patch erstellen

    Machen Sie nun im Quelltext des gerade kompilierten Programmes eine weitere Änderung, fügen Sie z.B. eine Option -x ein, die eine Dummy-Nachricht ausgibt. Erzeugen Sie nun einen Patch gegen das originale Quelltextverzeichnis von hello-2.10.

    Tipps:

    Die diff Ausgabe wird wahrscheinlich einige Zeilen enthalten, die ungefähr so aussehen (meine Arbeitskopie heisst hello-2.10-hh):

    Nur in hello-2.10-hh/lib: stdio.h.
    ...

    Diese Meldungen sollten Sie entfernen, indem Sie z.B. dem diff Programm mitgeben, dass es bestimmte Dateien ignorieren soll (bitte die Info-Seite oder die Manual-Seite ansehen). Eine andere Möglichkeit ist es, mit make distclean den Dateibaum am Anfang wieder in den Ausgangszustand zu versetzen.

15.3   Git Sitzung 1

Hier ist eine beispielhafte Sitzung an der Git Kommandozeile. Es werden nur lokale Repositories angelegt:

  1. Neues Projektverzeichnis anlegen

    mkdir Anton
    cd Anton
    vim README.md    # markdown
  2. Git Repo initialisieren

    git init
    git config --global user.name "Anton Muster"
    git config --global user.email "anton@bla.org"
    git config --list   # kurz: git config -l
    git add .
    git commit -a  (eingeben: Projekt A)
    
    hhoegl@aspire1 ~/oss/uebungen/git4/Anton $ git status
    # On branch master
    nothing to commit (working directory clean)
    
    hhoegl@aspire1 ~/oss/uebungen/git4/Anton $ git log
    commit 7b6c9d89e3cddb87fe492496591de332e6a0817d
    Author: Hubert Hoegl <Hubert.Hoegl@hs-augsburg.de>
    Date:   Sat Apr 25 22:30:34 2015 +0200
    
        Projekt A
    
    $ git branch
    * master
  3. Navigieren in den commits

    git log
    
    commit 68754266c37f71fa59448a6dd18a5c3b6ba9d7c2
    Author: Hubert Hoegl <Hubert.Hoegl@hs-augsburg.de>
    Date:   Sat Apr 25 22:43:51 2015 +0200
    
       Neue Datei demo.py
    
    commit 7b6c9d89e3cddb87fe492496591de332e6a0817d
    Author: Hubert Hoegl <Hubert.Hoegl@hs-augsburg.de>
    Date:   Sat Apr 25 22:30:34 2015 +0200
    
       Projekt A
    
    Weitere log Varianten:
    
     git log v1.0..
     git log test..master # reachable from test but not master
     git log test...master # reachable either test or master, not both
     git log --since="2 weeks ago"
     git log -p  # show patches
     git log --stat
    
    git checkout 7b6c
    ls
       oder
    git checkout HEAD~1
    ls
    git checkout 6875       # .git/refs/heads/master
    ls
    
    git checkout master~1
    git checkout master     # geht auf 6875...
    
    git checkout -b exp v3  # neuen Branch exp vom Tag v3 anlegen
    
    git show HEAD
    git show HEAD~1
    git show HEAD~2
  4. Lokales Repository klonen

    git clone -l Anton Berta

    Anton ist "upstream", Berta ist "downstream".

    Vergleiche:

    Berta$ git branch -r
    Berta$ git branch

    Nun macht Berta eine Änderung:

    Berta$ git diff
    Berta$ git status    # Sicht auf den Index
    Berta$ git log

    Anton hat nun eine Änderung gemacht, die zunächst committed wird. Dann holt sich Berta die Änderung mit:

    Berta$ git pull --summary ../Anton master

    "master" ist in diesem Fall der Branch auf Anton. Man könnte auch zusammen einen entfernten und einen lokalen Branch angeben mit:

    Berta$ git pull --summary ../Anton master:cool

    Dann wird Anton's master in den neuen Branch cool bei Berta angelegt.

    Berta$ git log    # Merge branch ...

    Berta legt neuen Branch "wow" an

    Berta$ git checkout -b wow
    Berta$ git branch
    Berta$ ... mache Änderungen
    Berta$ git checkout master

    In Anton die Änderungen von Berta holen

    git pull --summary ../Berta wow      # fetch und merge
    Ein zweiter pull sagt "Already up-to-date"

    Push ausprobieren: Berta pusht ihr Repository zu Evi

    Berta$ git push ../Evi master     # git push --all ../Evi
    Evi$ git status
    Evi$ git checkout master    # oder: git checkout

    Änderungen ansehen

    git whatchanged    # Aenderungen jedes commit ansehen
    git whatchanged -p src/bla/sub1.c    # -p is for textual diffs

    Remote

    Anton$ git remote add Berta ../Berta
    Anton$ git remote
           Berta
           git remote show Berta
    Anton$ git pull Berta master
    
           git remote -v    # remotes ausgeben
  5. Git Doku

    1. man pages sind im Paket git-man. Man ruft sie auf mit dem man Kommandozeilentool, z.B. man git-commit. Es gibt viele man pages zu git, üblicherweise liegen sie unter /usr/share/man/man1:

      git-add git-am git-annotate git-apply git-archive git-bisect git-blame
      git-branch git-bundle git-cat-file git-check-attr git-check-ignore
      git-check-mailmap git-checkout git-checkout-index git-check-ref-format
      git-cherry git-cherry-pick git-citool git-clean git-clone git-cola
      git-column git-commit git-commit-tree git-config git-count-objects
      git-credential git-credential-cache git-credential-cache--daemon
      git-credential-store git-daemon git-dag git-describe git-diff
      git-diff-files git-diff-index git-difftool git-difftool--helper
      git-diff-tree git-fast-export git-fast-import git-fetch git-fetch-pack
      git-filter-branch git-fmt-merge-msg git-for-each-ref git-format-patch
      git-fsck git-fsck-objects git-gc git-get-tar-commit-id git-grep git-gui
      git-hash-object git-help git-http-backend git-http-fetch git-http-push
      git-imap-send git-index-pack git-init git-init-db git-instaweb
      git-interpret-trailers git-log git-ls-files git-ls-remote git-ls-tree
      git-mailinfo git-mailsplit git-merge git-merge-base git-merge-file
      git-merge-index git-merge-one-file git-mergetool git-mergetool--lib
      git-merge-tree git-mktag git-mktree git-mv git-name-rev git-notes
      git-pack-objects git-pack-redundant git-pack-refs git-parse-remote
      git-patch-id git-prune git-prune-packed git-pull git-push
      git-quiltimport git-read-tree git-rebase git-receive-pack git-reflog
      git-relink git-remote git-remote-ext git-remote-fd git-remote-testgit
      git-repack git-replace git-request-pull git-rerere git-reset git-revert
      git-rev-list git-rev-parse git-rm git-send-pack git-shell git-sh-i18n
      git-sh-i18n--envsubst git-shortlog git-show git-show-branch
      git-show-index git-show-ref git-sh-setup git-stage git-stash git-status
      git-stripspace git-submodule git-subtree git-symbolic-ref git-tag
      git-unpack-file git-unpack-objects git-update-index git-update-ref
      git-update-server-info git-upload-archive git-upload-pack git-var
      git-verify-commit git-verify-pack git-verify-tag git-web--browse
      git-whatchanged git-worktree git-write-tree
    2. Die gesamte Git Dokumentation im Text- und HTML-Format ist im Paket git-doc. Siehe /usr/share/doc/git-doc/ nach der Installation.

      Man kann die Doku im Browser betrachten mit dem Kommando:

      firefox /usr/share/doc/git-doc/index.html

15.4   Git Sitzung 2

In dieser Aufgabe wird nur mit lokalen Repositories gearbeitet. Wenn Sie den vorherigen Abschnitt "Git Sitzung 1" angesehen haben, dann sollte diese Aufgabe kein Problem sein.

Vollziehen Sie die folgenden Arbeitsschritte auf der git Kommandozeile nach. Kommentieren Sie Ihre Eingaben.

  1. Wie legt man ein lokales Git Repository mit dem Namen Anton an? Fangen Sie mit einer README Datei an.
  2. Wie initialisiert man bei Git den Namen und die Email-Adresse des Autors?
  3. Wo legt git die Repository Dateien ab?

    Wo ist die Konfigurationsdatei?

  4. Schreiben Sie in einer Programmiersprache Ihrer Wahl ein paar Zeilen und committen Sie diese. Wiederholen Sie das, so dass zwei bis drei neue commits entstehen.
  5. Sehen Sie sich die Commit-Meldungen an (log).
  6. Gehen Sie zurück auf eine frühere Version und sehen Sie sich den Inhalt der Dateien an. Ist der Inhalt tatsächlich "aus der Vergangenheit"?
  7. Gehen Sie wieder auf die aktuelle Spitze des Master-Zweiges.
  8. Benennen Sie die aktuelle Version mit dem Tag "V1.0".
  9. Legen Sie einen neuen Branch "feature-1.1" an und committen Sie eine Änderung.
  10. Mergen Sie den neuen Branch wieder in den master.
  11. Angenommen, Sie wollen die Änderungen rückgängig machen, die Sie seit dem letzten commit gemacht haben. Wie macht man das?
  12. Klonen Sie nun das Repository Anton in das Repository Maria. Achten Sie darauf, dem clone ein Argument -l mitzugeben.
  13. Maria legt einen neuen Zweig "exp" an und macht Änderungen.
  14. Anton holt die Änderungen von Maria und legt sie in einen eigenen Zweig maria-exp.
  15. Anton macht einen merge von dem Zweig maria-exp auf den Zweig master.
  16. Löschen Sie den Zweig "exp" in Maria und den Zweig "maria-exp" in Anton.
  17. Wie baut man einen Patch, den Sie zugeschickt bekommen haben, in das Repository Anton ein? (Tipp: Erzeugen Sie den Patch selber mit dem Werkzeug diff. Die für den Patch gemachten Änderungen entfernen Sie anschliessed wieder, so wie das oben schon mal gefragt wurde).

15.5   Gitlab Beispiel mit Workflow

(Anmerkung: Früher haben wir das Beispiel auf Github gemacht. Deswegen enthalten unten die Links noch "github". Das Beispiel sollte aber leicht durch Gitlab zu ersetzen sein.)

Das ist ein Github Beispiel, das wir einmal im Praktikum gemacht haben. Durchlaufen Sie alle Schritte in einer Sitzung am Rechner und dokumentieren Sie, was Sie eingegeben haben. Legen Sie dazu in Gitlab ein Repository an:

https://r-n-d.informatik.hs-augsburg.de:8080

  1. Was ist der origin?
  2. Was bedeutet upstream?
  3. Machen Sie einen "fork" F des angegebenen Repository M getreu dem Motto "fork me on github".
  4. Klonen Sie Ihren entfernten fork F auf Ihren lokalen Rechner (L).
  5. Legen Sie in L einen eigenen Branch an, in dem Sie eine Erweiterung von M realisieren ("topic branch").
  6. Schieben Sie die Änderungen in L auf F.
  7. Schicken Sie einen "pull request" an den Maintainer.
  8. Was macht der Maintainer, wenn er einen "pull request" bekommt?

    Holt er die Änderungen sofort in den Zweig master, oder macht er einen eigenen Zweig auf? Kommentieren Sie die folgenden Zeile, die der Maintainer eingibt, sie stammen aus der github merge request Hilfe:

    (a) git checkout -b user-hallo master
    (b) git pull <URL>
    (c) git checkout master
    (d) git merge --no-ff user-hallo
    (e) git push origin master
  9. Wie kann man L mit M synchronisieren?

    Lesen Sie dazu "syncing-a-fork".

Literatur speziell zu dieser Aufgabe:

(Anmerkung: Die folgenden Links auf die Doku stammen noch von dem früheren Github Versuch. Gitlab enthält ähnliche Doku).

Github Flow:

15.6   Workflows

Vergleichen Sie den im Gitlab/Github Beispiel kennengelernten Workflow mit dem Gitlab workflow:

Es gibt auch noch den Git Flow, den Sie hier nachlesen können:

Vincent Driessen, A successful Git branching model, 2010 http://nvie.com/posts/a-successful-git-branching-model

16   Umfassendes Projekt

Hier ist eine Zusammenfassung von Tätigkeiten, die bei einem Projekt anfallen. Fallen Ihnen noch weitere ein?

  • Coding Styles (indent, astyle)
  • Editor (Vim, Emacs, XEmacs) oder IDE (KDevelop, Eclipse, Anjuta, Kate)?
  • Vim, Emacs, Editor Variablen
  • Ctags, Etags
  • C-File(s) erstellen
  • getopt, readline
  • Lokalisierung mit gettext
  • Quelltext durchwandern mit tags (vim, vim/tlist, emacs), cscope oder GNU Global
  • Libraries (static, dynamic): libtool
  • Debuggen mit gdb/ddd oder einer IDE (Eclipse, KDevelop, Anjuta, Emacs)
  • Sourcecode Analyse mit splint, lcov, gcov
  • Profiling mit gprof
  • Runtime debugger valgrind, electric fence, ccmalloc, dmalloc, mpatrol und andere
  • ChangeLog, README, INSTALL, Lizenz
  • Header in Quelltextfiles schreiben (Hinweis auf Lizenz, Copyright)
  • Kommentare aus Quelltext herausziehen mit doxygen
  • Man-Page (help2man, pod2man)
  • Texinfo docs, makeinfo
  • Makefile (clean, depend, build, tags, install)
  • OS Abhängigkeiten
  • autoconf/automake, autoproject (Demo Projekt "hammer" in http://hhoegl.informatik.hs-augsburg.de/oss/aufgaben/autoproject).
  • Verpacken in Source tar Archiv
  • Packen in Debian .deb oder Redhat .rpm Paket (src, bin)
  • Versionierung
  • diff/patch, sdiff, diff3, vimdiff, Emacs ediff
  • Unit testing (https://libcheck.github.io/check, GNU autounit, CUnit)
  • Regression testing (dejagnu)
  • Versionskontrolle mit Subversion oder Git
  • Releaseplanung
  • Trac (issue/bug tracker, Wiki, SVN Viewer)

17   Klausurfragen

Diese Fragen wurden schon mal in einer Klausur gestellt. Aber auch die anderen Fragen in diesem Text sind relevant!

17.1   Historisches

  1. Zeichnen Sie eine Zeitachse von 1960 bis jetzt und tragen Sie die wesentlichen Ereignisse aus der Welt der freien und offenen Software ein.
  2. Stellen Sie ausführlich (1 Seite) die historische Entwicklung dar, die zur Open-Source Software geführt hat.
  3. Wie entstand das GNU Projekt?
  4. Wer hat wann auf welche Weise den Begriff Open-Source Software geprägt?
  5. Hätte sich die Open-Source Szene auch dann entwickeln können, wenn der Mikroprozessor nie erfunden worden wäre, d.h. wenn es auch heute nur Grossrechner gäbe, die in der Hand von reichen Firmen oder Behörden wären?
  6. Geben Sie die im Skript aufgeführten sechs Prinzipien der Open-Source Bewegung wieder (aus dem Aufsatz von Freyermuth). Schreiben Sie ein paar Sätze zu jedem dieser Punkte.

17.2   Rechtliches/Lizenzen

  1. Sie bieten ihren Kunden einen Webdienst an. Unter welcher Lizenz müssen Sie den Quelltext an den Kunden weitergeben?

    1. GPLv2
    2. GPLv3
    3. AGPL
  2. Was bedeutet es, wenn eine Lizenz kompatibel mit der GPL ist?

    • Finden Sie heraus, ob die Apache Lizenz kompatibel zur GPL ist.
    • Finden Sie heraus, ob die MIT Lizenz kompatibel zur GPL ist.
    • Kann man GPL in BSD einschliessen, oder BSD in GPL?

    Achten Sie darauf, dass es unterschiedliche Versionen der Lizenzen gibt.

    Lit.: http://www.gnu.org/licenses/gpl-faq.html#WhatIsCompatible

  3. Gibt es Open-Source Lizenzen, die nicht für beliebige Projekte verwendet werden dürfen?
  4. Finden Sie ein paar Beispiele für mehrfach lizenzierte freie Software.
  5. Was ist die Idee hinter dem Projekt http://www.gpl-violations.org?
  6. Was ist die CC Lizenz?
  7. Die wichtigsten freien Lizenzen sind in den folgenden vier Gruppen gegliedert: (a) MPL, (b) BSD/MIT/Apache, (c) GPL/LGPL, (d) CC/FDL.

    • Ordnen Sie die Gruppen von sehr streng bis sehr liberal.
    • Welche wesentlichen Eigenschaften hat jede Lizenzgruppe?
    • Für welche Inhalte steht die Gruppe (d)?
  8. Was bedeutet die Kompatibilität von Lizenzen? Machen Sie zwei Beispiele.
  9. Nennen Sie die Gründe, warum manche Projekte die Apache Lizenz verwenden. Denken Sie an den Artikel Why we chose the Apache License.

    https://blog.chef.io/2009/08/11/why-we-chose-the-apache-license

  10. Eine Firma leitet ihr Produkt von GPL-lizenziertem Code ab. Entscheiden Sie, ob die folgenden sechs Punkte legal sind:

    1. Den GPL-Code verwenden
    2. Die Produktsoftware verteilen
    3. Den Quellcode des Produktes nicht mitliefern und auch nicht zugänglich machen
    4. Den Quellcode des GPL-Codes verändern
    5. Geänderten Code nicht offenlegen bzw. nicht zugänglich machen
    6. Beim Vertrieb der Software nicht auf die Lizenz hinweisen.
  11. Welches Buch könnten Sie einem Laien empfehlen, wenn er sich über die Thematik "Urheberrecht im Alltag" informieren wollte?
  12. Angenommen, Sie haben ein grosses Software-Framework geschrieben, mit dessen Hilfe andere Personen Anwendungen schreiben können (denken Sie an Qt, Spring oder Eclipse). Sie können sich nicht entscheiden, ob sie Ihr Framework unter eine freie Lizenz stellen wollen oder es als kommerzielles (geschlossenes) Produkt verkaufen möchten. Stellen Sie Vor- und Nachteile gegenüber.
  13. GPL-lizensierter Code darf durchaus Teile von BSD-lizenzierten Code enthalten und das Ergebnis darf wieder unter die GPL gestellt werden. Umgekehrt funktioniert das Ganze leider nicht. Wie könnten Sie es trotzdem erreichen, dass Ihr freier Code von beiden Lagern verwendet werden kann?
  14. Beschreiben Sie kurz die Entwicklung des Urheberrechts so wie es im Artikel von Spielkamp, "Die Zukunft der Ideen" zu lesen ist.
  15. Sie haben Ihr Programm unter die GPL gestellt und möchten nun Code dazufügen, der mit der folgenden freien Lizenz versehen ist. Dürfen Sie das? Bitte mit Begründung.

    Copyright (c) <YEAR>, <OWNER>
    All rights reserved.
    
    Redistribution and use in source and binary forms, with or without
    modification, are permitted provided that the following conditions are
    met:
    
    Redistributions of source code must retain the above copyright notice,
    this list of conditions and the following disclaimer.
    
    Redistributions in binary form must reproduce the above copyright
    notice, this list of conditions and the following disclaimer in the
    documentation and/or other materials provided with the distribution.
    
    Neither the name of the <ORGANIZATION> nor the names of its
    contributors may be used to endorse or promote products derived from
    this software without specific prior written permission.
    
    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  16. Beschreiben Sie wie die Creative-Commons Lizenz funktioniert.
  17. Angelehnt an Lizenzen für freie und offene Software werden auch immer mehr Texte, Bücher, Diplomarbeiten und künstlerische Werke unter freie Lizenzen gestellt. Nennen Sie zwei dieser Lizenzen und beschreiben Sie grob, was diese jeweils leisten.
  18. Wieso wird Software die der Berkeley License unterliegt so oft in kommerziellen geschlossenen Produkten verwendet?
  19. Beschreiben Sie die vier Freiheiten, die einem von der GNU General Public License gewährt werden.
  20. Erläutern Sie den Begriff Copyleft.
  21. Eine Firma leitet ihr Produkt von GPL-lizenzierten Code ab. Entscheiden Sie, ob die folgenden sechs Punkte legal sind:

    1. Den GPL-Code verwenden
    2. Die Produktsoftware verteilen
    3. Den Quellcode des Produktes nicht mitliefern und auch nicht zugänglich machen
    4. Den Quellcode des GPL-Codes verändern
    5. Geänderten Code nicht offenlegen bzw. nicht zugänglich machen
    6. Beim Vertrieb der Software nicht auf die Lizenz hinweisen.
  22. Beschreiben Sie die wesentlichen Eigenschaften der GNU General Public License.
  23. Welche vier Punkte müssen erfüllt sein, damit man von freier Software sprechen kann?
  24. Die Open-Source Definition umfasst 10 Punkte. Geben Sie fünf davon an. Es genügt jeweils ein Satz zur Erklärung.
  25. Viele Firmen bedienen sich an BSD-lizenziertem Quelltext und bauen ihn in kommerzielle geschlossene Programme ein. Unter anderem hat Microsoft anfänglich den Netzwerkstack von BSD UNIX in Windows eingebaut.

    • Stimmt es, dass man die Quelltextdateien unverändert lassen muss, ansonsten aber alles damit tun und lassen darf?
    • Was muss man beachten, wenn man Quelltext unter der BSD Lizenz verwendet?
  26. Welchen rechtlichen Gefahren ist freie Software ausgesetzt?

17.3   Geschäftsmodelle

Nennen Sie drei Firmen, die ihr Geschäft mit freier Software machen. Beschreiben Sie, wie die dahinter stehenden Geschäftsmodelle aussehen.

Es gibt den Satz "Open-Source Software verletzt alle klassischen Management-Regeln". Nehmen Sie dazu Stellung.

Man kann mit Open-Source Software durchaus Geld verdienen. Nennen Sie drei Open-Source Geschäftsmodelle und beschreiben Sie diese kurz. Geben Sie jeweils eine Firma als Beispiel an.

17.4   Gemeinschaftsbildung

Geben Sie stichpunktartig den Inhalt des Artikels Open Source Community Building von Stürmer/Myrach wieder, beschränken Sie sich auf folgende Abschnitte:

  • Eigenschaften und Verhalten von Projektverantwortlichen.
  • Voraussetzungen für ein Open-Source Projekt.
  • Förderung des Community-Aufbaus.

Im Kapitel 2 mit dem Titel Getting Started des Buches Producing Open-Source Software von Karl Fogel geht es um eine Einführung in die Thematik "Software in einer Gemeinschaft schreiben". Geben Sie einen kurzen Überblick zum Inhalt dieses Kapitels. In der Vorlesung haben wir daraus auch "Kriterien zur Untersuchung von freien Projekten" abgeleitet.

Beschreiben Sie -- gerne auch mit unterstützender Grafik! -- die Zusammenhänge in der Gemeinschaft eines freien Projektes.

Denken Sie dabei an

  • Wer sagt, was man zu tun hat?
  • Wer wird Maintainer?
  • Wie wird die Planung gemacht? (denken Sie an die Python Welt)
  • Was muss ein Neuling (Volunteer) machen?
  • Entlohnung, Bezahlung
  • Eigeninitiative
  • Nutzungswert
  • Kernteam, Tester, Anwender
  • Patches

Gerne dürfen Sie auch zusätzliche Punkte nennen.

Die kooperative Entwicklung von Software wurde von der Open-Source Gemeinde in beispielhafter Weise vorangetrieben. Beschreiben Sie, welche Dienste sich bei der kollaborativen Softwareentwicklung etabliert haben.

Die kooperative Entwicklung von Software wurde von der Open-Source Gemeinde in beispielhafter Weise vorangetrieben. Nennen Sie zwei aktuelle "Marktplätze" für freie Software im Internet und deren Funktionsumfang.

17.5   Emacs

Nennen Sie die Emacs Kommandos für folgende Aufgaben:

  • Textdatei öffnen
  • Navigation in der Textdatei (links, rechts, oben, unten)
  • Textdatei schliessen
  • Textdatei speichern und schliessen

Die Emacs Tastenkürzel sind ein Quasi-Standard in der Welt der offenen Software, da sie von der Shell bis zum Web-Browser verstanden werden. Nennen Sie die Kürzel für (a) Zeile nach oben, (b) Zeile nach unten, (c) Zeichen nach links, (d) Zeichen nach rechts.

17.6   FOSS

Manche Geräte aus unserem Alltag (keine PCs!) werden mit freier Software gesteuert (Tipp: eCos, Embedded-Linux). Erläutern Sie eines dieser Projekte.

Berichten Sie kurz über das letzte grössere Ereignis in der Welt der Open-Source Software, das Sie über Presse, Radio oder Fernsehen aufgeschnappt haben.

Stellen Sie in einer Tabelle mit zwei Spalten die Freie Software (links) und die Open Source Software (rechts) gegenüber. Gehen Sie dabei nacheinander auf die Punkte (a) Gründungszeit, (b) Hauptinitiator, (c) Ziele, (d) zeitliche Entwicklung, (e) Lizenz(en), (f) wesentliche Erfolge und (g) Schwachpunkte ein. Welches Verhältnis haben beide zueinander?

Die Entwicklung von Software nach dem klassischen proprietären Modell (also nicht-freie Software) kann im Vergleich zum freien Entwicklungsprinzip manchmal sogar die bessere Wahl sein. Nennen Sie drei Szenarien, bei denen kommerzielle Software eher gut abschneidet und freie Software eher schlecht.

Sie beraten eine Firma, die erwägt, ihre bisher kommerzielle Software durch Open-Source Software zu ersetzen. Machen Sie Aussagen zu folgenden Punkten:

  1. Allgemeine Kosten der Umstellung und Lizenzgebühren
  2. Güte der Software (Fehler pro 1000 Zeilen)
  3. Antwortzeiten bei auftretenden Problemen und Fehlern
  4. Sicherheit bei Netzwerksoftware
  5. Gewährleistung
  6. Interoperabilität mit kommerziellen Produkten

Wieso sollte man immer von GNU/Linux sprechen, nicht nur von Linux allein? Skizzieren Sie kurz die beiden Stränge der Entwicklung bis zum Aufeinandertreffen.

Welches Betriebssystem ist von grundlegender Bedeutung für die Entwicklung der Open-Source Szene? Beschreiben Sie ausführlich, wie dieses Betriebssystem entstanden ist und welche Vorkehrungen es für die Datenkommunikation hat.

Was verstehen Sie unter der Abkürzung FUD? Wieso wird diese Abkürzungen oft bei hitzigen Diskussionen über die Gegensätze von kommerzieller und freier Software verwendet?

Entgegen den Ansichten Ihres Chefs sind Sie von der Idee der Open-Source Software überzeugt. Schreiben Sie mindestens fünf Argument hin, die Ihren Chef überzeugen sollten, dass Open-Source Software doch eine ernstzunehmende Angelegenheit ist.

Die Open-Source Grundidee wird zunehmend in Bereichen angewendet, die nichts mit Software zu tun haben. Nennen Sie zwei dieser Bereiche und erläutern Sie diese kurz.

Wofür steht die Abkürzung "GNU"? Geben Sie auf einer knappen Seite einen Überblick über das GNU Projekt. Gehen Sie auf den Initiator, die Anfangszeit, die ersten Produkte, auf die Lizenz und den aktuellen Status ein.

In welcher Beziehung zueinander steht das Betriebssystem Linux und das GNU Projekt? Welche Lizenz hat Linus Torvalds für den Linux Kernel gewählt? Was hat das GNU Projekt hier in Zukunft noch zu bieten?

Erläutern Sie das Verhältnis zwischen der Free Software Foundation (FSF) und der Open Source Initiative (OSI). Was sind jeweils die grundlegenden Ideen beider Glaubensrichtungen?

Welche Rolle spielen offene Standards bei freier Software? Geben Sie Beispiele an.

17.7   SCM

Fragen zum github Projekt vom Sommer 2014

  • Was kann man mit Github alles machen? ("features")
  • Was bedeutet "fork me on github"?. Zeichnen Sie eine Skizze in der man Github, einen Maintainer und mehrere Beitragende sieht (siehe Tafelbild).
  • Beschreiben Sie die git Operationen, die der Beitragende regelmässig auszuführen hat.
  • Beschreiben Sie die git Operationen, die der Maintainer regelmässig auszuführen hat.
  • Welche grafischen Git-Werkzeuge können Sie empfehlen?

Beschreiben Sie, wie ein moderner Hosting-Dienst von freier Software funktioniert, der ein verteiltes Sourcecode-Management-System wie Git oder Mercurial verwendet. Sie wählen einen konkreten Hosting-Dienst aus. Beschreiben Sie typische Operationen, die mit den Repositories gemacht werden.

Welche kommerziellen Hosting-Dienste für freie Software kennen Sie? Nennen Sie vier dieser Dienste und beschreiben Sie jeweils knapp die wesentlichen Eigenschaften.

Beschreiben Sie den gesamten Git Workflow bei einem grösseren konkreten Projekt wie dem U-Boot Bootloader oder dem Linux-Kern. Gerne dürfen Sie auch ein Diagramm mit Erläuterungen zeichnen.

Wie lauten jeweils die Git Kommandos für folgende Aufgaben? Wählen Sie selber geeignete Namen für Verzeichnisse und Branches.

  • Aktuelles Arbeitsverzeichnis zu einem Git Repository machen.
  • Eine Änderung einchecken.
  • Einen neuen Branch anlegen und darin Änderungen machen.
  • Wieder in den anfänglichen Branch schalten und die Änderungen von c) übernehmen.

Ihnen obliegt die Verwaltung eines neuen offenen Projektes und sie sollen es für die Welt zugänglich machen. Sie wollen aber keine eigene technische Infrastruktur aufbauen.

  1. Welche Möglichkeiten gibt es in diesem Fall? Nennen Sie drei dieser Möglichkeiten.
  2. Gehen Sie näher auf das Angebot von einem dieser Dienste ein (siehe Artikel von Timo Hoenig).

Verteilte Versionierung mit Git

  1. Worin unterscheidet sich die Entwicklung mit Subversion (svn) und mit Git grundlegend?
  2. Wozu gibt es sowohl in svn als auch in git die branches?
  3. Skizzieren Sie wie ein grosses Projekt (z.B. Linux Kernel oder U-Boot Bootloader) mittels Git verwaltet wird. Wie ist das Ganze hierarchisch gegliedert?
  4. Was bedeutet in diesem Zusammenhang upstream? Wieso ist es schlecht, wenn der Upstream-Maintainer wie so oft keine Änderungen bekommt?
  5. Wie werden Änderungen an der Software genannt und wie werden diese mit Git erstellt?

Wie funktioniert grundsätzlich ein verteiltes Versionskontrollsystem? Nennen Sie ein konkretes Beispiel.

Welche technische Infrastruktur würden Sie einem grösseren Open-Source Projekt geben. Machen Sie eine Zusammenfassung von Kapitel 3 des Buches "Producing OSS" von Karl Fogel.

Wie würden Sie vorgehen, wenn Sie ein kleines bis mittleres Open-Source Projekt auf Ihrem Rechner (Server) verwalten müssten? Welche Software würden Sie installieren, damit Sie den heute üblichen Funktionsumfang abdecken? Beschreiben Sie ausführlich die angebotenen Dienste.

Jemand möchte ein Open Source Projekt initiieren und die dazu notwendige Werkzeuge und Dienste auf seinem eigenen Server installieren. Zu welcher minimalen Anzahl von Softwarepaketen raten Sie diesem Menschen? Schreiben Sie ein paar Sätze zu jedem Paket. Würden Sie einen anonymen Schreibzugriff auf das Repository erlauben? Macht es einen Unterschied in der Wahl der Werkzeuge, ob an dem Projekt 5 oder 500 Leute teilnehmen?

Was verbirgt sich hinter dem URL http://www.sourceforge.net? Bitte gehen Sie ausführlich auf das Dienstangebot ein. Warum hat die FSF einen eigenen Dienst http://savannah.gnu.org eingerichtet?

  1. Wie funktioniert die zentrale Versionsverwaltung von Projekten, die von mehreren örtlich getrennten EntwicklerInnen bearbeitet werden? Wählen Sie entweder CVS oder Subversion und schreiben Sie die Kommandozeilen hin für (i) den initialen Check-In, (ii) einen Update Ihres privaten Workspace aus dem Repository, und (iii) für einen Check-In. (4 Punkte)
  2. Sie haben zwei Verzeichnisse src/ und src-orig mit Quelltexten, die darin in weiteren Unterverzeichnissen angeordnet sind. Schreiben Sie die Kommandozeilen hin, um den Unterschied zwischen beiden Verzeichnissen herauszufinden. Dieser Unterschied soll als Patch formatiert sein und zu einem anderen Entwickler geschickt werden, der den Patch dann auf das Verzeichnis src-orig anwendet, um daraus das Verzeichnis src/ zu erzeugen. (4 Punkte)
  3. Sie bekommen ein Paket magicsoft-1.2.4.tar.gz und sollen es auf einem Unix-Rechner installieren. Was müssen Sie dazu alles tun? (4 Punkte)
  4. Dokumente des GNU Projektes werden in einem speziellen Format geschrieben. Wie heisst dieses Format und wie heisst das daraus generierte Format der Hilfedateien? Welche Möglichkeiten gibt es, um diese Hilfetexte zu lesen? (2 Punkte)
  5. Wie heisst das GNU Dokument, in dem u.a. genau beschrieben wird, welche Dateien bei einem GNU Projekt angelegt werden müssen. (2 Punkte)
  6. Für fast alle "Standardprobleme" bei der Softwareentwicklung stellt das GNU Projekt Lösungen bereit. Was machen Sie, wenn Sie (i) Kommandozeilenparameter auswerten und (ii) eine eigene Kommandozeile in Ihrem Programm brauchen. Bitte auch ganz grob den dazu notwendigen C-Quelltext skizzieren. (4 Punkte)

17.8   Programme

Ein Bekannter möchte im Bereich Wissenschaftliches Rechnen von teuren kommerziellen Programmen auf freie Software umsteigen. Ihn interessieren die Bereiche

  • Numerische Berechnungen und Simulation
  • Computer-Algebra
  • Statistik
  • Visualisierung

Nennen Sie zwei freie Programme aus jedem Bereich.

17.9   Software Engineering

  • Warum ist eine Konfiguration vor dem Kompilieren überhaupt bei freier Software nötig?
  • Wie wendet man CMake als Alternative zu Autoconf an? (Hausaufgabe)
  • Wie macht man bei freier Software eine Internationalisierung?

Autoconf/Automake (Artikel über Autotools von Peter Novotnik)

  1. Wie kann man beim Konfigurationsprozess bestimmte Features ein- und ausschalten?
  2. Was muss man tun damit ein Programm nicht in /usr/... installiert wird, sondern in /home/meinname/local/?
  3. Was enthalten configure.in, Makefile.am und config.h.in?
  4. Wie werden configure.in, Makefile.am und Makefile.in von den Autools weiterverarbeitet? Zum Veranschaulichen verwenden Sie ein Diagramm mit Pfeilen.
  5. Wie wird das Paketarchiv erstellt?

  1. Nennen Sie drei Konfigurationswerkzeuge, die dazu entworfen wurden, um Quelltext automatisch für verschiedene Plattformen zu kompilieren.
  2. Sie haben ein Quelltextarchiv src.tar.gz und möchten es auf Ihrem Rechner unter Linux installieren. Was müssen Sie tun?
  3. Sie haben ein Quelltextarchiv cool-1.0.tar.gz für Unix/Linux und möchten es unter Microsoft Windows kompilieren. Wie gehen Sie vor, so dass möglichst wenig Aufwand nötig ist?
  4. Wo schauen Sie nach, wenn Sie wissen möchten welcher Kodierstil bei GNU Projekten empfohlen wird?
  5. Welche Option verrät Ihnen die Version des gcc?
  6. Welche Option des gcc extrahiert die dependencies?
  7. Sie müssen schnell eine Man-Page schreiben. Wie gehen Sie vor?
  8. Sie möchten schnell verschiedene Versionen einer lokale Datei verwalten. SVN und CVS sind Ihnen viel zu umfangreich. Welches Werkzeug wählen Sie? Bitte mit Anwendungsbeispiel.

Bei dieser Aufgabe geht es um die GNU "autotools".

  1. Wie heissen die zwei wichtigsten Input-Dateien bei der Konfiguration mit automake und autoconf? In welche Zieldatei werden diese durch das Anwenden von automake und autoconf abgebildet?
  2. Wozu dient das optionale config.h.in? Wie wird es weiterverarbeitet?
  3. Unter welchen Bedingungen kann man ./configure direkt aufrufen und was passiert dabei?
  4. Nennen Sie fünf gebräuchliche Targets des generierten Makefiles.
  5. Was verstehen Sie unter den Maintainerfiles?

Erläutern Sie genau den folgenden Code:

static struct option long_options[] =
{
   {"help",    no_argument, &help_flag, 1},
   {"version", no_argument, 0, 'v'},
   {"file",    required_argument, 0, 'f'},
   {0, 0, 0, 0}
};
...
c = getopt_long (argc, argv, "abc:d:f:v",
                 long_options, &option_index);

Erläutern Sie alle notwendigen Schritte um bei einem Projekt das Werkzeug exuberant ctags einzusetzen.


Die beiden Open-Source Programmiererinnen Anna und Maria haben beide das Quelltextarchiv hui-2.0.tar.gz. Anna macht mehrere Änderungen bei den Quellen und möchte dies Maria mitteilen, so dass auch sie über die aktuellen Quellen verfügt. Stellen Sie die Kommandos die Anna und Maria tippen nebeneinander in zwei Spalten gegenüber.


Ihr Bekannter interessiert sich für das "Subversion" Versionskontrollsystem. Sie haben bereits ein Repository unter https://meinsvn.com angelegt und zeigen Ihm nun die wichtigsten Kommandos import, co, ci, add, rm, update, mv, info. Dazu haben Sie ein Demo-Projekt unter ./demo angelegt. Schreiben Sie die Kommandos hin.

Wie macht man einen "Schnappschuss" der aktuellen Version der Software?


Ein Demo-Programm besteht aus main.c und util.c. Das Makefile soll daraus verschiedene Varianten von ausführbaren Programmen generieren, die z.B. statisch oder dynamisch gelinkt werden.

  1. Ergänzen Sie die fehlenden, mit XXX markierten Zeilen im folgenden Makefile.
  2. Verwenden Sie nun libtool zum Kompilieren der Bibliotheken.
%%.o: %%.c
        XXX generiere .o aus .c. Soll sich zum Debuggen
        XXX als auch fuer shared library eignen.

nolib: main.o util.o
        gcc -g -o main main.o util.o

static: libutil.a main.o
        gcc -o main main.o -L. -lutil

libutil.a: util.o
        XXX generiere libutil.a aus util.o

dynamic: main.o libutil.so.1 solink
        gcc -o main main.o -L. -lutil

libutil.so.1: util.o
        XXX generiere libutil.so.1 aus util.o

solink:
        ln -sf libutil.so.1 libutil.so

Sie bekommen ein Paket magicsoft-1.2.4.tar.gz und sollen es auf einem Unix-Rechner installieren. Was müssen Sie dazu alles tun? Diese Kommandos bauen auf einem komplexen Softwaresystem auf, das normalerweise vom Anwender versteckt läuft. Wie heissen diese Programme und was leisten sie ganz grob?

Dokumente des GNU Projektes werden in einem speziellen Format geschrieben. Wie heisst dieses Format und wie heisst das daraus generierte Format der Hilfedateien? Welche Möglichkeiten gibt es, um diese Hilfetexte zu lesen?

Wie heisst das GNU Dokument, in dem u.a. genau beschrieben wird, welche Dateien bei einem GNU Projekt angelegt werden müssen.

Sie entpacken ein typisches Open-Source Programmpaket, z.B. libftdi.tar.gz. Sie sehen nach dem Entpacken folgende Dateien:

COPYING.LIB  README        config.sub    libftdi-config.in  missing
ChangeLog    aclocal.m4    configure     libftdi.pc.in      mkinstalldirs
Makefile.am  config.guess  configure.in  libftdi.spec       src/
Makefile.in  config.h.in   install-sh    ltmain.sh          stamp-h.in
  1. Beschreiben Sie die Bestandteile des GNU Konfigurationssystems (im Skript die 9 Punkte des GNU Buildsystems).
  2. Beschreiben Sie alle Schritte die nötig sind, um das Paket zu installieren.

Sie haben die Verzeichnisse src-orig/ (das Original) und src/ (von Ihnen modifiziert). Wie erstellen Sie einen Patch zwischen diesen beiden Verzeichnissen? Sie verwenden dazu natürlich Kommandozeilenwerkzeuge unter Unix/Linux. Berücksichtigen Sie auch Dateien, die es in einem der beiden Verzeichnisse nicht gibt. Welches Kommando muss ich eintippen, damit ich Ihren Patch bei mir anwenden kann?


Geben Sie die neun Punkte an, die notwendig sind, um ein Software-Projekt mit den Werkzeugen autoconf und automake zu konfigurieren.

18   Sonstiges

  1. Bringen Sie in Erfahrung, was die Apache Software Foundation (ASF) im letzten Jahr geleistet hat. Informieren Sie sich durch den Jahresberich "ASF Annual Report 2017".
  2. Was ist bei github im letzten Jahr alles passiert? Informieren Sie sich auf https://octoverse.github.com.
  3. Was macht OpenBIT (https://openbit.eu/openbit)?

OssFragen (last edited 2020-04-11 18:56:23 by HubertHoegl)

|| Kontakt