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

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

6   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/

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

8   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?

9   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?

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

11   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?

13   GNU Build System

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

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

14   Diff und Patch

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   Diff, Patch und Git

Aufgaben zu Diff, Patch und Git

(April 2015)

15.1   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.2   Git (lokal)

In diesem Beispiel wird nur mit lokalen Repositories gearbeitet.

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.3   Gitlab Beispiel

(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 https://github.com/user/hsa-oss-demo15.git hallo
    (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).

  1. https://help.github.com/articles/set-up-git
  2. https://help.github.com/articles/create-a-repo
  3. https://help.github.com/articles/fork-a-repo
  4. https://help.github.com/articles/syncing-a-fork
  5. https://help.github.com/articles/about-pull-requests
  6. https://help.github.com/articles/pushing-to-a-remote

15.4   Workflows

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

https://about.gitlab.com/2014/09/29/gitlab-flow/

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

15.5   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

  2. Git Immersion

    http://gitimmersion.com

  3. Lars Vogel, Git Tutorial

    http://www.vogella.com/articles/Git/article.html

  4. git cheat sheet (command line ruby cheat sheet)

    http://cheat.errtheblog.com/s/git

  5. Git from the bottom up

    https://jwiegley.github.io/git-from-the-bottom-up

  6. Github Guides, https://guides.github.com (auch als PDF)
  7. Peter Bell; Brent Beer, Introducing Github, O'Reilly 2014. http://proquest.tech.safaribooksonline.de/book/databases/content-management-systems/9781491949801
  8. Gitlab Documentation, https://about.gitlab.com/documentation
  9. A Visual Git Reference http://marklodato.github.com/visual-git-guide/index-en.html
  10. Intro to Distributed Version Control (Illustrated) _ http://betterexplained.com/articles/intro-to-distributed-version-control-illustrated

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


OssFragen (zuletzt geƤndert am 2018-04-30 08:51:58 durch HubertHoegl)