#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 "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? 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/ Zitat: "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 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: * 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, Patch und Git ------------------- Hier sind die Aufgaben: ``_ 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) 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. .. vim: et sw=3 ts=3