#format rst
#language de
==============================
Fragen zu Open-Source Software
==============================
.. contents:: Inhalt
.. sectnum::
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.
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
#. Wie funktioniert ein Projekt der freien Software?
#. Core-Team und Maintainer
#. Die Community
#. Entscheidungsfindung: »rough concensus and running code«
#. Code-Forking
#. Die Werkzeuge
#. Debugging
#. Freie Software als Prozess, nicht als Produkt.
#. Die Motivation (S. 252/253)
#. Softwarezyklus: Entwickler, Power-User, Endnutzer
Das Buch finden Sie hier: http://hhoegl.informatik.hs-augsburg.de/oss. Zusätzlich gibt
es ein paar Lesetipps.
"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.
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
...
Volker Grassmuck: Geschichte der Softwareentwicklung
----------------------------------------------------
Bitte lesen Sie:
* Grassmuck, Kapitel *Geschichte der Softwareentwicklung*, Buch
S. 202 bis 232, http://freie-software.bpb.de.
Beantworten Sie folgende Fragen zum Text:
1. Wurde in der Frühzeit der Computer Software auch schon als
kommerzielle Ware betrachtet?
#. Worum dreht sich der "Open Letter to Fellow Hobbyists" Brief von
Bill Gates?
#. Wann kam der PC auf den Markt? Von welcher Firma stammt er?
#. Welches Betriebssystem war *vor* MSDOS weit verbreitet?
#. Wie hat Microsoft sein "Imperium" über die Jahre erweitert?
#. Was versteht man unter dem "Infoware Paradigma" von Tim O'Reilly?
#. Ist Ihrer Meinung nach Software ein Produktmarkt oder ein
Dienstleistungsmarkt?
#. Wie entstand UNIX?
#. Wie entstand das GNU Projekt?
#. Was versteht man unter der "Hacker Ethik"? Was versteht man heute
unter einem "Hacker"?
#. Was beinhaltet das "GNU Manifest"?
#. Wie entstand GNU/Linux?
#. Wie und wann wurde der Begriff "Open-Source Software" geprägt?
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:
* https://www.heise.de/ct/artikel/Offene-Geheimnisse-285236.html
* https://www.heise.de/ct/artikel/Die-neue-Hackordnung-285274.html
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/
..
Open Source: The Unauthorized White Papers
------------------------------------------
Lesen Sie das Kapitel 1 im Buch von Rosenberg:
* Donald K. Rosenberg, Open Source: The Unauthorized White Papers. Chapter 1:
The Origins of Open Source Software.
http://www.stromian.com/Book/Chap1.html
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?
#. 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
#. 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
#. 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.
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?
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?
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.
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?
GNU: Getopt, readline, libdemo
------------------------------
Demo-Programme für getopt, readline und libdemo.
* ``_
* ``_
* ``_
Im Verzeichnis ``_ sind alle drei Demos vereint.
GNU Build System
----------------
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/
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 ``_
herunterladen.
.. XXX
Beispiel von amjith
```````````````````
Vollziehen Sie das Autoconf Tutorial in ``_ nach.
Autoproject
```````````
Erstellen eines Autoconf Gerüstes
* mit "autoproject", siehe http://hhoegl.informatik.hs-augsburg.de/oss/aufgaben/autoproject
* mit der freien IDE *Anjuta*
* sonstige Möglichkeiten?
Diff, Patch und Git
-------------------
(2015)
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:
* Larry Ayers, Patch for beginners
http://elk.informatik.hs-augsburg.de/oss/ayers1.html
* Diff, Patch and Friends
http://elk.informatik.hs-augsburg.de/oss/diff-patch.html
Diff und Patch
``````````````
1. **Diffutils auf Linux installieren**
Debian/Ubuntu: apt-get install diffutils
Dokumentation:
- Online: https://www.gnu.org/software/diffutils/manual/diffutils.html
#. **Diff und Patch kennenlernen**
- Larry Ayers, Patch for beginners
http://hhoegl.informatik.hs-augsburg.de/oss/ayers1.html
- Diff, Patch and Friends
http://hhoegl.informatik.hs-augsburg.de/oss/diff-patch.html
#. **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.
#. **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.
Git Sitzung
```````````
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
#. 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
Date: Sat Apr 25 22:30:34 2015 +0200
Projekt A
$ git branch
* master
#. Navigieren in den commits
::
git log
commit 68754266c37f71fa59448a6dd18a5c3b6ba9d7c2
Author: Hubert Hoegl
Date: Sat Apr 25 22:43:51 2015 +0200
Neue Datei demo.py
commit 7b6c9d89e3cddb87fe492496591de332e6a0817d
Author: Hubert Hoegl
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
#. 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 sein 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
#. 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
Git (lokal)
```````````
In dieser Aufgabe wird nur mit lokalen Repositories gearbeitet.
Wenn Sie den vorherigen Abschnitt "Git Sitzung" 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.
#. Wie initialisiert man bei Git den Namen und die Email-Adresse des Autors?
#. Wo legt git die Repository Dateien ab?
Wo ist die Konfigurationsdatei?
#. 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.
#. Sehen Sie sich die Commit-Meldungen an (log).
#. 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"?
#. Gehen Sie wieder auf die aktuelle Spitze des Master-Zweiges.
#. Benennen Sie die aktuelle Version mit dem Tag "V1.0".
#. Legen Sie einen neuen Branch "feature-1.1" an und committen Sie eine
Änderung.
#. Mergen Sie den neuen Branch wieder in den master.
#. Angenommen, Sie wollen die Änderungen rückgängig machen, die Sie seit
dem letzten commit gemacht haben. Wie macht man das?
#. Klonen Sie nun das Repository ``Anton`` in das Repository ``Maria``.
Achten Sie darauf, dem ``clone`` ein Argument ``-l`` mitzugeben.
#. Maria legt einen neuen Zweig "exp" an und macht Änderungen.
#. Anton holt die Änderungen von Maria und legt sie in einen eigenen
Zweig ``maria-exp``.
#. Anton macht einen *merge* von dem Zweig ``maria-exp`` auf den Zweig
``master``.
#. Löschen Sie den Zweig "exp" in Maria und den Zweig "maria-exp" in
Anton.
#. 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).
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*?
#. Was bedeutet *upstream*?
#. Machen Sie einen "fork" F des angegebenen Repository M getreu dem Motto
"fork me on github".
#. Klonen Sie Ihren entfernten fork F auf Ihren lokalen Rechner (L).
#. Legen Sie in L einen eigenen Branch an, in dem Sie eine Erweiterung
von M realisieren ("topic branch").
#. Schieben Sie die Änderungen in L auf F.
#. Schicken Sie einen "pull request" an den Maintainer.
#. 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
(c) git checkout master
(d) git merge --no-ff user-hallo
(e) git push origin master
#. 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).
- https://help.github.com/articles/set-up-git
- https://help.github.com/articles/create-a-repo
- https://help.github.com/articles/fork-a-repo
- https://help.github.com/articles/syncing-a-fork
- https://help.github.com/articles/about-pull-requests
- https://help.github.com/articles/pushing-to-a-remote
Github Flow:
- https://guides.github.com/introduction/flow
- http://www.eqqon.com/index.php/Collaborative_Github_Workflow
Workflows
`````````
Vergleichen Sie den im Gitlab/Github Beispiel kennengelernten Workflow mit
dem Gitlab workflow:
- https://about.gitlab.com/2014/09/29/gitlab-flow/
- http://doc.gitlab.com/ce/workflow/README.html
Zur Erinnerung: Es gibt einen Gitlab Server am Fachbereich Informatik, den
Sie jederzeit für Ihre Projekte verwenden können: https://r-n-d.informatik.hs-augsburg.de:8080
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
Allgemeine weiterführende Informationen zu Git
``````````````````````````````````````````````
Videos
1. Tech Talk: Linus Torvalds on git, 2007 (1:10)
http://www.youtube.com/watch?v=4XpnKHJAok8
2. Randal Schwartz: Git: A brief introduction, 2012
https://www.youtube.com/watch?v=bwQqz3cb1Jc
Texte
1. Be Lynn, Git Magic, 2007
http://www-cs-students.stanford.edu/~blynn/gitmagic
#. Git Immersion
http://gitimmersion.com
#. Lars Vogel, Git Tutorial
http://www.vogella.com/articles/Git/article.html
#. git cheat sheet (command line ruby cheat sheet)
http://cheat.errtheblog.com/s/git
#. Git from the bottom up
https://jwiegley.github.io/git-from-the-bottom-up
#. Github Guides, https://guides.github.com (auch als PDF)
#. Peter Bell; Brent Beer, Introducing Github, O'Reilly 2014.
http://proquest.tech.safaribooksonline.de/book/databases/content-management-systems/9781491949801
#. Gitlab Documentation, https://about.gitlab.com/documentation
#. A Visual Git Reference
http://marklodato.github.com/visual-git-guide/index-en.html
#. Intro to Distributed Version Control (Illustrated) _
http://betterexplained.com/articles/intro-to-distributed-version-control-illustrated
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)
Klausurfragen
-------------
Diese Fragen wurden schon mal in einer Klausur gestellt. Aber auch die anderen Fragen
in diesem Text sind relevant!
Historisches
````````````
.. ss14-oss-zeitachse
1. Zeichnen Sie eine Zeitachse von 1960 bis jetzt und tragen Sie die
wesentlichen Ereignisse aus der Welt der freien und offenen Software
ein.
.. history
#. Stellen Sie ausführlich (1 Seite) die historische Entwicklung
dar, die zur Open-Source Software geführt hat.
.. gnu-foundation
#. Wie entstand das GNU Projekt?
.. opensource
#. *Wer* hat *wann* auf *welche Weise* den Begriff
*Open-Source Software* geprägt?
.. 0304-nomicro
#. 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?
.. 6prinzipien
#. 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.
Rechtliches/Lizenzen
````````````````````
..
- Was wird speziell bei der *Affero GPL* (AGPL) berücksichtigt?
1. Sie bieten ihren Kunden einen Webdienst an. Unter welcher Lizenz
müssen Sie den Quelltext an den Kunden weitergeben?
a. GPLv2
b. GPLv3
c. AGPL
#. 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
#. Gibt es Open-Source Lizenzen, die nicht für beliebige Projekte
verwendet werden dürfen?
#. Finden Sie ein paar Beispiele für mehrfach lizenzierte freie Software.
#. Was ist die Idee hinter dem Projekt http://www.gpl-violations.org?
#. Was ist die CC Lizenz?
#. 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)?
#. Was bedeutet die *Kompatibilität* von Lizenzen? Machen Sie
zwei Beispiele.
#. 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
#. Eine Firma leitet ihr Produkt von GPL-lizenziertem Code ab.
Entscheiden Sie, ob die folgenden sechs Punkte legal sind:
a. Den GPL-Code verwenden
b. Die Produktsoftware verteilen
c. Den Quellcode des Produktes nicht mitliefern und auch nicht zugänglich
machen
d. Den Quellcode des GPL-Codes verändern
e. Geänderten Code nicht offenlegen bzw. nicht zugänglich machen
f. Beim Vertrieb der Software nicht auf die Lizenz hinweisen.
#. Welches Buch könnten Sie einem Laien empfehlen, wenn er sich über die
Thematik "Urheberrecht im Alltag" informieren wollte?
#. 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.
#. 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?
#. Beschreiben Sie kurz die Entwicklung des Urheberrechts so wie es im
Artikel von Spielkamp, "Die Zukunft der Ideen" zu lesen ist.
#. 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) ,
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 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.
#. Beschreiben Sie wie die *Creative-Commons* Lizenz funktioniert.
#. 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.
#. Wieso wird Software die der *Berkeley License* unterliegt so oft in
kommerziellen geschlossenen Produkten verwendet?
#. Beschreiben Sie die *vier Freiheiten*, die einem von der GNU
*General Public License* gewährt werden.
#. Erläutern Sie den Begriff *Copyleft*.
#. 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.
#. Beschreiben Sie die wesentlichen Eigenschaften der GNU *General
Public License*.
#. Welche vier Punkte müssen erfüllt sein, damit man von freier
Software sprechen kann?
#. Die Open-Source Definition umfasst 10 Punkte. Geben Sie fünf davon
an. Es genügt jeweils ein Satz zur Erklärung.
#. 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?
#. Welchen rechtlichen Gefahren ist freie Software ausgesetzt?
Geschäftsmodelle
````````````````
.. ss14-geschaeftsmodelle
Nennen Sie drei Firmen, die ihr Geschäft mit freier Software machen.
Beschreiben Sie, wie die dahinter stehenden Geschäftsmodelle aussehen.
.. oss-violates-management
Es gibt den Satz "Open-Source Software verletzt alle klassischen
Management-Regeln". Nehmen Sie dazu Stellung.
.. business
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.
Gemeinschaftsbildung
````````````````````
.. - community.rst -
.. stuermer-myrach-community-building
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.
.. community-poss
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.
.. community-struktur
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.
.. kooperation
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.
.. 0304-kooperation
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.
Emacs
`````
.. ss14-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
.. ss05-emacs
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.
FOSS
`````
.. oss-gadget
Manche Geräte aus unserem Alltag (keine PCs!) werden mit freier Software
gesteuert (Tipp: eCos, Embedded-Linux). Erläutern Sie eines dieser Projekte.
.. 0304-aktuell
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.
.. ss05-gnu-vs-opensource
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?
.. vorteile-nonoss
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.
.. qualitaet
Sie beraten eine Firma, die erwägt, ihre bisher kommerzielle Software durch
Open-Source Software zu ersetzen. Machen Sie Aussagen zu folgenden Punkten:
(i) Allgemeine Kosten der Umstellung und Lizenzgebühren
(ii) Güte der Software (Fehler pro 1000 Zeilen)
(iii) Antwortzeiten bei auftretenden Problemen und Fehlern
(iv) Sicherheit bei Netzwerksoftware
(v) Gewährleistung
(vi) Interoperabilität mit kommerziellen Produkten
.. gnu-linux
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.
.. 0304-operating-system"
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.
.. fud
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?
.. chef
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.
.. nonsoft
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.
.. 0304-gnu
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.
.. 0304-gnu-hurd
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?
.. 0304-fsf
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?
.. 0304-standards
Welche Rolle spielen *offene Standards* bei freier Software? Geben Sie
Beispiele an.
SCM
````
.. Verwaltung von freien Software Projekten: frueher auf eigenem
Rechner, nun auf github oder aehnlichem.
.. ss14-github
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?
.. distrib-scm-hosting
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.
.. ss10-oss-hosting
Welche kommerziellen Hosting-Dienste für freie Software kennen Sie? Nennen
Sie vier dieser Dienste und beschreiben Sie jeweils knapp die wesentlichen
Eigenschaften.
.. git-workflow
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.
.. git-09
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.
.. os-hosting
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.
(a) Welche Möglichkeiten gibt es in diesem Fall? Nennen Sie *drei* dieser Möglichkeiten.
(b) Gehen Sie näher auf das Angebot von einem dieser Dienste ein
(siehe Artikel von Timo Hoenig).
.. git
Verteilte Versionierung mit Git
(a) Worin unterscheidet sich die Entwicklung mit Subversion (svn) und mit Git
grundlegend?
(b) Wozu gibt es sowohl in svn als auch in git die *branches*?
(c) Skizzieren Sie wie ein grosses Projekt (z.B. Linux Kernel oder U-Boot
Bootloader) mittels Git verwaltet wird. Wie ist das Ganze hierarchisch
gegliedert?
(d) Was bedeutet in diesem Zusammenhang *upstream*? Wieso ist es schlecht,
wenn der Upstream-Maintainer wie so oft keine Änderungen bekommt?
(e) Wie werden Änderungen an der Software genannt und wie werden diese mit
Git erstellt?
.. SS07
.. verteiltes-vc
Wie funktioniert grundsätzlich ein *verteiltes* Versionskontrollsystem?
Nennen Sie ein konkretes Beispiel.
.. producingoss
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.
.. ss06-oss-management
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.
.. ss05-minimal-tools
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?
.. ss05-sourceforge
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?
.. softwareentwicklung
(a)
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)
(b)
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)
(c)
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)
(d)
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)
(e)
Wie heisst das GNU Dokument, in dem u.a. genau beschrieben wird,
welche Dateien bei einem GNU Projekt angelegt werden müssen. (2 Punkte)
(f)
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)
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.
.. progs
Nennen Sie jeweils zwei freie Programme aus den Bereichen: (a)
Programmiersprachen, (b) Bildverarbeitung, (c) wissenschaftliches Rechnen,
(d) Zeichenprogramme, und (e) Statistik.
Software Engineering
````````````````````
.. ss14-aufgabe-a3
* 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*?
----
.. novotnik-autoconf
**Autoconf/Automake** (Artikel über Autotools von Peter Novotnik)
(a) Wie kann man beim Konfigurationsprozess bestimmte Features ein- und ausschalten?
(b) Was muss man tun damit ein Programm nicht in ``/usr/...`` installiert wird,
sondern in ``/home/meinname/local/``?
(c) Was enthalten configure.in, Makefile.am und config.h.in?
(d) Wie werden configure.in, Makefile.am und
Makefile.in von den Autools weiterverarbeitet? Zum
Veranschaulichen verwenden Sie ein Diagramm mit Pfeilen.
(e) Wie wird das Paketarchiv erstellt?
----
.. ss06-misc-starter
(a) Nennen Sie drei Konfigurationswerkzeuge, die dazu entworfen
wurden, um Quelltext automatisch für verschiedene Plattformen zu
kompilieren.
(b) Sie haben ein Quelltextarchiv src.tar.gz und möchten
es auf Ihrem Rechner unter Linux installieren. Was müssen Sie tun?
(c) 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?
(d) Wo schauen Sie nach, wenn Sie wissen möchten welcher Kodierstil
bei GNU Projekten empfohlen wird?
(e) Welche Option verrät Ihnen die Version des gcc?
(f) Welche Option des gcc extrahiert die dependencies?
(g) Sie müssen schnell eine Man-Page schreiben. Wie gehen Sie vor?
(h) 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.
----
.. ss06-autotools-overview"
Bei dieser Aufgabe geht es um die GNU "autotools".
(a) 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?
(b) Wozu dient das optionale ``config.h.in``? Wie wird es
weiterverarbeitet?
(c) Unter welchen Bedingungen kann man ``./configure`` direkt
aufrufen und was passiert dabei?
(d) Nennen Sie fünf gebräuchliche Targets des generierten
Makefiles.
(e) Was verstehen Sie unter den *Maintainerfiles*?
----
.. ss06-getopt
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);
----
.. ss06-ctags
Erläutern Sie alle notwendigen Schritte um bei einem Projekt das
Werkzeug *exuberant ctags* einzusetzen.
----
.. ss06-patch
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.
----
.. ss06-subversion
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?
----
.. ss06-gcc
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.
(a) Ergänzen Sie die fehlenden, mit XXX markierten Zeilen im
folgenden Makefile.
(b) 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
..
foo = """
# %.o: %.c
# gcc -c -fPIC -g -Wall $<
# 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
# ar rcs libutil.a util.o
# dynamic: main.o libutil.so.1 solink
# gcc -o main main.o -L. -lutil
# libutil.so.1: util.o
# gcc -shared -Wl,-soname,libutil.so -o libutil.so.1 util.o -lc
# solink:
# ln -sf libutil.so.1 libutil.so
"""
.. ss05-make-install
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?
.. ss05-texinfo
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?
.. ss05-gnu-standards
Wie heisst das GNU Dokument, in dem u.a. genau beschrieben wird, welche Dateien
bei einem GNU Projekt angelegt werden müssen.
.. gnu-config
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
(a) Beschreiben Sie die Bestandteile des GNU
Konfigurationssystems (im Skript die 9 Punkte des GNU Buildsystems).
(b) Beschreiben Sie alle Schritte die nötig sind, um das Paket zu
installieren.
----
.. patch
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?
----
.. aconf
Geben Sie die neun Punkte an, die notwendig sind,
um ein Software-Projekt mit den Werkzeugen *autoconf* und
*automake* zu konfigurieren.
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".
#. Was ist bei *github* im letzten Jahr alles passiert? Informieren Sie sich auf
https://octoverse.github.com.
#. Was macht *OpenBIT* (https://openbit.eu/openbit)?
.. vim: et sw=3 ts=3