< Return to Video

36C3 - Das nützlich-unbedenklich Spektrum

  • 0:00 - 0:19
    36C3 Intro Musik
  • 0:20 - 0:23
    Herald: Jetzt mit dem Talk 'Das nützlich-
    unbedenklich Spektrum' Ich muss ihn, wie
  • 0:23 - 0:27
    gesagt, nicht vorstellen: Fefe.
  • 0:27 - 0:30
    Applaus
  • 0:30 - 0:31
    Mikrofonklopfen
  • 0:37 - 0:40
    Fefe: Ja guten Morgen. Freut mich, dass
    das alles hier so voll ist. Ein Glück,
  • 0:40 - 0:44
    dass das hier nicht Halle 1 ist. Das wäre
    ja schlimm, so viele Leute. Ja, dieser
  • 0:44 - 0:47
    Vortrag, ich muss gleich ein bisschen
    Erwartungsmanagement machen. Ich habe
  • 0:47 - 0:51
    nämlich eigentlich letztes Jahr einen
    anderen Vortrag eingereicht über TCB-
  • 0:51 - 0:54
    Minimierung und das wäre so ein bisschen
    technisch gewesen. Was man denn machen
  • 0:54 - 1:00
    kann als Programmierer. Der ist abgelehnt
    worden. Ich weiß nicht, warum. War voll.
  • 1:00 - 1:03
    Den habe ich dieses Jahr wieder
    eingereicht, aber es sollte nicht so
  • 1:03 - 1:06
    aussehen, als wenn ich die ärgern will,
    also habe ich noch einen Talk eingereicht.
  • 1:06 - 1:11
    Den haben die natürlich genommen.So, das
    heißt, den musste ich jetzt schnell
  • 1:11 - 1:13
    vorbereiten.
    Publikum lacht
  • 1:13 - 1:19
    Ja, das Problem ist, das ist eher so ein
    Gedankengang als eine strukturierte
  • 1:19 - 1:23
    Darstellung. Ich hoffe, es wird trotzdem
    hilfreich. Aber es ist nicht so
  • 1:23 - 1:28
    strukturiert wie meine sonstigen Vorträge.
    Ich fange einfach mal an. Also es gibt
  • 1:28 - 1:32
    mehrere Herleitungen, die im Grunde zum
    selben Ergebnis führen und ich lasse euch
  • 1:32 - 1:37
    einfach mal teilhaben.Es fing relativ früh
    in meiner Karriere an, da habe ich mich
  • 1:37 - 1:41
    entschieden: ich werde nie Software
    schreiben, von der vielleicht Leben
  • 1:41 - 1:46
    abhängen könnten, so medizinische Geräte,
    Atomkraftwerke, war so meine Vorstellung,
  • 1:46 - 1:51
    Militär natürlich sowieso nicht. Und dann
    habe ich aber jemanden getroffen, der Code
  • 1:51 - 1:54
    für Atomkraftwerke schreibt. Und das war
    so ein Typ: "Ey das ist doch ganz
  • 1:54 - 2:00
    einfach." Das heißt, wenn die Leute, die
    ihre Grenzen einschätzen können, das nicht
  • 2:00 - 2:04
    machen, dann machen es halt die anderen.
    Publikum lacht
  • 2:05 - 2:09
    Das soll jetzt nicht verallgemeinernd sein.
    Ich habe tatsächlich noch einen anderen
  • 2:09 - 2:12
    getroffen, der war nicht so, aber ich
    meine, diese Art von Personen gibt es
  • 2:12 - 2:18
    halt. Die Problematik an der Stelle ist,
    glaube ich, dass man Programmieren
  • 2:18 - 2:23
    explorativ lernt: das ist häufig nicht so
    einen Kurs, den man durchgeht, sondern man
  • 2:23 - 2:29
    läuft halt rum und sucht Grenzen. Das
    heißt aber auch, dass man per Definition
  • 2:29 - 2:33
    die Grenzen noch nicht kennt, denn die
    will man ja gerade finden. Das heißt aber
  • 2:33 - 2:38
    auch, dass alle Leute im Grunde immer
    gerade an ihrer Grenze arbeiten. Wenn
  • 2:38 - 2:41
    Leute Software schreiben, dann gehen sie
    so weit, wie sie glauben, dass sie gerade
  • 2:41 - 2:47
    noch können. Und das heißt aber im
    Umkehrschluss, dass die Technologie, die
  • 2:47 - 2:51
    da draußen ausgerollt wird, das sind
    hauptsächlich eben nicht abgehangene
  • 2:51 - 2:55
    wohlverstandene Sachen, sondern das sind
    genau die Technologien, die der Typ gerade
  • 2:55 - 3:01
    noch verstanden hat. Das ist so ein
    bisschen ein Problem, und das wird nochmal
  • 3:01 - 3:05
    verstärkt dadurch, dass wir eben heute so
    eine Modularisierungs- und
  • 3:05 - 3:09
    Abhängigkeitswelle haben, dass Leute
    einfach noch Module von anderswo mit
  • 3:09 - 3:17
    reinziehen und sich einfach im Grunde ohne
    Grundlage in der Realität vorstellen, dass
  • 3:17 - 3:21
    derjenige schon wissen wird, was er tut.
    Und so ist es eben häufig nicht, sondern
  • 3:21 - 3:25
    das sind genau so Leute wie du und ich,
    die eben auch explorativ gearbeitet haben.
  • 3:25 - 3:30
    Das kann man sich auch ganz gut selbst
    überlegen, wenn man so ein kurzes
  • 3:30 - 3:34
    Gedankenexperiment macht. Das konnte man
    auch schon live beobachten. Also nehmen
  • 3:34 - 3:38
    wir mal an, jemand findet einen Weg, um
    besser mit Komplexität umzugehen. Zum
  • 3:38 - 3:41
    Beispiel Modularisierung oder
    objektorientierte Programmierung, als das
  • 3:41 - 3:45
    gerade frisch war. Und dann würde man ja
    hoffen, dass wir die Software, die wir
  • 3:45 - 3:48
    davor geschrieben haben, jetzt besser
    machen, weil wir das besser im Griff
  • 3:48 - 3:51
    haben. Aber das passiert halt nicht,
    sondern was passiert ist, dass wir dann
  • 3:51 - 3:57
    eben größere Software schreiben und wieder
    am Limit arbeiten. Ich glaube, dass das
  • 3:57 - 4:00
    kein Problem der Softwareentwicklung oder
    des Programmierens ist, sondern generell
  • 4:00 - 4:04
    ein Problem mit Menschen. So hat uns die
    Evolution gemacht, und da müssen wir
  • 4:04 - 4:08
    lernen mit umzugehen. Und ich will das mal
    illustrieren: Ich habe so eine Theorie,
  • 4:08 - 4:15
    die nenne ich die Gradienten-Theorie. Die
    These ist, dass Menschen ihre Umgebung wie
  • 4:15 - 4:18
    ein Optimierungsverfahren betrachten in
    der Mathematik. Das heißt, man hat
  • 4:18 - 4:23
    sozusagen ein Gelände und sucht den
    höchsten oder tiefsten Punkt - das ist so
  • 4:23 - 4:29
    ein Optimierungsproblem. Und dabei geht
    man eben nicht gezielt vor, wenn man das
  • 4:29 - 4:34
    Gelände nicht kennt, sondern man muss
    Annahmen treffen, und das kann man an sich
  • 4:34 - 4:37
    selbst beobachten. Wenn es zu kalt ist,
    dann geht man ja zur Heizung und stellt
  • 4:37 - 4:42
    nicht so ein, wie man es haben will,
    sondern man stellt heiß, und dann wartet
  • 4:42 - 4:44
    man, bis es zu warm wird, und dann geht
    man wieder hin und stellt wieder runter.
  • 4:44 - 4:48
    Das heißt, wir haben so ein
    Annäherungsverfahren, wie wir mit der Welt
  • 4:48 - 4:50
    umgehen. Und das ist nicht nur bei
    Heizungen. Das ist auch beim Autofahren,
  • 4:50 - 4:54
    wenn wir so eine Landkarte haben, dann
    gucken wir uns an, was ist denn das Limit?
  • 4:54 - 4:59
    Wo müssen wir abbiegen? Und den Weg dahin
    ignorieren wir, obwohl der vielleicht ganz
  • 4:59 - 5:03
    schön ist. Viele Sachen, die wir machen,
    auch die Geschwindigkeitsauswahl, ist so
  • 5:03 - 5:06
    ein Gradienten-Ding Wir beschleunigen, bis
    wir uns unwohl fühlen. Dann gehen wir
  • 5:06 - 5:11
    wieder ein bisschen zurück. Oder wenn man
    im Wörterbuch oder Telefonbuch
  • 5:11 - 5:16
    nachschlägt, dann macht man eine Annahme,
    wo das ungefähr sein wird. Und wenn das zu
  • 5:16 - 5:19
    weit ist, geht man wieder zurück. Also der
    elementare Teil ist jedenfalls: wir haben
  • 5:19 - 5:23
    die Annahme, dass das Gelände ungefähr so
    aussieht. Wir haben hier eine glatte
  • 5:23 - 5:26
    Übergänge, und dann funktioniert das
    Verfahren gut. Das heißt Gradient Descent
  • 5:26 - 5:30
    übrigens, dass man versucht, der
    Schwerkraft hinterherzulaufen und den
  • 5:30 - 5:34
    tiefsten Punkt zu suchen. Aber es
    funktioniert in zwei Fällen eben nicht
  • 5:34 - 5:38
    gut: Der eine ist, wenn es einen Abhang
    gibt, über den ich rüberlaufe und dann
  • 5:38 - 5:42
    kann ich nichts zurück korrigieren. Und
    das läuft auch nicht gut, wenn man nicht
  • 5:42 - 5:46
    merkt, wenn man zu weit gegangen ist. Also
    ist so ähnlich wie der Abhang, und das
  • 5:46 - 5:50
    zweite Problem ist, wenn man nicht
    zurückrollen kann, aus anderen Gründen.
  • 5:50 - 5:54
    Die gibts in der Softwareentwicklung eben
    häufiger, und es stellt sich heraus, sind
  • 5:54 - 5:58
    genau die Art von Problemen, die Menschen
    haben. Zum Beispiel, wenn wir so was haben
  • 5:58 - 6:03
    wie zwei Wochen Probeabo, dann vergessen
    die Leute halt, da wieder auszutreten,
  • 6:04 - 6:10
    oder Drogenabhängigkeit ist ein Klassiker,
    Spielesucht. Und in der
  • 6:10 - 6:12
    Softwareentwicklung oder überhaupt im
    Projektmanagement ist es häufig: Jetzt
  • 6:12 - 6:17
    haben wir schon so viel investiert, jetzt
    können wir nichts zurück. Security ist
  • 6:17 - 6:22
    kein Gradient, es sieht vielleicht aus wie
    ein Gradient, aber es ist keiner. Das ist
  • 6:22 - 6:27
    gerade, glaube ich, das Grundproblem von
    der IT-Security. Man merkt nicht, wenn man
  • 6:27 - 6:31
    zu weit gegangen ist. Das merkt man erst,
    wenn man gehackt wird. Und dann kann man
  • 6:31 - 6:35
    nicht mehr zurückrollen. Dann sind die
    Daten schon weg. Komplexität ist ähnlich
  • 6:35 - 6:38
    wie Security auch kein Gradient, aber es
    fühlt sich an wie einer. Und das ist,
  • 6:38 - 6:42
    glaube ich, der Grund, warum wir damit so
    schlecht umgehen können. Das fühlt sich
  • 6:42 - 6:45
    an, als würden wir alles unter Kontrolle
    haben. Und zu dem Zeitpunkt, wo wir
  • 6:45 - 6:50
    merken, dass es nicht mehr so ist, können
    wir nicht mehr zurück. Übrigens ist auch
  • 6:50 - 6:55
    Daten rausgeben so an Facebook oder so ist
    genauso ein Pseudo-Gradient, nenne ich das
  • 6:55 - 7:01
    mal. Zu dem Zeitpunkt, wo man merkt, dass
    man zu viel rausgegeben hat, ist es zu spät.
  • 7:01 - 7:06
    So die Schlussfolgerung ist eigentlich:
    Komplexität ist böse. Wir bemerken sie zu
  • 7:06 - 7:10
    spät und wir fangen sie uns auch zu leichtfertig
    ein. Und da muss man halt irgendwie
  • 7:10 - 7:15
    gegensteuern. Die Kosten dafür werden im
    Moment an unsere Kunden, wenn wir das
  • 7:15 - 7:19
    beruflich machen, externalisiert, an
    unsere Benutzer und an unser zukünftiges
  • 7:19 - 7:25
    Selbst. Daher findet man relativ selten
    glückliche ältere Softwareentwickler.
  • 7:25 - 7:29
    Publikum lacht
    So, das war der erste Gedankengang, der
  • 7:29 - 7:33
    mich in die Richtung geführt hat. Der
    zweite Gedankengang: Ich will jetzt mal
  • 7:33 - 7:36
    das GNU Manifesto herausgreifen.
    Stellvertretend. Das ist kein GNU-Bashing
  • 7:36 - 7:39
    hier, aber am GNU Manifesto kann man das
    ganz gut zeigen. Das war die ursprüngliche
  • 7:39 - 7:44
    Ankündigung des GNU-Projekts von Richard
    Stallman. Da hat er geschrieben: "Wir
  • 7:44 - 7:48
    machen Unix-Programme, und wir werden aber
    nicht genau dasselbe sein wie Unix. We
  • 7:48 - 7:53
    will make all improvements that are
    convenient." Das ist ein ganz furchtbarer
  • 7:53 - 7:58
    Satz. Was heißt denn 'convenient', für wen
    denn? Aber das ist genau die
  • 7:58 - 8:03
    Herangehensweise, die viele Leute haben,
    die Software schreiben: "Oh, das können
  • 8:03 - 8:07
    wir noch schnell dazutun." Was fehlt, ist
    so ein Korrektiv, dass man vorher drüber
  • 8:07 - 8:11
    nachdenkt: "Was hänge ich mir eigentlich
    gerade für eine Legacy ans Bein?" Ich
  • 8:11 - 8:16
    glaube dieser Convenience-Gedanke beim
    Erweitern von Software ist unsere Erbsünde
  • 8:16 - 8:20
    - um hier mal ein bisschen katholisch zu
    werden - in der Softwareentwicklung. Die
  • 8:20 - 8:24
    haben alle schon einmal begangen und das
    kriegt man eben nicht nachkorrigiert.
  • 8:24 - 8:27
    Daher ist der einzige Weg, das
    loszuwerden, wenn man die ganze
  • 8:27 - 8:32
    Software oder das ganze Modul wegschmeißt
    und neu macht. Aber Software stirbt halt
  • 8:32 - 8:37
    nicht. Ich habe im Umgang mit Software
    erst verstanden, dass es gut ist, dass
  • 8:37 - 8:41
    Menschen sterben, weil das ist ein
    Korrektiv, was gebraucht wird. Wenn System
  • 8:41 - 8:44
    besser werden soll, dann muss der alte
    Scheiß auch irgendwann sterben können. Und
  • 8:44 - 8:50
    das passiert bei Software halt nicht. Es
    ist ein Feature, dass Dinge nicht ewig
  • 8:50 - 8:55
    halten. Man kann das allgemein beobachten,
    wenn jemand seine Software erweitern will
  • 8:55 - 8:58
    und er hat die Wahl zwischen "Wir machen
    jetzt hier mal was, um das konkrete
  • 8:58 - 9:02
    Problem zu lösen" oder "Wir machen hier
    was, um ein allgemeineres Problem zu
  • 9:02 - 9:07
    lösen." Dann werden die Leute immer das
    allgemeinere Problem zu lösen versuchen.
  • 9:07 - 9:12
    Viel Feind, viel Ehr. Und das kann man
    fast flächendeckend beobachten. Es gibt
  • 9:12 - 9:17
    sehr wenige Ausnahmen davon. Und ich hatte
    meinen Aha-Moment, als ich eines Tages mal
  • 9:17 - 9:21
    gdb aufgerufen habe auf ein Projekt, also
    ich habe jetzt hier /tmp genommen, aber
  • 9:21 - 9:26
    das Projekt war irgendein Checkout. Ich
    habe in meinem eigenen Webserver
  • 9:26 - 9:31
    einen .gdbinit. Das ist eine Konfig-Datei
    für den GNU-Debuger, wo man zum Beispiel
  • 9:31 - 9:33
    sagen kann: "Ruf das Programm, wenn ich es
    debuggen will, mit diesen
  • 9:33 - 9:37
    Kommandozeilenargumenten auf!" Und da
    schreibe ich dann rein: "Nimm nicht Port
  • 9:37 - 9:41
    80, weil das klappt nicht, sondern nimm
    Port irgendwie 8005 oder so, was-weiß-ich,
  • 9:41 - 9:46
    halt localhost zum debuggen." Und gdb hat
    eines Tages angefangen zu sagen: "Nee, die
  • 9:46 - 9:51
    .gdbinit-Datei, die nehme ich aber nicht,
    denn die liegt hier in einem Verzeichnis,
  • 9:51 - 9:56
    was du nicht freigeschaltet hast." Und das
    war genau so ein Versuch, diesen Fehler
  • 9:56 - 10:01
    nach Werk, nach der Tat zu korrigieren.
    gdb hat festgestellt: "Unsere Konfig-Datei
  • 10:01 - 10:06
    ist so mächtig geworden, dass es ein
    Sicherheitsproblem darstellt", und hat dann
  • 10:06 - 10:11
    halt die ganze Konfig-Sache zugenagelt für
    rückblickend. Und das hat halt mehr
  • 10:11 - 10:16
    kaputtgemacht, als nötig gewesen wäre -
    vielleicht, weiß ich nicht - aber es war
  • 10:16 - 10:19
    für mich sehr ärgerlich. Man kann hier so
    einen Autopfad eintragen, aber da ist mir
  • 10:19 - 10:22
    das halt zum ersten Mal so richtig
    aufgefallen. Das war jetzt vor ein paar
  • 10:22 - 10:26
    Jahren. Ich weiß gar nicht, wann das genau
    war. Es gab so einen ähnlichen Fall
  • 10:26 - 10:30
    nochmal: mit vim, dem Editor, den ich
    immer benutze. Da kann man nämlich so
  • 10:30 - 10:34
    Sachen machen wie in einem Kommentar in
    der zu editierenden Datei in den ersten
  • 10:34 - 10:37
    drei Zeilen oder in den letzten drei
    Zeilen kann man so ein paar Konfig-
  • 10:37 - 10:42
    Settings ändern. Das ist gedacht, um zu
    sagen: "Ich benutz' hier in Tabstop von 4 oder
  • 10:42 - 10:46
    so." Aber der Parser dafür hat ein
    Sicherheitsproblem gehabt, und damit war
  • 10:46 - 10:51
    es dann möglich, sozusagen eine Datei zu
    erzeugen, die ein Programm ausgeführt hat,
  • 10:51 - 10:56
    wenn sie in vim geöffnet wurde, was
    natürlich nicht gewollt war. Aber es ist
  • 10:56 - 11:00
    dasselbe Problem in grün. Und ich glaube,
    das Problem kann man ein bisschen
  • 11:00 - 11:03
    verallgemeinern, nachdem ich gerade gegen
    Verallgemeinern gewettert habe, aber in
  • 11:03 - 11:07
    der Betrachtung ist Verallgemeinern ja
    gut, in der Software eher schlecht. Ich
  • 11:07 - 11:11
    will das mal ein Beispiel illustrieren.
    Nehmen wir an, wir haben eine CSV-Datei
  • 11:11 - 11:16
    mit irgendwie Trouble-Tickets. Feld 4 ist
    das, an dem wir jetzt Interesse haben.
  • 11:16 - 11:22
    Nehmen wir an, die sieht so aus. CSV halt.
    So, und jetzt möchte ich da gern die Summe
  • 11:22 - 11:26
    der vierten Felder haben. Dann mache ich
    als erstes mal cut, wir sind halt unter
  • 11:26 - 11:31
    Unix. Der filtert es hier raus, die
    erste Zeile muss noch weg, also mach ich
  • 11:31 - 11:34
    hier noch einen tail. Dann ist die
    erste Zeile weg, jetzt muss ich noch eine
  • 11:34 - 11:38
    Summe bilden. Da gibt es auch ein Programm
    für: paste. Wie man das halt macht unter
  • 11:38 - 11:43
    Unix. Und dann muss ich das ausrechnen.
    So! Aber was ist denn, wenn da jetzt nicht
  • 11:43 - 11:49
    1 stand, sondern fred? Dann können wir
    feststellen: cut hat damit kein Problem,
  • 11:49 - 11:54
    tail hat damit kein Problem, paste hat
    damit kein Problem, aber bc fällt auf die
  • 11:54 - 12:02
    Fresse. So, das heißt, schlimmer noch: bc
    ist programmierbar. Da könnte jetzt zum
  • 12:02 - 12:05
    Beispiel die Ackermann-Funktion stehen und
    dann steht der Rechner für eine Stunde,
  • 12:05 - 12:10
    während er versucht, irgendeine Rekursion
    aufzulösen. Und ich glaube, das ist
  • 12:10 - 12:15
    sinnvoll, hier ein Konzept einzuführen und
    zu sagen: cut, tail und paste sind
  • 12:15 - 12:19
    harmlos, bc nicht. Das war so einer der
    Gedanken, wo ich dachte: "Okay, da kann
  • 12:19 - 12:22
    man eigentlich mal ein Vortrag drüber
    machen." Allerdings ist es nicht
  • 12:22 - 12:27
    hinreichend. Es gibt verschiedene Arten
    von Harmlosigkeit. Aber ich glaube, die
  • 12:27 - 12:31
    Unterscheidung ist schon mal hilfreich.
    Ja, sagen wir mal, versuchen wir es einmal
  • 12:31 - 12:35
    zu formulieren: Software ist harmlos, wenn
    unerwartete Eingaben kein unerwartetes
  • 12:35 - 12:39
    Verhalten oder unerwartete Arten von
    Ausgabe erzeugen. Zum Beispiel, so eine
  • 12:39 - 12:43
    SHA-Checksumme ist immer harmlos:
    Egal, was ich dafür Daten rein tue, die
  • 12:43 - 12:48
    Ausgabe hat ein bekanntes Format.
    Oder word count (wc) ist auch so ein Ding.
  • 12:48 - 12:52
    Jetzt könnte man sagen: "Okay, nimm
    doch noch awk!" Und in awk habe ich zum
  • 12:52 - 12:56
    Beispiel kein Problem, wenn da jetzt fred
    steht statt 4 und der Interpreter
  • 12:56 - 13:01
    interpretiert ja auch nicht Funktionen.
    Das sieht besser aus, aber es ist auch
  • 13:01 - 13:05
    harmlos, und es stellt sich heraus: awk
    ist eine andere Art von nicht harmlos,
  • 13:05 - 13:09
    denn man kann im Code im Dateisystem
    rumschreiben. Da muss ich jetzt nicht auf
  • 13:09 - 13:14
    die Eingabe achten. Aber ich muss auf die
    andere Eingabe achten, nämlich den Code,
  • 13:14 - 13:17
    den ich auf der Kommandozeile übergebe.
    Und da kann man eigentlich auch sagen,
  • 13:17 - 13:22
    dass man die Unterscheidung haben möchte.
    Das ist in der Industrie übrigens ein
  • 13:22 - 13:26
    großes Problem: Die Spieleindustrie ist
    dazu übergegangen, in großem Stil
  • 13:26 - 13:31
    irgendwelche Interpreter in ihre Spiele
    einzubauen, um die Business-Logik, also
  • 13:31 - 13:37
    nicht die AI, sondern so kleine Skripte in
    einer Skriptsprache machen zu können und
  • 13:37 - 13:41
    einer der beliebtesten Skript-Interpreter
    dafür ist Lua. Und Lua wird vor allem
  • 13:41 - 13:45
    deswegen genommen, weil der halt nix kann,
    was man nicht freischaltet. Also der kann
  • 13:45 - 13:49
    nicht Datei öffnen, kann keine Sockets
    aufmachen. Das kann man alles nachreichen,
  • 13:49 - 13:53
    und dann hat man natürlich wieder ein
    Problem. Aber das ist ein reales Problem.
  • 13:53 - 13:57
    Viele Open-Source-Leute denken da nicht
    drüber nach, weil sie sich denken: "Ach,
  • 13:57 - 14:00
    ich liefer das aus und der Rest ist ja
    nicht mehr mein Problem." Aber ich finde,
  • 14:00 - 14:03
    da müssen wir mal generell drüber
    nachdenken, und zwar am besten vor dem
  • 14:03 - 14:07
    Ausliefern, am besten schon beim
    Programmieren. Also das ist eine andere
  • 14:07 - 14:11
    Art von Harmlosigkeit. Vorher war die
    Harmlosigkeit: "Kann eine böse Eingabe böse
  • 14:11 - 14:15
    Ergebnisse erzielen?" Und jetzt ist: "Kann
    das Programm selbst böse Dinge machen?"
  • 14:15 - 14:19
    Und das ist eigentlich eine sehr moderne
    Überlegung, weil wir heutzutage viel mit
  • 14:19 - 14:24
    Sandboxing arbeiten. Da geht es genau
    darum, zu verhindern, dass ein Programm
  • 14:24 - 14:28
    versehentlich oder absichtlich böse Dinge
    tut. Und da gibt's wieder auch verschiedene
  • 14:28 - 14:33
    Sachen, die ein Programm anstellen kann.
    bc konnte Rechenzeit verbraten. awk kann
  • 14:33 - 14:37
    im Dateisystem lesen und schreiben, und
    das geht natürlich weiter. Kommen wir
  • 14:37 - 14:42
    zurück zum GNU Manifesto: GNU awk ist eine
    spezielle Version von awk und die kann
  • 14:42 - 14:46
    Sockets aufmachen, völlig ohne Not. Das
    heißt, wenn wir einfach awk benutzen und
  • 14:46 - 14:49
    denken, ach awk kann im Dateisystem
    schreiben, aber das hab ich read-only
  • 14:49 - 14:53
    gemountet, da passiert schon nichts. Dann
    ist aber GNU awk im Einsatz, ist es halt
  • 14:53 - 14:58
    doch wieder nicht harmlos. Bash kann
    übrigens auch Sockets aufmachen! Ich weiß
  • 14:58 - 15:03
    nicht, wie viele Leute das wussten? Gut,
    die Sache geht natürlich noch weiter: Nach
  • 15:03 - 15:06
    awk kam Perl. Das ist noch viel schlimmer
    und Perl kann eval(), das ist so das
  • 15:06 - 15:11
    schlimmste Übel, was man haben kann in einer
    Programmiersprache aus meiner Sicht. Ein
  • 15:11 - 15:16
    bisschen näher am Endkunden kann man das
    auch an Browsern betrachten. Also gucken
  • 15:16 - 15:21
    wir uns zum Beispiel mal Netscape an:
    Netscape hat auch mehrfach die Wahl gehabt
  • 15:21 - 15:25
    zwischen nützlich und harmlos und hat
    immer nützlich gewählt. Es ging dann los
  • 15:25 - 15:29
    mit den Plugins. Weiß nicht, wer sich hier
    noch an das Flash-Plugin erinnert, oder
  • 15:29 - 15:34
    vorher hatten wir alle den RealPlayer und
    das [Adobe] Acrobat-Plugin gab es auch
  • 15:34 - 15:38
    mal - und das war alles scheiße, weil
    diese Plugins Native Code waren: die
  • 15:38 - 15:42
    konnten alles tun, was das Betriebssystem
    ihnen erlaubt. Das heißt, das war zwar
  • 15:42 - 15:46
    sehr nützlich, aber es war eben auch sehr
    gefährlich. Und das war eine bewusste
  • 15:46 - 15:50
    Entscheidung von den Browsern, das
    zuzulassen. Das eigentliche Ziel von
  • 15:50 - 15:54
    diesem Vortrag ist, den Programmierern
    unter euch so ein bisschen das Bewusstsein
  • 15:54 - 15:59
    dafür zu geben, dass man nicht einfach
    eine Plugin-Schnittstelle einbaut, die
  • 15:59 - 16:05
    alles kann. Die nächste Iteration war: Wir
    machen einfach alles in JavaScript. Das
  • 16:05 - 16:10
    war, sah erst mal besser aus, aber dieser
    JavaScript lief dann auch mit genügend
  • 16:10 - 16:14
    Rechten, um im System Mist anzustellen und
    zumindest im Browser Mist anzustellen. Da
  • 16:14 - 16:18
    stellt sich heraus: Die Leute haben ihre
    wichtigen Daten heutzutage im Browser,
  • 16:18 - 16:21
    weil sie Onlinebanking machen. Und das
    reicht, um richtig doll Schaden
  • 16:21 - 16:26
    anzustellen. Da musste auch nachkorrigiert
    werden. Chrome limitiert jetzt noch weiter
  • 16:26 - 16:29
    aus Sicherheitsgründen, um den Adblocker
    kaputtmachen zu können. Das ist eigentlich
  • 16:29 - 16:33
    immer dieselbe Falle, in die wir hier
    reinlaufen. Ich weiß nicht, wer hier
  • 16:33 - 16:37
    Windows benutzt? Unter Windows gibt es ein
    Tool, das von Mark Russinovich - der hat
  • 16:37 - 16:41
    sich inzwischen kaufen lassen von
    Microsoft, ist jetzt also ein offizielles
  • 16:41 - 16:45
    Microsoft-Tool. Und die einzige Funktion
    von dem Tool ist, die verschiedenen
  • 16:45 - 16:48
    Plugins zu listen, die im System
    eingetragen sind. Und ich habe hier mal
  • 16:48 - 16:52
    ein relativ sauberes System genommen. Es
    geht jetzt nicht um das hier unten oder
  • 16:52 - 16:57
    die Größe von dem Scrollbalken, sondern
    einfach, wie viele Tabs es oben gibt: Das
  • 16:57 - 17:01
    sind alles Möglichkeiten, wie sich Plugins
    im System einnisten können, und das hat
  • 17:01 - 17:04
    einfach niemand mehr im Blick, weil
    einfach immer in die falsche Richtung
  • 17:04 - 17:09
    entschieden wurde. Also, das ist, glaube
    ich, ein Kernproblem. Es gab noch eine
  • 17:09 - 17:14
    dritte Herleitung: Mein Security-Alltag
    besteht darin, dass sich Firmen gehe und
  • 17:14 - 17:18
    zeigen mir ihren Quellcode und dann suche
    ich nach Bugs. Und dann sage ich denen,
  • 17:18 - 17:22
    welche Bugs ich gefunden habe. Und da
    gibts dann halt gelegentlich so Fälle, wo
  • 17:22 - 17:26
    man mitkriegt: Da gibt's ganz viele Bugs,
    ja gar nicht mal nur die, die ich finde,
  • 17:26 - 17:30
    sondern die haben schon eine eigene
    Datenbank, einen Bugtracker, und da sind
  • 17:30 - 17:35
    schon siebenstellig Bugs drin. Ja, sowas
    kommt vor. Und weil das so ein Problem
  • 17:35 - 17:39
    ist, dass wir so viele Bugs haben, gibt's
    jetzt Gegenstrategien von den Entwicklern,
  • 17:39 - 17:43
    die dann anfangen zu sagen: "Okay, wenn
    der Bug nicht wichtig ist, dann kann ich
  • 17:43 - 17:47
    ihn ja später fixen." Und das heißt in der
    Realität: nie. Der liegt dann halt rum.
  • 17:47 - 17:52
    Ich versuche seit einer Weile, den Begriff
    Bug-Welle dafür zu etablieren, die man
  • 17:52 - 17:58
    vor sich herschiebt als großer Dampfer.
    Aber Bugtracker sind in der Realität da
  • 17:58 - 18:04
    draußen häufig riesige Daten-Endlager: Ich
    habe zum Beispiel neulich einen Bug
  • 18:04 - 18:08
    bei Firefox gemeldet und habe die ID
    1.590.000 gekriegt. Das ist ja schon
  • 18:08 - 18:12
    ein schlechtes Zeichen, eigentlich. Aber
    es ist ein gutes Zeichen, weil der
  • 18:12 - 18:16
    Bugtracker offen ist. Bei Microsoft kann
    man das gar nicht sehen, wie viel Bugs die
  • 18:16 - 18:20
    haben. Das ist jetzt hier nur als
    Illustration gemeint. Mozilla ist nicht
  • 18:20 - 18:23
    besonders scheiße. Mozilla hat nur einen
    offenen Tracker, an dem ich das schön
  • 18:23 - 18:27
    etablieren kann. Was ich jetzt noch zeigen
    wollte - ich hab noch mal geguckt: "Was ist
  • 18:27 - 18:31
    denn der erste Bug, den ich da gefiled
    habe?" Der hatte noch eine sechsstellige
  • 18:31 - 18:38
    ID. Das war 2003. Wenn man sich den
    Verlauf anguckt, der Bugnummern, dann
  • 18:38 - 18:43
    stellt man fest: Das wächst exponentiell.
    Und es ist nicht so, dass die Bugs dann
  • 18:43 - 18:48
    irgendwie irgendwann weggehen von
    irgendwann. Ich habe zwei große Ereignisse
  • 18:48 - 18:52
    beobachtet, bei denen Bugs geschlossen
    werden: Das ist, wenn es ein neues Release
  • 18:52 - 18:56
    gibt, und da schmeißt man die alte
    JavaScript-Engine raus und macht eine neue
  • 18:56 - 19:00
    rein. Dann schließt man alle Bugs von der
    alten Engine. Das sieht dann so aus, als
  • 19:00 - 19:04
    wenn man was geschafft hat. Und der
    andere Weg ist dieser hier: Ich weiß nicht,
  • 19:04 - 19:07
    ob man das hinten lesen kann? Mozilla hat
    einfach einen Bug von mir geschlossen. Da
  • 19:07 - 19:10
    steht drin: "This bug has been
    automatically resolved after a period of
  • 19:10 - 19:14
    inactivity". Die war jetzt
    nicht von mir, die Inactivity. Ich hab den Bug gefiled,
  • 19:14 - 19:18
    und bei Mozilla hat sich keiner drum
    gekümmert. Und dann haben die den halt
  • 19:18 - 19:21
    automatisch geschlossen, weil die
    Statistik so schlecht aussah. Das ist ein
  • 19:21 - 19:24
    Riesenproblem, nicht nur bei Mozilla. Wie
    gesagt, das ist hier nur der
  • 19:24 - 19:28
    Blitzableiter, den ich zeigen kann, weil
    es alles öffentlich ist bei denen. Aber
  • 19:28 - 19:32
    das führt zu so einer Kaskade aus
    Verhalten und Gegenverhalten. Zum Beispiel
  • 19:32 - 19:36
    sieht man dann: unwichtige Bugs werden
    halt gar nicht gefixt. Und dann schreiben
  • 19:36 - 19:39
    die Leute halt "wichtig" an ihre Bugs,
    wenn sie wollen, dass die gefixt werden.
  • 19:39 - 19:43
    Und da haben die Leute gesagt: "Okay,
    die wichtigen Bugs bleiben dann
  • 19:43 - 19:47
    auch liegen, weil da gibt's zu viele
    von." Und dann schreiben die Leute
  • 19:47 - 19:51
    "Security" an ihre Bugs ran, und dann
    haben wir jetzt eine Welle von Security-
  • 19:51 - 19:56
    Bugs, und da wird dann verhandelt: "Ist das
    denn wirklich ein Problem?" Und da kommen
  • 19:56 - 20:01
    dann so Ausreden, wie: "Ist ja nur ein
    Crash." Und der Punkt daran ist, dass es
  • 20:01 - 20:08
    hier eine unheilige Allianz gibt mit einem
    anderen Trend, nämlich, dass Firmen
  • 20:08 - 20:11
    einfach sehen: sie haben so viele Bugs
    offen, dass es gar nicht das Ziel ist, sie
  • 20:11 - 20:15
    alle loszuwerden. Es gibt einfach zu
    viele, das ist unrealistisch. Stattdessen
  • 20:15 - 20:20
    führt man Metriken ein, wie
    dass man Fuzzing macht. Fuzzing ist
  • 20:20 - 20:24
    eigentlich keine doofe Idee, aber es ist
    eben nicht: "alle Bugs finden", sondern es
  • 20:24 - 20:28
    ist nur der erste Schritt auf einer langen
    Straße. Aber es ist halt eine schöne
  • 20:28 - 20:33
    Metrik, die da rausfällt. Wir haben so und
    so viel Fuzz-Testcases gemacht, und jetzt...
  • 20:33 - 20:37
    Sind wir jetzt besser oder schlechter als
    vorher? Ist alles schwer zu sagen.
  • 20:37 - 20:42
    Dann gibt es Bug Bounties, was ich
    persönlich für Bullshit halte. Das macht
  • 20:42 - 20:47
    man, damit die PR-Abteilungen zeigen kann:
    "Guck mal, so viel wert sind Bugs bei uns,
  • 20:47 - 20:52
    weil wir so wenig Bugs haben." Das ist die
    Idee. Und der Rest der Industrie hat
  • 20:52 - 20:55
    einfach Mitigations gemacht. Da haben Sie
    dann gesagt: "Okay, wir schließen die Bugs
  • 20:55 - 20:58
    nicht mehr, wir machen das Exploiten
    schwieriger." Und das funktioniert. Ich
  • 20:58 - 21:02
    bin da immer dagegen gewesen. Ich musste
    also jetzt meinen Hut fressen, sozusagen.
  • 21:02 - 21:06
    Das funktioniert. Aber es hat halt
    Nebeneffekte. Ich weiß nicht, ob ich Zeit
  • 21:06 - 21:10
    habe für Anekdoten. Ich bin nämlich
    zeitlich sehr knapp dran. Aber ich hab mal
  • 21:10 - 21:14
    den Typ getroffen, der die Internet-
    Explorer-Bugs verwaltet, die reinkommen,
  • 21:14 - 21:18
    und ich habe den getroffen, weil ich 50
    Bugs gefiled habe. Und er hat gesagt "35
  • 21:18 - 21:20
    kenne ich schon".
    Publikum lacht
  • 21:20 - 21:23
    Und da hab ich gesagt: "Wie jetzt?" Der
  • 21:23 - 21:29
    Typ sah aus wie Gollum in so einer Cave.
    Der war irgendwie 30 und sah aus wie Ende 60.
  • 21:29 - 21:34
    Gelächter Und der meinte: "Es kommen so viele
    Bugs hier rein, wir kommen gar nicht dazu,
  • 21:34 - 21:37
    irgendwelche zu schließen, wir verwalten
    die nur noch." Das war der Stand
  • 21:37 - 21:42
    damals. Das ist inzwischen besser
    geworden. Also Microsoft. Und wie gesagt,
  • 21:42 - 21:48
    das sind hier Beispiele, das ist in
    anderen Firmen ähnlich. Man verwaltet die
  • 21:48 - 21:52
    Bugs, und man schließt sie nicht mehr, und
    memgc ist eine Sache, da habe ich lange
  • 21:52 - 21:55
    Jahre gar nicht drüber reden dürfen. Aber
    inzwischen haben sie das selbst
  • 21:55 - 21:59
    veröffentlicht. Deswegen darf ich das
    jetzt doch erzählen. Da haben sie halt
  • 21:59 - 22:03
    festgestellt Wir haben lauter Memory
    Corruption Bugs, weil wir immer die Sachen
  • 22:03 - 22:08
    vom Heap free()n und dann aber noch
    benutzen. Da haben Sie jetzt einen Hack
  • 22:08 - 22:13
    gebaut, der die Sachen dann halt nicht
    free()t, sondern in eine Liste tut. Und
  • 22:13 - 22:17
    dann läuft ja über den Stack und guckt
    nach Pointern, die in die Liste zeigen und
  • 22:17 - 22:22
    gibt die dann nicht frei. Das ist ein
    furchtbarer Hack. Wär' mir ja zu peinlich
  • 22:22 - 22:26
    gewesen, das irgendwo zu erwähnen. Aber
    Microsoft macht jetzt PR damit, wie geil
  • 22:26 - 22:30
    memgc ist. Und die Chrome-Leute haben
    sich das angesehen haben und gesagt:
  • 22:30 - 22:34
    "Boah, das ist ja geil."
    Publikum lacht
  • 22:34 - 22:37
    Das ist der Stand, wie die Industrie
  • 22:37 - 22:41
    funktioniert. Das Problem ist jetzt aber,
    dass Bugs nur noch mit Exploit als
  • 22:41 - 22:45
    Security-Problem anerkannt werden. Also
    das ist nicht branchenübergreifend, aber
  • 22:45 - 22:49
    es ist bei vielen inzwischen so: Wenn man
    keinen Exploit liefert, wird es nicht
  • 22:49 - 22:52
    anerkannt. Aber wir haben ja vorhin
    gesehen, dass überhaupt nur noch
  • 22:52 - 22:56
    anerkannte Security-Bugs gefixt werden.
    Das heißt, Bugs liegen einfach herum, weil
  • 22:56 - 23:01
    der Nachweis nicht erbracht werden konnte.
    Und wenn das Ausnutzen von einem Bug durch
  • 23:01 - 23:04
    die Mitigations schwieriger wird, heißt
    das eben, dass immer mehr tatsächliche
  • 23:04 - 23:08
    Sicherheitsprobleme rumliegen, weil
    niemand Bock hat, den Nachweis zu
  • 23:08 - 23:12
    erbringen, dass es ein Problem war. Das
    heißt nicht, dass keiner von den Bugs
  • 23:12 - 23:16
    jemals geschlossen wird. Denn es stellt
    sich heraus: Die Entwickler haben so etwas
  • 23:16 - 23:20
    wie einen Anspruch an ihren Code. Keiner
    möchte der Typ sein, der die Brücke in
  • 23:20 - 23:24
    Genua gebaut hat. Das heißt, die Leute
    laufen schon rum und schließen Bugs. Aber
  • 23:24 - 23:28
    sie möchten halt nicht gezwungen werden
    dazu. Und sie möchten auch nicht
  • 23:28 - 23:31
    anerkennen, dass es ein Problem war. Und
    das hat so eine Kaskade an Problemen in
  • 23:31 - 23:36
    der Realität. Aber ich schließe daraus:
    Erst mal reaktiv auf das Problem mit den
  • 23:36 - 23:41
    Bugs und der Softwarequalität zuzugehen,
    hilft eigentlich nicht. Ich sage das schon
  • 23:41 - 23:45
    länger über Viren und Würmer und die
    Antiviren, die ich immer als Schlangenöl
  • 23:45 - 23:49
    bezeichne. Ich glaube, dass das bei Bugs
    auch so ist: Viel zu viel Software wird
  • 23:49 - 23:53
    einfach entwickelt, und man denkt sich:
    "Ach naja, dann können wir das mal ausliefern,
  • 23:53 - 23:58
    und der Kunde testet das dann. Und dann
    melden die schon die Bugs und die fixen
  • 23:58 - 24:04
    wir dann halt." Es gibt so inzwischen das
    geflügelte Wort: Man liefert aus, wenn der
  • 24:04 - 24:10
    Updater funktioniert. Und da muss man ja
    irgendwie mit umgehen als Industrie. Ich
  • 24:10 - 24:14
    versuche hier als Zielgruppe jetzt die
    Entwickler. Was machen wir denn jetzt? Das
  • 24:14 - 24:17
    ist jetzt so die Frage. Und da gibt es
    natürlich verschiedene Ideen: Der FDP-
  • 24:17 - 24:21
    Ansatz ist meines Erachtens gescheitert.
    Der Markt hat ja gar nichts geregelt. Die
  • 24:21 - 24:25
    Leute kaufen immer noch alle irgendwie
    Windows und macOS. Das funktioniert,
  • 24:25 - 24:29
    glaube ich, nicht. Dann kann man
    versuchen, an die Moral zu appellieren.
  • 24:29 - 24:33
    Freiwillige Selbstkontrolle? Das
    funktioniert auch nicht aus meiner Sicht.
  • 24:33 - 24:38
    Dann gibt es den BSI-Ansatz: "Wir tun einfach
    ein paar Lagen Schlangenöl drüber..." Das
  • 24:38 - 24:43
    funktioniert leider auch nicht. Und es
    gibt den Twitter-Ansatz: Ausgrenzung
  • 24:43 - 24:48
    und mit Dingen drohen. Heugabelmobs. Das
    hat in meiner Beobachtung eher zu
  • 24:48 - 24:52
    Abandonware geführt, weil die Leute halt
    weggerannt sind, und gesagt haben:
  • 24:52 - 24:56
    "Das ist mir doch egal. Das ist nicht mehr
    meine Software." Es gibt auch einen
  • 24:56 - 25:00
    Hybridansatz, den die katholische Kirche
    seit vielen Jahren erfolgreich fährt.
  • 25:00 - 25:04
    Vielleicht ist das die Lösung. Dass man
    sagt: "Nicht der Markt, aber Sankt Peter
  • 25:04 - 25:09
    regelt das." Und an Moral appellieren
    funktioniert so ein bisschen. Das müssen
  • 25:09 - 25:13
    wir vielleicht ausbauen. Und dann dachte
    ich mir: "Was machen wir jetzt konkret?" Ich
  • 25:13 - 25:17
    habe als erstes gedacht: "Wir müssen
    vielleicht gucken, ob wir die explorative
  • 25:17 - 25:20
    Softwareentwicklung von der
    zielorientierten Softwareentwicklung
  • 25:20 - 25:24
    trennen." Dass wir sagen, es ist gut und
    richtig, dass die Leute explorativ lernen.
  • 25:24 - 25:28
    Aber das ist dann nicht das Produkt, was
    du shippst. Da müssen wir irgendwie
  • 25:28 - 25:32
    hinkommen. Und ich appelliere seit Jahren
    an die Firmen und sage: "Gebt den Leuten
  • 25:32 - 25:35
    Zeit, dass sie ein bisschen rumspielen und
    Sachen lernen können!" Denn sonst lernen
  • 25:35 - 25:39
    sie das während der Produktentwicklung und
    dann wird das Produkt halt scheiße. Aber
  • 25:39 - 25:44
    da kann ich so lange reden, bis ich blau
    anlaufe. Der Effekt ist bisher nicht
  • 25:44 - 25:49
    vorzeigbar. Ich finde, man kann das gut
    auf den Punkt bringen, wenn man sagt:
  • 25:49 - 25:53
    "Sei innovativ damit, was du tust, und
    nicht, wie du es tust." Eine Firma soll ja
  • 25:53 - 25:57
    innovativ sein, soll Dinge probieren, neue
    Produkte machen, aber dann nicht
  • 25:57 - 26:03
    irgendeine Experimental-Datenbank-Tech
    anwenden, die dann irgendwie mit den Daten
  • 26:03 - 26:08
    verloren geht, weil - war noch nicht
    fertig. Ich glaube, es gibt da nicht nur
  • 26:08 - 26:13
    eine Ursache, sondern es gibt mehrere
    Komponenten und die muss man auch getrennt
  • 26:13 - 26:17
    betrachten. Die erste ist Unwissenheit.
    "Ich weiß einfach nicht, dass der Code
  • 26:17 - 26:20
    scheiße war, den ich da importiert habe."
    Oder "Ich wusste nicht, wie man es besser
  • 26:20 - 26:23
    macht, deswegen habe ich es halt nicht gut
    gemacht." Und dann gibt's, was ich mal
  • 26:23 - 26:27
    absichtliche Unwissenheit nenne: "Wir
    haben keine guten Leute gefunden." Das
  • 26:27 - 26:31
    halte ich für eine Ausrede. Wer möchte und
    wer gut zahlt, findet auch gute Leute.
  • 26:31 - 26:35
    Solange das Projekt irgendwie so ein
    bisschen was an sich hat, was man
  • 26:35 - 26:39
    vielleicht mal ausprobieren möchte. Das
    halte ich für eine Ausrede. Ich glaube,
  • 26:39 - 26:42
    das sagen Leute, die sagen: "Ach, es ging
    halt nicht anders, wir haben schlechte
  • 26:42 - 26:46
    Leute. Dann wird das Produkt halt nicht so
    gut. Es macht ja nix. Also war nicht meine
  • 26:46 - 26:49
    Schuld." Halte ich für eine
    Schutzbehauptung. Und dann gibt es
  • 26:49 - 26:53
    natürlich Inkompetenz. Also so richtig.
    "Ach, das ging gar nicht anders." - ich habe
  • 26:53 - 26:57
    neulich so einen Kunden gehabt. Das
    sieht häufig nicht aus wie Ausreden,
  • 26:57 - 27:01
    sondern wie Best Practices. Aber ich halte
    es für Ausreden. Ich habe neulich so einen
  • 27:01 - 27:04
    Kunden gehabt, die meinen jetzt: "Wir
    machen jetzt eine Plattform für
  • 27:04 - 27:06
    Energiehandel", also kritische
    Infrastruktur, würde man eigentlich sagen.
  • 27:06 - 27:10
    Die haben gesagt: "Wir machen das in der
    Cloud, weil selber hosten können wir gar nicht."
  • 27:10 - 27:13
    - "Ja, warum denn nicht?"
    - "Das ist so teuer."
  • 27:14 - 27:17
    Publikum lacht
  • 27:17 - 27:22
    Verstehe ich nicht. Ich glaube, wir haben
    da so eine Kaskade aus Ausreden, die vor
  • 27:22 - 27:27
    uns hergeschoben werden. Der Ansatz, den
    ich jetzt gehen möchte, ist, dass ich
  • 27:27 - 27:30
    sage, wir versuchen vielleicht so eine Art
    Legacy-Faktor zu definieren, den man
  • 27:30 - 27:33
    an die Software dran schreibt. Und da
    geht es nicht darum: "Wie schlecht ist die
  • 27:33 - 27:37
    Software?", sondern "Wie negativ
    beeinträchtigt wird meine Software, wenn
  • 27:37 - 27:41
    ich das als Dependency reinnehme?". Also
    wenn ich jetzt irgendeine Library
  • 27:41 - 27:46
    reinziehe, wieviel negative Auswirkungen
    hat das? Das Problem ist aber: Wenn wir
  • 27:46 - 27:50
    das als Metrik machen und die wird
    irgendeine Art von Erfolg im Markt haben,
  • 27:50 - 27:53
    dass die Leute dann natürlich bescheißen
    werden und werden nach der Metrik
  • 27:53 - 27:57
    optimieren und nicht nach dem
    tatsächlichen Ziel der Metrik. Daher ist
  • 27:57 - 28:01
    das so ein bisschen schwierig, aber es
    gibt ein Vorbild, was so ein bisschen
  • 28:01 - 28:06
    funktioniert, nämlich das CVSS - das das
    Common Vulnerability Scoring System. Das
  • 28:06 - 28:10
    wird angewendet, um die Problematik
    von Bugs zu messen. Da haben sich also
  • 28:10 - 28:14
    Leute zusammengetan und versucht, eine
    Metrik zu definieren. Und die funktioniert
  • 28:14 - 28:20
    in der Industrie gut, die wird angenommen.
    Die Leute lieben das. Das funktioniert
  • 28:20 - 28:24
    grob so, wie eine historische
    Risikobewertung. Man guckt halt so, wie
  • 28:24 - 28:29
    wahrscheinlich ist, dass das passiert,
    dass das jemand ausnutzt. Da gibt's dann
  • 28:29 - 28:33
    Kriterien wie: Ist das technisch
    aufwendig? Kommt man da ran, wenn man
  • 28:33 - 28:38
    lokal einen Account hat oder auch über
    Netzwerk? Und was macht man denn kaputt,
  • 28:38 - 28:43
    wenn man das ausnutzt? Kann man dann Daten
    löschen, oder kann man die verändern? Also
  • 28:43 - 28:47
    diese Art von Sachen klickt man an, und
    dann kommt ein Score raus. Das finde ich
  • 28:47 - 28:51
    eigentlich eine gute Sache. Ich glaube,
    wir brauchen so ein Risiko-Score - jetzt
  • 28:51 - 28:54
    nicht für Bugs. Bei Bugs ist es, glaube
    ich, einfacher zu machen, obwohl es auch
  • 28:54 - 28:59
    schon viele Detail-Schwierigkeiten hat.
    Aber eigentlich brauchen wir so eine Art
  • 28:59 - 29:04
    Risiko-Score, entweder für das Management
    oder für die Entwickler. Und das sind
  • 29:04 - 29:08
    getrennte Probleme. Ich glaube, dass es
    zielführender, sich an die Entwickler zu
  • 29:08 - 29:11
    halten. Denn ich habe bisher noch fast nie
    erlebt, dass Management gesagt hat: "Das
  • 29:11 - 29:14
    muss jetzt besser werden. Und das war
    nicht nur als PR gemeint." Sondern, aber
  • 29:14 - 29:18
    Entwickler haben so eine Art Anspruch an
    ihren Code. Und ich glaube, wenn man denen
  • 29:18 - 29:22
    hilft zu erkennen, ob sie gerade einen
    Fehler machen, können wir was stemmen.
  • 29:22 - 29:26
    Dann habe ich mir gedacht: Welche
    Dimensionen gibt's denn da? Das ist leider
  • 29:26 - 29:30
    ein mehrdimensionales Problem. Hier ist
    eine der Dimensionen, die ich mir überlegt
  • 29:30 - 29:34
    habe: Sicherheitslöcher. Gut, klar. Wenn
    der Code Sicherheitslöcher hat, ist das
  • 29:34 - 29:37
    ein Problem. Aber das ist leider ein
    offenes Forschungsfeld, wie man die
  • 29:37 - 29:41
    Sicherheitslöcher finden soll. Und vor
    allem dafür eine Metrik zu haben. Jetzt
  • 29:41 - 29:45
    kann man sagen: "Wir haben jetzt 10 Bugs
    gefunden, also war der Code wahrscheinlich
  • 29:45 - 29:49
    unsicher." Und da ist was dran. Aber wir
    wissen ja nicht, ob das alle 10 Bugs in
  • 29:49 - 29:53
    dem Code waren. Ist der Rest von dem Code
    vielleicht super, und das waren 10
  • 29:53 - 29:58
    Ausrutscher? Das ist leider sehr schwer zu
    messen. Daher eignet sich das, glaub ich,
  • 29:58 - 30:03
    nicht als Metrik. In der Industrie gibt es
    Versuche, mit Code-Smells und statischer
  • 30:03 - 30:07
    Analyse zu arbeiten. Das ist eine Sache,
    die im Moment sehr viele Firmen
  • 30:07 - 30:11
    ausprobieren.Der Erfolg ist bisher eher
    mäßig. Meine Beobachtung ist, dass man so
  • 30:11 - 30:16
    ein Tool ausrollt, und der wirft dann zehn
    Milliarden Warnungen. Und dann schaltet
  • 30:16 - 30:20
    man so lange die Sensibilität von dem Tool
    runter, bis die Menge verarbeitbar
  • 30:20 - 30:25
    ist. Und dann verteilt man das an die
    Entwickler, und die sagen: "Das sind aber
  • 30:25 - 30:29
    alles False-Positives", und dann ist das
    Projekt gescheitert. Dann lässt man das
  • 30:29 - 30:33
    weiterlaufen, damit es nicht so aussieht,
    als wäre es gescheitert. Aber dass
  • 30:33 - 30:39
    tatsächlich was passiert, ist selten. Das
    ist zwar eine wichtige Dimension, aber ich
  • 30:39 - 30:43
    glaube, die können wir nicht ordentlich in
    eine Metrik abbilden. Ich wüsste jedenfalls
  • 30:43 - 30:50
    nicht, wie. Ich versuche das hier auch an
    Beispielen zu illustrieren, vielleicht ein
  • 30:50 - 30:55
    bisschen. Es gibt Extrema: es gibt einmal
    qmail und sendmail. Das sind eigentlich
  • 30:55 - 31:00
    ganz gute Illustrationsbeispiele: Das sind
    beides MTAs, also Programme, die auf einem
  • 31:00 - 31:05
    Server laufen und Mails weiter verschicken
    oder annehmen.Und qmail ist gebaut worden
  • 31:05 - 31:08
    mit dem Ziel, eine sichere Software zu
    haben, da hat sich jemand erst das Design
  • 31:08 - 31:12
    überlegt und dann die Software so gebaut.
    Und sendmail ist erst geschrieben worden,
  • 31:12 - 31:18
    dann kam jemand und meinte "Ja, vielleicht
    brauchen wir auch ein Design", und das
  • 31:18 - 31:24
    sieht man bis heute. qmail ist um 1993
    veröffentlicht worden, ging bis Version
  • 31:24 - 31:30
    1.0.3, und danach gab es nie wieder einen
    Patch. Und ich setze das aber bis heute
  • 31:30 - 31:37
    ein, weil es da nie wirklich Probleme gab,
    das ist sozusagen fertige Software. Das
  • 31:37 - 31:42
    ist so das eine Ende. Auf der anderen
    Seite heißt es aber auch, dass neuere
  • 31:42 - 31:46
    Features einfach nicht drin sind. Es ist
    immer ein zweischneidiges Schwert. Das ist
  • 31:46 - 31:50
    das Spektrum, auf dem wir uns bewegen: auf
    der einen Seite so ein alter Legacy-
  • 31:50 - 31:53
    Codehaufen, den keiner mehr wirklich
    verwalten will, außer er wird bezahlt
  • 31:53 - 31:57
    dafür. Und selbst unter den Leuten, die
    bezahlt wurden, sind die meisten
  • 31:57 - 32:01
    weggelaufen, übrigens. Das will einfach
    niemand haben. Die zweite Dimension, über
  • 32:01 - 32:05
    die man nachdenken kann, ist: "Gibt es
    denn noch Wartung dafür?". Das kann man bei
  • 32:05 - 32:09
    Open-Source-Produkten glücklicherweise
    ganz gut erkennen. Bei kommerzieller
  • 32:09 - 32:13
    Software ist das ein bisschen schwieriger,
    weil da gibts dann vielleicht Patches und
  • 32:13 - 32:17
    neue Versionen. Aber ob die auch
    tatsächlich was ändern, ist halt nicht so
  • 32:17 - 32:22
    klar. Oder wie viel sie ändern. Und das ist
    auch nicht so klar, wie man das jetzt
  • 32:22 - 32:25
    bewerten soll, denn wenn eine Software
    keine Updates kriegt, muss es ja nicht
  • 32:25 - 32:29
    heißen, dass sie scheiße ist. Kann ja auch
    sein, dass die einfach fertig ist. Das ist
  • 32:29 - 32:34
    zwar sehr, sehr selten, aber es gibt
    Beispiele dafür: Zum Beispiel: TeX ist ein
  • 32:34 - 32:39
    Satzsystem von Donald Knuth. Das hat er
    geschrieben und ist jetzt fertig. Da gibt
  • 32:39 - 32:45
    es zwar immer noch Patches, gelegentlich,
    aber ganz selten. Und die ändern zwei Bits
  • 32:45 - 32:49
    irgendwo. Das ist im Wesentlichen fertig.
    Oder libjpeg habe ich hier als Beispiel
  • 32:49 - 32:53
    genommen, das ist irgendwann geschrieben
    worden von der Independent JPEG Group um
  • 32:53 - 32:56
    Tom Lane und das hat eigentlich nie
    irgendwelche Updates gebraucht. Das war
  • 32:56 - 32:59
    einfach. Hat auch keine Sicherheitslücken
    gehabt. Das ist deswegen jetzt nicht
  • 32:59 - 33:03
    schlecht. Das heißt, dass es nicht so
    einfach zu sagen: "Es gibt keine Patches
  • 33:03 - 33:09
    mehr - also ist die Software scheiße." Die
    Metrik ist also auch sehr schwierig. Wie
  • 33:09 - 33:14
    machen wir das? Gute Frage. Gut, das hab
    ich jetzt schon erzählt. Auf der anderen
  • 33:14 - 33:18
    Seite ist es so: Wenn eine Software sehr
    häufig geupdatet wird, ist das auch nicht
  • 33:18 - 33:22
    unbedingt ein gutes Zeichen. Ich habe
    einen Kunden, der hat eine Software von
  • 33:22 - 33:27
    einem Drittanbieter, und der releast per
    GitHub. Und da kommen dann pro Tag fünf
  • 33:27 - 33:32
    Updates, und da steht aber jedes Mal
    Release dran. Und gelegentlich brechen die
  • 33:32 - 33:37
    was, gelegentlich nicht. Da hast du nie
    irgendeinen Ansatzpunkt, um auch nur zu
  • 33:37 - 33:42
    beurteilen, ob die Software jetzt gut ist
    oder nicht. Weil in dem Moment, wo deine
  • 33:42 - 33:47
    Untersuchung fertig ist, gibts schon
    wieder 20 neue Versionen. Ja, das ist
  • 33:47 - 33:52
    eigentlich auch nicht gut. Eine weitere
    Dimension ist die Dependency-Hölle, die
  • 33:52 - 33:57
    kennt ja fast jeder, der schon mal
    Software entwickelt hat. Besonders krass
  • 33:57 - 34:02
    ausgebildet bei JavaScript, die ein paar
    Mal sehr öffentlich auf die Fresse
  • 34:02 - 34:05
    geflogen sind, als zum Beispiel jemand ein
    Modul zurückgerufen hat, von dem sich dann
  • 34:05 - 34:10
    herausstellte, dass das irgendwie über
    transitive Abhängigkeiten in fast allen
  • 34:10 - 34:15
    Projekten irgendwie drin war. Das müsste
    man dann transitiv anwenden. Wie gesagt:
  • 34:15 - 34:20
    Wenn ich eine Software reinlade und die
    hat 50 andere Dependencies, dann muss ich
  • 34:20 - 34:26
    die Summe davon nehmen. Die Extrema dabei
    wären auf der einen Seite so eine Cloud-
  • 34:26 - 34:30
    Lock-in-Hölle, wo man die Abhängigkeiten
    gar nicht sieht, sondern man hat halt
  • 34:30 - 34:35
    irgendwie irgendeine Pipeline, aus der
    fällt irgendwas raus, und der resolvt am
  • 34:35 - 34:39
    besten die Abhängigkeiten noch
    automatisiert während des Bauens und zieht
  • 34:39 - 34:44
    sich irgendwas aus dem Internet - das ist
    das eine Extrem. Und das andere Extrem ist
  • 34:44 - 34:49
    wieder qmail. Der hat halt überhaupt keine
    Abhängigkeiten, der benutzt die C-Library,
  • 34:49 - 34:54
    das C-Runtime, das drauf ist und braucht
    einen C-Compiler zum Bauen, und das war's.
  • 34:54 - 34:59
    Da gibt es auch ein Spektrum, was sich ja
    eigentlich für eine Metrik eignen würde.
  • 34:59 - 35:03
    Aber wie gesagt, es gibt halt mehrere
    Dimensionen. Wir kommen weiter. Nächste
  • 35:03 - 35:07
    Dimension ist Codequalität, und das ist so
    ein bisschen wie Security, aber ich möchte
  • 35:07 - 35:12
    das verallgemeinern, und zwar unter
    anderem deswegen, weil es eine relativ
  • 35:12 - 35:17
    starke Korrelation zwischen vielen Bugs
    und schlechter Security gibt. Alle
  • 35:17 - 35:22
    Security-Probleme sind auch ein Bug. Wenn
    jemand viele normale Bugs hat oder Bugs,
  • 35:22 - 35:26
    von denen wir nicht wissen oder nicht
    nachgewiesen haben, dass es ein
  • 35:26 - 35:30
    Sicherheitsproblem ist, dann ist das im
    Allgemeinen ein Zeichen dafür, dass da
  • 35:30 - 35:34
    auch viele Sicherheitslücken drin
    sein werden. Daher ist es wichtig als
  • 35:34 - 35:39
    Metrik, selbst wenn es nicht um Sicherheit
    geht. Wie gesagt, die Trends dazu sind
  • 35:39 - 35:45
    statische Code-Analyse und Code-Smells.
    Ich wäre noch dafür hundert Prozent
  • 35:45 - 35:50
    Coverage beim Unit-Testing zu erwarten.
    Aber das ist halt auch schwierig, weil da
  • 35:50 - 35:55
    gibt es verschiedene Messverfahren. Zum
    Beispiel: Was macht man, wenn mehr als ein
  • 35:55 - 36:00
    Statement auf einer Zeile steht?
    Was ist die Granularität des Testens?
  • 36:00 - 36:04
    Ja, es ist alles nicht so einfach. Aber
    wir sollten zumindest mal anfangen,
  • 36:04 - 36:08
    darüber nachzudenken.Und mein Vorschlag
    wäre, aus den eben erklärten Gründen, dass
  • 36:08 - 36:12
    wir einfach gucken, welche bekannten Bugs
    gibt's denn? Wie ist denn so...? Wie viele
  • 36:12 - 36:17
    Bugs werden bekannt, pro sagen wir mal,
    Jahr? Und daraus kann man extrapolieren.
  • 36:17 - 36:22
    Die nächste Näherung wäre, dass man alle
    Compiler-Warnungen anschaltet, was
  • 36:22 - 36:26
    erschütternd wenige Software-Hersteller
    machen in ihren internen Builds. Das ist
  • 36:26 - 36:31
    wirklich erschreckend.Und was auch viele
    Leute, die irgendwelche Pipelines in der
  • 36:31 - 36:34
    Cloud benutzen, gar nicht mitkriegen, wie
    viele Warnungen da eigentlich rausfliegen.
  • 36:34 - 36:38
    Das ist eine der wichtigsten Metriken, die
    ihr als Entwickler habt, und ordentlichen
  • 36:38 - 36:42
    Code zu produzieren. Also schmeißt
    Compiler-Warnungen nicht weg, lest sie und
  • 36:42 - 36:47
    versucht, sie weg zu machen. Und zwar
    nicht mit einem Pragma. Die nächste
  • 36:47 - 36:53
    Dimension ist: Welchen Anspruch hat der
    Typ überhaupt? Das ist mir aufgefallen -
  • 36:53 - 36:59
    es gab, ich glaube, libexiv2. Das ist so
    eine Software, um Metadaten in Digital-
  • 36:59 - 37:05
    Kamera-Bildern zu lesen. Da steht so drin,
    irgendwie GPS-Koordinaten und was das für
  • 37:05 - 37:09
    eine Linse war, und so. Und das ist halt so mehr
    oder weniger wohl definiert, wie dieser
  • 37:09 - 37:12
    Standard aussieht. Und es gibt eine
    OpenSource-Library dafür und da gab's es
  • 37:12 - 37:16
    einen Haufen Bugs drin und dann hat der
    Autor von dieser Software irgendwann
  • 37:16 - 37:19
    einfach geschrieben: "Ja, das dürft ihr
    halt nicht anwenden auf
  • 37:19 - 37:23
    unvertrauenswürdige Dateien." Das heißt,
    der hat nie den Anspruch gehabt, dass
  • 37:23 - 37:27
    das sicher ist. Aber das stand halt nicht
    dran, und die Leute haben seine Software
  • 37:27 - 37:31
    benutzt und angenommen: "Ja, der wird
    schon darauf geachtet haben." Daher glaube
  • 37:31 - 37:35
    ich, dass Erste und Beste, was wir machen
    können, was tatsächlich eine Auswirkung
  • 37:35 - 37:39
    hat, ist, wenn wir anfangen, an die
    Software zu schreiben, was eigentlich der
  • 37:39 - 37:43
    Anspruch war. Also was glauben wir, was
    wir erreicht haben? Was haben wir
  • 37:43 - 37:47
    überhaupt versucht. So das ist, glaube
    ich, wichtig. Eine andere Sache, die es
  • 37:47 - 37:52
    hier gab, war, dass Leute Features machen,
    die nach Sicherheit klingen. So, das war
  • 37:52 - 37:56
    eine Sache, die ich bei Microsoft mal
    erlebt habe. Da gab es eine Feature namens
  • 37:56 - 37:59
    "Network Access Protection", und dann bin
    ich da hingegangen für Thread Modelling
  • 37:59 - 38:03
    und wollte wissen: "Was sind eure eure
    Security Guarantees? Was sagt ihr denn
  • 38:03 - 38:06
    zu?" Und da meinten die so: "Ja, gar
    nichts. Wir sind kein Security-Feature."
  • 38:06 - 38:11
    Meinte ich so: "Ja, dann ist der Name
    vielleicht ein bisschen verwirrend." Aber
  • 38:11 - 38:15
    sowas passiert halt, weil es einen
    Disconnect gibt zwischen den Leuten, die
  • 38:15 - 38:20
    das Projekt machen, und denen, die den
    Namen wählen und das Marketing machen. Ja,
  • 38:20 - 38:25
    gut, da gibts auch nochmal Abstufungen. Es
    gibt halt so explorative Software.
  • 38:25 - 38:29
    Übrigens, fast alle Open Source Software,
    die ich so veröffentlicht habe, ist auch
  • 38:29 - 38:33
    explorativ. Das ist nicht negativ gemeint
    - im Gegenteil, das ist der beste Weg, wie
  • 38:33 - 38:36
    man Programmieren lernen kann. Ich habe
    etwas verstanden, wenn ich es einmal
  • 38:36 - 38:41
    implementiert habe. Das heißt nicht, dass
    die Implementation dann gut war. Das
  • 38:41 - 38:46
    versuche ich natürlich. Aber es ist
    wichtig, das zu kommunizieren: "Dieser Code
  • 38:46 - 38:50
    war explorativ." Der ist jetzt vielleicht
    gut genug abgehangen und hat genug
  • 38:50 - 38:55
    Real-Life-Tests gemacht und Interoperabilität,
    dass man ihm trauen kann. Aber der
  • 38:55 - 39:01
    Anspruch war explorativ. Oder es gibt
    dieses Szenario: "The guy left."
  • 39:01 - 39:05
    Das erlebt man gelegentlich bei großen
    Firmen. "Ja, wir haben hier noch ein Stück
  • 39:05 - 39:07
    Code, aber wir wissen gar nicht, wer das
    geschrieben hat." Oder: "Wir wissen schon,
  • 39:07 - 39:11
    wer das geschrieben hat, aber das war
    einer der Gründer, und der hat jetzt keine
  • 39:11 - 39:16
    Zeit mehr für sowas." Oder: "Der Typ, der
    ist in Ruhestand gegangen", oder
  • 39:16 - 39:20
    so. Das kommt alles vor. Und das finde
    ich aber wichtig, dass man das
  • 39:20 - 39:25
    kommuniziert, weil die Leute, die das
    benutzen, die wissen, dass halt nicht.
  • 39:25 - 39:29
    Oder was üblicherweise das beste Szenario
    ist, vom Anspruch her, ist, dass der Typ,
  • 39:29 - 39:33
    der das entwickelt, auch der aktuelle
    Maintainer ist und am Besten versucht, das
  • 39:33 - 39:37
    kommerziell zu vermarkten, weil der hat
    dann wirklich ein Interesse daran, dass es
  • 39:37 - 39:40
    ordentlich wird in den meisten Fällen.
    Gut, es gibt immer noch mehr Dimensionen,
  • 39:40 - 39:43
    tut mir leid, dass es so ein komplexes
    Problem ist.
  • 39:43 - 39:46
    Es gibt auch das Problem, dass der Typ,
  • 39:46 - 39:52
    der das umsetzt, die besten Intentionen
    hatte und die besten Techniken
  • 39:52 - 39:57
    benutzt, die es gibt, aber dass die Spec,
    die er umsetzt, scheiße ist. Zum Beispiel
  • 39:57 - 40:00
    ist XML eine Spec, die richtig scheiße
    ist. Da stehen Sachen drin, wie, dass man
  • 40:00 - 40:04
    eine Entity-Expansion machen muss, und
    damit kann man einen ganz trivial einen
  • 40:04 - 40:08
    DoS-Angriff machen - auf, im Grunde jeden
    standardkonformen XML-Parser. Und dann
  • 40:08 - 40:12
    haben die alle angefangen, irgendwie
    Konfiguration nachzurüsten, wo man das
  • 40:12 - 40:16
    ausschalten kann. Aber damit ist man
    eigentlich nicht mehr standardkonform.
  • 40:16 - 40:19
    Das kommt häufiger vor, dass Specs
    schlecht sind. Das ist kein Einzelfall.
  • 40:19 - 40:23
    Ich will jetzt nicht auf XML zeigen,
    andere sind auch nicht gut. Oder JSON-
  • 40:23 - 40:27
    Parser: Da gab es jetzt ein paar Versuche,
    da sind die Leute einfach herumgegangen
  • 40:27 - 40:32
    und haben ganz viele Rekursionstiefen
    aufgemacht und plötzlich platzten die
  • 40:32 - 40:36
    Parser alle. Oder Window-Messages bei
    Windows ist ein ganz altes Problem. Das
  • 40:36 - 40:41
    ist halt erfunden worden, bevor es mehr
    als einen User gab. Oder so Message-Bus
  • 40:41 - 40:46
    allgemein, ist so eine Sache, die häufig
    in so Cloud-Installationen und in großen
  • 40:46 - 40:50
    Firmen gesehen werden kann. Dass die Leute
    sagen: "Okay, wenn wir das über die
  • 40:50 - 40:54
    Datenbank machen, ist es zu langsam. Also
    bauen wir hier noch ein Message-Bus drum
  • 40:54 - 40:58
    rum." Und dann kann aber jeder, der
    Zugriff auf den Message-Bus hat,
  • 40:58 - 41:03
    auch spoofen oder kann alle anderen Daten
    sehen. Das ist die Idee schon schlecht
  • 41:03 - 41:06
    und es ist egal, wie gut ich das
    umsetze - das wird dadurch nicht
  • 41:06 - 41:11
    besser. Dann gibt's noch so Lock-In-
    Probleme. Da weiß ich nicht, ob die hier
  • 41:11 - 41:14
    wirklich rein gehören, aber ich finde das
    wichtig genug, dass, wenn wir schon dabei
  • 41:14 - 41:20
    sind, hier Labels zu vergeben, das
    auch erwähnen sollten. Zum Beispiel
  • 41:20 - 41:23
    irgendeine Library, die eigentlich genau
    das tut, was ich haben will. Aber sie
  • 41:23 - 41:29
    läuft nur in der Amazon-Cloud. Dann hab
    ich meine Freiheit, welche Plattform ich
  • 41:29 - 41:32
    verwende, eingeschränkt, wenn ich diese
    Library reinziehe. Das ist eigentlich auch
  • 41:32 - 41:40
    eine Sache, die man vorher kommunizieren
    müsste - und zwar klar. Oder bei Cryptocode
  • 41:40 - 41:44
    war lange Zeit ein Problem, dass der
    assembler-handoptimiert war für die Intel-
  • 41:44 - 41:48
    Architektur. Aber wenn man dann so
    Randgruppen-Plattformen wie
  • 41:49 - 41:55
    PowerPC, MIPS oder sogar ARM hatte, dann
    lief das halt nicht gut. Das ist jetzt ist keine
  • 41:55 - 42:01
    harte Abhängigkeit, aber es schränkt
    den Benutzer ein. Wenn wir schon
  • 42:01 - 42:05
    dabei sind, dann können wir auch gleich
    noch den Ressourcen-Footprint reinziehen.
  • 42:05 - 42:08
    Es gibt ja häufig so Sachen: "Ja, wir
    müssen hier sortieren, aber wir rechnen
  • 42:08 - 42:12
    nur mit zehn Elementen - also machen wir
    Bubbelsort." Und dann kommt jemand
  • 42:12 - 42:16
    und tut mehr Elemente rein und
    plötzlich platzt das. Das ist eigentlich
  • 42:16 - 42:19
    auch eine Sache, die man kommunizieren
    sollte: "Mit welchen Größenordnungen gehen
  • 42:19 - 42:26
    wir hier eigentlich um? Worauf ist das
    ausgelegt?" Und Achtung! Es geht nicht nur
  • 42:26 - 42:29
    um CPU, es geht auch um den RAM-Bedarf.
    Und es geht auch darum, dass zum Beispiel
  • 42:29 - 42:33
    eine Library ständig auf der Platte
    rumschreibt und I/O-Bandbreite frisst oder
  • 42:33 - 42:39
    versucht, aus dem Netz irgendwas
    nachzuladen. Also nehmen
  • 42:39 - 42:42
    wir mal an, das sind die
    Dimensionen. Es ist ein bisschen
  • 42:42 - 42:45
    schwierig, da eine Metrik daraus zu bauen,
    denn eine gute Metrik ist ja immer
  • 42:45 - 42:48
    zwischen 0 und 1 oder, sagen wir, 0 und
    10, das heißt, man hat eine
  • 42:48 - 42:52
    Vergleichbarkeit. Aber wenn ich sage, wir
    müssen transitiv die Probleme der
  • 42:52 - 42:55
    Dependencies mit reinziehen,
    dann haben wir die Skala nicht,
  • 42:55 - 42:58
    weil die kann dann beliebig groß werden,
    wenn ich mehr Dependencies reinziehe.
  • 42:58 - 43:06
    Daher glaube ich, von diesem Metrik- bzw.
    Scoreproblem müssen wir weg. Und es gibt
  • 43:06 - 43:09
    das Problem, wenn ich eine Metrik habe,
    dass die Leute dann Gaming betreiben, um
  • 43:09 - 43:13
    die Metrik zu schönen und nicht das
    Problem zu lösen. Da dachte ich mir:
  • 43:13 - 43:18
    "Nennen wir es mal Legacy-Score...
    aber Score geht eigentlich nicht... hmm...
  • 43:18 - 43:23
    was kann man denn noch machen? Und vor
    allem wofür gilt denn die Metrik dann? Da gibt's
  • 43:23 - 43:27
    eigentlich auch verschiedene Ansätze, was
    man sagen kann..." Man könnte sagen für die
  • 43:27 - 43:32
    gesamte Software, dass sich so eine Art
    Score ausrechne. Und das ist wie, sag ich
  • 43:32 - 43:35
    mal, bei einer Versicherung, dass sie halt
    guckt, wie viel, wie wahrscheinlich ist
  • 43:35 - 43:40
    es, dass ich hier zahlen muss? So in der
    Richtung Risikobewertung. Oder ich kann
  • 43:40 - 43:43
    das für ein Modul machen. Oder
    für Manager, dass der Manager sagt:
  • 43:43 - 43:48
    "Das Modul ziehen wir nicht rein, das ist
    zu riskant." Oder für Entwickler. Oder
  • 43:48 - 43:52
    vielleicht sogar pro Funktion? Und da hab
    ich mir gedacht: "Okay, gucken wir doch
  • 43:52 - 43:55
    mal, was es da für Prior Art gibt, was
    haben die Leute denn bisher gemacht?" Und
  • 43:55 - 43:59
    ich habe einen schönen Standard gefunden
    von 1993: Kompakte Darstellung
  • 43:59 - 44:02
    mehrdimensioneller Daten, nämlich, den
    Geek Code. Wer hier kennt den Geek Code?
  • 44:02 - 44:08
    Das jetzt für die älteren unter euch. Das
    sah so aus: die Formatierung
  • 44:08 - 44:13
    war so ein bisschen als als Scherz auf
    PGP. Die Idee war, dass man sich selbst
  • 44:13 - 44:18
    beschreibt. Also GED heißt zum Beispiel
    Geek Education Sector. Und danach? Das
  • 44:18 - 44:22
    sind alles irgendwelche Dimensionen. Und
    dann eine Bewertung. Zum Beispiel: s heißt:
  • 44:22 - 44:28
    "Wie groß bin ich?" Und das haben die Leute
    in ihre Signature getan und im Usenet
  • 44:28 - 44:31
    verbreitet. Und dann konnte man so grob
    sich eine Vorstellung machen, was der
  • 44:31 - 44:35
    andere Typ ist, welche Interessen er hat.
    Ich finde das nicht gut für Typen. Das war
  • 44:35 - 44:39
    sozusagen der Vorgänger von Facebook
    könnte man aus heutiger Sicht sagen. Die
  • 44:39 - 44:42
    Leute haben freiwillig alles Mögliche über
    sich verraten. Aber die Idee ist ja
  • 44:42 - 44:44
    vielleicht nicht schlecht und habe ich mir
    gedacht: "Jetzt versuchen wir
  • 44:44 - 44:48
    doch mal, die Dimensionen, die ich hier
    formuliert habe, auf so eine Art Score
  • 44:48 - 44:54
    abzubilden." Und das ist gar nicht so
    einfach, deswegen habe ich auch den
  • 44:54 - 44:56
    Vortrag hier erst einmal auf deutsch
    gemacht, bevor ich das international
  • 44:56 - 45:00
    vortrage, weil ich glaube, da muss noch
    gefeilt werden. Ich würde mich über euer
  • 45:00 - 45:03
    Feedback da auch wirklich freuen, wenn ihr
    noch Vorschläge habt. Ich zeig jetzt mal
  • 45:03 - 45:08
    den Entwurf, den ich gemacht habe bisher.
    Die Idee wäre, dass man es als Autor
  • 45:08 - 45:12
    von einer Library in einen Kommentar
    reinschreibt, oben. Und dann hat man so
  • 45:12 - 45:16
    eine Art, ich sage mal, Hundepfeife. Der
    andere Entwickler kann es lesen und
  • 45:16 - 45:22
    versteht, was gemeint ist. Das hier ist
    jetzt noch relativ klar: "Wer besitzt
  • 45:22 - 45:27
    eigentlich den Code?" Und da ist der
    schlimmste Fall natürlich: man sieht
  • 45:27 - 45:30
    den gar nicht. Man hat nicht mal eine
    Kopie davon, sondern das läuft irgendwo in
  • 45:30 - 45:34
    der Cloud. Das wäre hier klar die
    Dimension. Dann... das ist so ein bisschen
  • 45:34 - 45:37
    verwandt, aber nicht genau dasselbe:
    "Ich habe den Code, und ich kann ihn
  • 45:37 - 45:41
    ändern." Oder: "Ich kann ihn nur lesen",
    sowas. Oder: "Der ist verloren gegangen." Oder
  • 45:41 - 45:52
    so das Huawei Modell: "Wir lassen die
    Regierung reingucken." Ja, das ist jetzt so
  • 45:52 - 45:54
    ein bisschen mit dem scherzenden Auge
    natürlich, aber ich finde die Idee
  • 45:54 - 46:00
    eigentlich, muss ich sagen, ganz
    attraktiv. Ich werde das bei meinem
  • 46:00 - 46:05
    eigenen Code mal einbauen. Das
    Problem bei sowas ist natürlich, dass man
  • 46:05 - 46:09
    gucken muss, dass das obere Ende auch
    tatsächlich das obere Ende ist und nur von
  • 46:09 - 46:13
    wenigen erreicht werden wird. Dass jemand
    tatsächlich Sicherheitszusagen macht, ist
  • 46:13 - 46:19
    sehr selten. Eigentlich fast nie. Dann
    gibt es so Leute, die machen seit 20
  • 46:19 - 46:22
    Jahren immer nur dasselbe. Zum Beispiel
    der Typ, der Zstandard macht, das so eine
  • 46:22 - 46:26
    Kompressions-Library, die jetzt über
    Facebook released wurde, der hat vorher
  • 46:26 - 46:31
    LZ4 gemacht und macht seit Ewigkeiten
    Kompressosions-Algorithmen. Da kann man
  • 46:31 - 46:35
    annehmen, der weiß grob, was er tut. Das geht
    aber runter bis zu: "Ich bin ja nicht
  • 46:35 - 46:38
    der Typ, der das geschrieben hat, sondern
    ich muss es hier nur verwalten. Ich hab
  • 46:38 - 46:43
    das geerbt, ich bin hier der Azubi." Das
    müsste eigentlich dran stehen, finde ich.
  • 46:44 - 46:48
    Wie sieht es denn mit der Korrektheit aus?
    Das ist ja auch ein Problem. Und das geht
  • 46:48 - 46:51
    halt von: "Ich habe einen Beweis, und den
    kannst du nachvollziehen." Bis über: "Ich
  • 46:51 - 46:56
    habe einen Beweis, und den kannst du nicht
    nachvollziehen." Oder: "Naja, wir versuchen
  • 46:56 - 47:00
    immer, alle Bugs zu schließen", wobei
    schließen und fixen ein Unterschied ist.
  • 47:00 - 47:06
    Also aufgepasst! Immer schön in den
    Bugtracker gucken. Und dann gibt's halt die
  • 47:06 - 47:09
    Leute, die argumentieren: "Ja, das ist
    doch gar kein Security Problem, der crasht
  • 47:09 - 47:15
    doch bloß." Also Leute, die entweder keine
    Ahnung haben oder böswillig sind. Und das
  • 47:15 - 47:19
    finde ich wichtig, das zu kommunizieren.
    Die meisten Leute sind hier bei Stand C-,
  • 47:19 - 47:24
    da draußen, oder sie haben überhaupt
    keinen Bugtracker. Das gibt's auch noch
  • 47:24 - 47:29
    vereinzelt. Dann hab ich mir gedacht:
    "Vielleicht müssen wir noch sagen:
  • 47:29 - 47:34
    'Welche Art von Design ist denn in die
    Entwicklung eingeflossen?'" Das geht halt
  • 47:34 - 47:37
    los mit: "Ja, alle Buzzwords angeklickt.
    Wir haben hier Least Privilege usw."
  • 47:37 - 47:43
    Dann gibt es einen relativ großen
    Sprung zu: "Naja, wir validieren unsere
  • 47:43 - 47:48
    Inputs." Das ist schon mal gut, aber es
    geht halt bis runter zu so
  • 47:48 - 47:51
    Bullshit-Blabla, von wegen: "Ja, wir haben
    doch einen Anti-Virus."
  • 47:51 - 47:54
    Publikum lacht
  • 47:54 - 47:59
    Und ich finde, das wäre eigentlich schön,
    wenn man es an der Software hätte. So eine
  • 47:59 - 48:06
    Art Label. Die Idee kam mir
    eigentlich, als ich mal in Amerika so eine
  • 48:06 - 48:10
    Multi-Vitamin-Tabletten-Packung gekauft
    habe, denn da ist hinten so eine riesige
  • 48:10 - 48:14
    Tabelle drauf, mit den Supplement Facts
    und da steht drauf: "Dieses Vitamin, so
  • 48:14 - 48:18
    und so viel Prozent der Recommended Daily
    Allowance." Und da kann man dann sehen:
  • 48:18 - 48:23
    "Okay, die wollen mich verarschen." Weil da
    steht dann sowas wie: "Vitamin C: 5000%"
  • 48:23 - 48:27
    So: "Viel hilft viel." Also ich
    meine, da muss man natürlich trotzdem, als
  • 48:27 - 48:32
    der, der dieses Label liest, ein grobes
    Verständnis haben, was das bedeutet. Aber
  • 48:32 - 48:37
    immerhin. Ich glaube, das ist ein Weg, den
    wir mal ausprobieren können. Übrigens das
  • 48:37 - 48:42
    hier unten: "The author left" und "project
    abandoned" ist häufiger, als man glaubt.
  • 48:42 - 48:47
    Volatility: das versucht, so ein
    bisschen dieses Agilitätsproblem
  • 48:47 - 48:51
    anzugehen. Dass Leute einfach häufiger
    releasen, als man prüfen kann, ob das
  • 48:51 - 48:55
    jetzt ordentlich ist oder nicht. Aber so
    richtig eine gute Lösung gibt es
  • 48:55 - 49:00
    eigentlich nicht. Was ich so persönlich
    als am entspanntesten empfinde, ist Vim.
  • 49:00 - 49:04
    Vim bringt im Grunde täglich Updates raus,
    aber man merkt nie, dass sich irgendwas
  • 49:04 - 49:09
    verändert hat. Weil die Software compiled
    vorher und nachher, alle Sachen, die ich
  • 49:09 - 49:14
    benutzt habe, gehen noch. Das ist, glaube
    ich, das Optimalziel, was man da erreichen
  • 49:14 - 49:17
    kann bei Software, dass der Kunde gar
    nicht merkt, ob gepatcht wurde oder nicht,
  • 49:17 - 49:21
    weil das einfach alles weiter
    funktioniert. Die Spec hatte ich ja schon
  • 49:21 - 49:26
    erwähnt. Die müssen wir auch irgendwie
    abbilden, ob die Spec was taugt. Und da
  • 49:26 - 49:32
    gibt es auch ein großes Spektrum: Dass die
    Spec offen, kurz und verständlich ist, ist
  • 49:32 - 49:36
    leider auch selten. Häufig kommt es vor,
    dass die Spec hinter einer Paywall ist,
  • 49:36 - 49:40
    und das ist dann so gut, als wenn es gar
    keine Spec gäbe, weil ich als Open-Source-
  • 49:40 - 49:44
    Typ werde jetzt nicht zur ISO laufen und
    mir für ein paar tausend Euro irgendwie
  • 49:44 - 49:49
    die MPEG-Spec runterladen um zu gucken, ob
    der MPEG-Player ordentlich ist, den ich da
  • 49:49 - 49:54
    gerade runtergeladen hab. Dann haben
    wir noch Dependecies. Das müsste man
  • 49:54 - 49:58
    eigentlich transitiv machen, da ist mir
    jetzt auch nicht klar, wie man das auf den
  • 49:58 - 50:02
    Score abbildet. Wenn einer von euch eine
    Idee hat, bin ich da gerne für zu haben.
  • 50:02 - 50:07
    Also wie sieht das in der Praxis
    aus? Ich habe hier mal versucht, ein paar
  • 50:07 - 50:11
    Beispiele zu machen - ungefähr so. Das
    Problem ist halt, dass die Dimensionen
  • 50:11 - 50:15
    jeweils auf beiden Seiten subjektiv sind.
    Das heißt, für den einen oder anderen ist
  • 50:15 - 50:21
    es vielleicht okay, wenn er den Quellcode
    nicht hat, solange es noch Wartungen gibt.
  • 50:21 - 50:25
    Also Leute, die Windows einsetzen, zum
    Beispiel. Für die ist es okay,
  • 50:25 - 50:29
    wenn es den Quellcode nicht
    gibt. Aber das heißt eben, dass der
  • 50:29 - 50:33
    Score auch nicht einfach eine Zahl sein
    kann, sondern er muss pro Dimensionen
  • 50:33 - 50:38
    einen Wert haben. Das sieht jetzt irgendwie
    schwer zu lesen aus - und ist es auch.
  • 50:38 - 50:43
    Aber bei dem Geek Code hat sich
    herausgestellt: wenn man so ein paar Tage
  • 50:43 - 50:48
    macht, dann gewöhnt man sich dran. Und ich
    glaube, das ist eine ganz gute Idee. Ich
  • 50:48 - 50:52
    hab mir dann noch überlegt: "Eigentlich
    brauchst du jetzt noch eine schöne Domain."
  • 50:52 - 50:56
    Habe mir überlegt: "legacyco.de wäre
    super!", aber die hat schon Xing gekauft.
  • 50:56 - 50:59
    Publikum lacht
  • 51:00 - 51:06
    Ja gut, das war so mein Vorschlag. Ich hoffe,
    ich kriege jetzt eine Menge gute Ideen,
  • 51:06 - 51:10
    was man da noch verbessern kann oder
    vielleicht auch andere Vorschläge, die
  • 51:10 - 51:14
    keinen Score beinhalten. Vielleicht ist ja
    auch der ganze Ansatz schon falsch. Aber
  • 51:14 - 51:18
    ich bin mir sicher, dass wir als Industrie
    jetzt mal loslegen müssen. Ich glaube,
  • 51:18 - 51:23
    reaktiv funktioniert das nicht, sondern
    wir müssen gucken, wie wir im
  • 51:23 - 51:27
    Entwicklungsprozess erstens dafür sorgen,
    dass die Leute die Entscheidungen, welche
  • 51:27 - 51:31
    Produkte sie reinziehen, welche
    Dependencies sie reinziehen, auf
  • 51:31 - 51:37
    informierter Grundlage treffen können. Ich
    hätte gern, dass es so einen Score gibt,
  • 51:37 - 51:42
    wo man dann auch als Entwickler einen
    Anreiz hat, das besser werden zu lassen,
  • 51:42 - 51:46
    weil man sehen kann: "An der Stelle
    bin ich noch nicht der Standard,
  • 51:46 - 51:50
    der ich sein möchte." Ansonsten,
    wir haben jetzt die
  • 51:50 - 51:54
    Saal-Mikrofone. Ich hoffe, die Signal-
    Engel sind schon so weit. Ansonsten, Fragen
  • 51:54 - 51:58
    nehme ich auch gern per Mail entgegen.
    Vielen Dank für die Aufmerksamkeit.
  • 51:58 - 52:10
    Applaus
  • 52:11 - 52:14
    Herold: Dann können jetzt alle an die
    Mikrofone gehen, die noch Fragen haben.
  • 52:14 - 52:17
    Wir haben direkt eine Frage aus dem
    Internet. Bitte!
  • 52:17 - 52:21
    Anonym: Gibt es Projekte im echten Leben,
    wo das Problem mit der Komplexität deiner
  • 52:21 - 52:25
    Meinung nach richtig gemacht wurde? Und
    wenn ja, wo findet man die?
  • 52:25 - 52:31
    Fefe: Sehr selten. Es gab einmal
    vor ein paar Jahren gab es so einen Push,
  • 52:31 - 52:35
    wo viele Leute angefangen haben, Software
    zu veröffentlichen und damit zu bewerben,
  • 52:35 - 52:41
    dass sie besonders klein oder minimal sein
    soll. Da bin ich auch einer von. Aber es
  • 52:41 - 52:44
    stellt sich halt raus, dass es auch andere
    Projekte gibt, die halt minimal dran
  • 52:44 - 52:47
    schreiben, weil sie finden, es sei
    minimal, und das ist dann aber nicht
  • 52:47 - 52:52
    minimal. Zum Beispiel gab es neulich ein
    Announcement von einem Systemd-Clone in
  • 52:52 - 52:57
    Rust, und ich bin eigentlich ein Fan von
    Rust und kein Fan von Systemd. Deswegen
  • 52:57 - 53:02
    fände ich da ein Ersatz schon
    gut. Aber Rust erzeugt keine kleinen
  • 53:02 - 53:06
    Binaries, sondern da fallen so große
    Monster raus. Das heißt, das ist dann zwar
  • 53:06 - 53:12
    minimal im Sinne von, wie viel Features es
    implementiert, aber das Endprodukt ist
  • 53:12 - 53:15
    halt riesig groß. Da kann jetzt der Typ
    nichts für, der das geschrieben hat. Das
  • 53:15 - 53:19
    ist im Moment noch ein Rust-Problem,
    und da arbeiten die auch dran.
  • 53:19 - 53:24
    Aber "minmal", "Komplexität", "gering",
    ist eine subjektive Sache. Ich
  • 53:24 - 53:28
    persönlich habe immer die Software von
    Dan[iel] Bernstein sehr gut gefunden, also
  • 53:28 - 53:33
    qmail und djbdns sind gute Beispiele
    dafür, wie ein Code aussieht, der
  • 53:33 - 53:39
    Komplexität gut managed und klein hält.
    Aber es ist ein kleines Feld. Man findet
  • 53:39 - 53:45
    da nicht so viele Beispiele von Software,
    die gut gemacht und unterkomplex ist.
  • 53:47 - 53:52
    Herold: Dann, am Mikrofon 10 hatte ich
    gesehen. Kann das sein? Ich habe gerade
  • 53:52 - 53:56
    ein Signal bekommen... Nein? Alles klar.
    Da machen wir weiter mit Mikrofon zwei.
  • 53:56 - 54:00
    Bitte!
    Anonym: Vielen Dank für die spannenden
  • 54:00 - 54:05
    Ideen! Meine Frage geht so ein bisschen
    auf: Ist das nicht zu freiwillig und zu
  • 54:05 - 54:08
    selbst auferlegt? Ist das nicht zu CDU-
    mäßig als Lösung?
  • 54:08 - 54:11
    Fefe lacht
    Was hält nicht davon ab, einfach zu sagen
  • 54:11 - 54:15
    Ich bin M+++, obwohl ich das vielleicht
    gar nicht bin?
  • 54:15 - 54:20
    Fefe: Das ist in der Tat ein Problem, und
    ich bin mir auch nicht sicher, wie und ob
  • 54:20 - 54:25
    man das lösen kann. Ich glaube aber, wenn
    man anfängt und das so ein bisschen
  • 54:25 - 54:30
    losgeht, dass es dann auch ein Druck gibt
    aus der Community, der die Leute davon
  • 54:30 - 54:35
    abhält zu lügen. Also meine Erfahrung mit
    Entwicklern ist, dass die meisten Leute
  • 54:35 - 54:39
    eigentlich gute Menschen sind. Die
    möchten keinen Scheiß machen, niemand
  • 54:39 - 54:43
    möchte lügen. Das heißt, wenn du denen
    eine Gelegenheit gibst darzustellen, dass
  • 54:43 - 54:47
    das noch nicht fertig ist, dann werden sie
    das auch tun, im Allgemeinen. Außer du
  • 54:47 - 54:50
    hast jemanden, der es wirklich nicht
    beurteilen kann. Das Risiko kriegst du mit
  • 54:50 - 54:54
    dem Label nicht weg. Aber ich glaube, es
    ist schon mal ein guter Schritt, wenn wir
  • 54:54 - 54:59
    den den Entwicklern, die gerade dabei
    sind, sich eine Dependancy ins Projekt zu
  • 54:59 - 55:03
    ziehen, irgendwas in die Hand geben, woran
    sie erkennen können: "Ist das denn jetzt
  • 55:03 - 55:07
    ernst gemeint, oder war das hier nur so
    ein Spielprojekt?" Und ich glaube, das ist
  • 55:07 - 55:11
    ein guter Anfang. Aber ich weiß es
    natürlich auch nicht. Müssen wir
  • 55:11 - 55:18
    ausrollen, müssen wir gucken.
    Herold: Dann am Mikrofon 6, war zuerst.
  • 55:18 - 55:24
    Anonym: Das geht vielleicht auch jetzt in
    dieselbe Richtung wie der Fragende vor
  • 55:24 - 55:31
    mir. Vielleicht. Könnte man wie so eine
    Art Rechtsprechungs-Instanz installieren?
  • 55:31 - 55:38
    Ich meine, kein Entwickler-Team aus Indien
    wird das als Malus akzeptieren, wenn da
  • 55:38 - 55:43
    dran steht: Entwickler-Team in Indien hat
    jetzt das gemacht. Hältst du das für eine
  • 55:43 - 55:47
    sinnvolle Idee? Wie könnte man das
    umsetzen?
  • 55:47 - 55:51
    Fefe: Also es ging jetzt nicht um Indien,
    das hätte auch Massachusetts sein können,
  • 55:51 - 55:55
    sondern es geht darum, dass das Team halt
    nicht der ist, der das geschrieben hat,
  • 55:55 - 55:59
    sondern irgendjemand hat es jetzt halt am
    Bein, weil wir brauchten einen Maintainer.
  • 55:59 - 56:04
    Das ist immer ein Problem. Und natürlich
    wird es auch irgendwie Betrüger geben.
  • 56:04 - 56:10
    Aber ich hoffe, dass man die dann erkennt,
    weil die halt in allen Feldern das Beste
  • 56:10 - 56:14
    jeweils anklicken. Aber ich weiß es halt
    auch nicht, das muss man ausprobieren.
  • 56:14 - 56:17
    Also meine Erfahrung ist, dass an anderer
    Stelle Communities schon helfen, den
  • 56:17 - 56:22
    Standard hochzuziehen, wenn man zumindest
    einfach mal anfängt und sagt: "Das
  • 56:22 - 56:26
    hier ist wichtig, da müssen wir drüber
    reden." Und das ist, glaube ich, ein
  • 56:26 - 56:31
    Zeichen, wenn es so einen Code gibt, wo es
    ein Feld gibt, für: "Wie volatil ist denn
  • 56:31 - 56:35
    das?", und supervolatil ist nicht der
    höchste Score, dass man vielleicht
  • 56:35 - 56:40
    irgendwie auf die Art auch Ideen
    transportiert kriegt? Dass man sagt:
  • 56:40 - 56:44
    "Vielleicht musst du nochmal drüber
    nachdenken, wie du dein Projekt aufziehst."
  • 56:46 - 56:50
    Herold: Dann bitte am Mikrofon 1.
    Anonym: Ich hab grad drüber
  • 56:50 - 56:54
    nachgedacht, ob das nicht so etwas
    ähnliches ist, wozu die
  • 56:54 - 56:58
    Lebensmittelindustrie so ein bisschen
    genötigt werden musste: Alle Inhaltsstoffe
  • 56:58 - 57:02
    reinzuschreiben, Allergene reinzuschreiben
    und so. Und deshalb die Frage: Sollten wir
  • 57:02 - 57:07
    nicht möglichst bald als Follow-Up
    entwickeln, so eine Art Software Code-
  • 57:07 - 57:10
    Ampel einzuführen. Und dann rot, gelb und
    grün daraus zu machen.
  • 57:10 - 57:13
    Lacht
    Fefe: Ja, genau. Das war ja eigentlich die
  • 57:13 - 57:16
    Idee. Aber ich glaube, du kannst es nicht
    runterbrechen auf einen Score, weil
  • 57:16 - 57:19
    einige Teile davon subjektiv sind. Das ist
    ja bei Lebensmitteln eher nicht so,
  • 57:19 - 57:23
    sondern da vertraust du der Behörde. Die
    Behörde sagt irgendwie so und so viel
  • 57:23 - 57:27
    Quecksilber ist Maximum. Und wenn mehr,
    ist es nicht gut. Da fängst du nicht
  • 57:27 - 57:30
    an zu verhandeln. Aber wenn jetzt die
    Software kommt und sagt: "Wir ziehen
  • 57:30 - 57:34
    hier noch ein MySQL rein", und du weißt es
    nicht besser, dann sagst du halt:
  • 57:34 - 57:38
    "Okay". Das ist eine Sache, die muss man
    auch dem Endbenutzer überlassen. Weil du
  • 57:38 - 57:43
    willst ja auch nicht, zum Beispiel,
    OCaml benachteiligen, weil
  • 57:43 - 57:47
    da noch keiner von gehört hat. Und dass
    die Leute sagen: "Ja wie, da gibts jetzt
  • 57:47 - 57:51
    keinen Score für?" Das ist halt nicht
    C. Ist es jetzt besser oder nicht? Das
  • 57:51 - 57:55
    muss ja offen genug bleiben. Deswegen
    glaube ich auch nicht an Schiedsgerichte
  • 57:55 - 57:59
    und irgendwie Organisationen, die
    Labels vergeben. Das ist doch nie gut
  • 57:59 - 58:03
    ausgegangen, in meiner Erfahrung. Ich glaube,
    das muss aus der Community kommen,
  • 58:03 - 58:06
    und das muss so laufen, dass man das
    Gefühl hat, ich tue jetzt hier etwas
  • 58:06 - 58:10
    Besseres, und ich kann den Erfolg sehen,
    weil mein Score jetzt hier besser wird.
  • 58:10 - 58:13
    Ich kann jetzt hier ++ schreiben. Ist
    jetzt die Hoffnung. Ich weiß auch nicht,
  • 58:13 - 58:18
    ob es geht.
    Herold: Dann bitte nochmal Mikrofon 2.
  • 58:18 - 58:22
    Anonym: Mir hat eine Dimension gefehlt,
    die ein bisschen in Wartungen passt, aber
  • 58:22 - 58:26
    nicht perfekt. Wir sind ja hier ein Raum
    voller Leute, die Sachen selbst in die Hand
  • 58:26 - 58:29
    nehmen. Wie leicht ist es denn
    mitzumachen? Wie leicht ist es Bugs selbst
  • 58:29 - 58:33
    im Upstream zu fixen? Muss man erstmal einen
    Vertrag unterschreiben, wo man alle Rechte
  • 58:33 - 58:37
    abtritt, oder? Das ist, glaube ich,
    auch noch eine wichtige Dimension.
  • 58:37 - 58:41
    Fefe: Das stimmt. Ich habe das versucht
    abzubilden, über den: "Ich hab den Code
  • 58:41 - 58:45
    und darf ihn ändern." Aber das Problem
    ist, dass das derjenige, der das Projekt
  • 58:45 - 58:49
    verwaltet, üblicherweise nicht gut
    beurteilen kann, sondern der wird immer
  • 58:49 - 58:53
    sagen: "Ja, ist alles total offen hier".
    Das geht, glaube ich, nicht über so einen
  • 58:53 - 58:56
    Score. Aber man kann es natürlich
    versuchen.
  • 58:57 - 59:02
    Herold: Dann bitte Mikrofon 8.
    Anonym: Ist fehlendes IPv6 für dich ein
  • 59:02 - 59:05
    Bug oder ein nicht implementiertes
    Feature?
  • 59:05 - 59:10
    Fefe: Das ist eine der subjektiven Fragen.
    Für mich persönlich ist es ein Fehler,
  • 59:10 - 59:14
    wenn kein IPv6 drin ist. Aber es gibt
    genug Firmen da draußen, die sagen: "Das
  • 59:14 - 59:17
    haben wir eh nicht."
    Anonym: Danke.
  • 59:17 - 59:22
    Herold: Dann bitte Mikrofon 7.
    Anonym: Die Intention, dass die Community
  • 59:22 - 59:27
    das schon richten wird. Du hattest CVSS
    als relativ positives Beispiel
  • 59:27 - 59:32
    dargestellt. Vor fünf Jahren war
    Heartbleed in OpenSSL, das hat einen CVSS-
  • 59:32 - 59:37
    Bug von 5,0 gehabt, und Bruce Schneier
    kommentierte: "Auf einer Skala von 1 bis 10
  • 59:37 - 59:42
    ist das Wert 11." CVSS ging gerade bis 10.
    Ich sehe nicht, dass das so klappen kann,
  • 59:42 - 59:48
    und ich finde es gut, dass du aufgezeigt
    hast, wie komplex das ist, denn wir haben
  • 59:48 - 59:54
    halt keinen Standard. Was bedeutet denn
    zum Beispiel eben "minimal"? Oder wenn eine
  • 59:54 - 59:59
    Zwei-Faktor-Authentifizierungs-Umgehung
    ein Sicherheitsbug ist, ist dann jede
  • 59:59 - 60:02
    Anwendung mit einer Ein-Faktor-
    Authentifizierung automatisch ein
  • 60:02 - 60:05
    Sicherheitsbug?
    Fefe: Ja, du hast völlig recht, das sind
  • 60:05 - 60:11
    offene Forschungsfragen, wie man
    das lösen soll. Ich habe da auch keine
  • 60:11 - 60:16
    guten Antworten. Die die Heartbleed Sache
    hätte man vielleicht klären können, indem
  • 60:16 - 60:19
    man sagt: "Welche Zusagen machen wir
    denn?" Wenn die Zusagen gebrochen sind,
  • 60:19 - 60:23
    dann ist automatisch Totalschaden. Aber
    wir haben halt häufig - ich habe das ja auf
  • 60:23 - 60:26
    einer Folie gehabt - Projekte,
    die klingen so, als wenn sie ein
  • 60:26 - 60:29
    Security Feature implementieren. Und wenn
    du sie dann fragst, welche Zusagen sie
  • 60:29 - 60:34
    machen, kommt dann halt: "Ja ne, gar
    keine. Wer mich einsetzt, ist selber
  • 60:34 - 60:37
    schuld." Und da müssen irgendwie von
    wegkommen. Ich glaube, das geht nur, wenn
  • 60:37 - 60:42
    man bei den Leuten so ein bisschen das
    Empfinden schärft dafür, dass sie gerade
  • 60:42 - 60:46
    die Legacy von morgen schreiben. Die Leute
    tun immer so, als wenn Legacy vom Himmel
  • 60:46 - 60:49
    fällt. Das haben wir geerbt. Ne, du
    schreibst gerade halt nicht von heute die
  • 60:49 - 60:54
    Legacy, sondern die von morgen.
    Herold: Dann gab es noch eine Frage aus
  • 60:54 - 60:58
    dem Internet, bitte!
    Anonym: Ja, bei deinem Bewertungsschema:
  • 60:58 - 61:02
    Wie soll das bei Projekten funktionieren,
    bei denen es gar keinen Owner mehr gibt,
  • 61:02 - 61:08
    der das dranschreiben könnte?
    Fefe: Naja, irgendwann, wenn sich das gut
  • 61:08 - 61:11
    genug durchsetzt, ist die Abwesenheit
    eines Labels an sich schon ein schlechtes
  • 61:11 - 61:16
    Zeichen. Aber das wird natürlich ewig
    dauern, bis wir so weit sind. Also ist nur
  • 61:16 - 61:20
    ein Ansatz. Das kann ich auch nicht lösen.
    Wenn es niemanden gibt, der das Label dran
  • 61:20 - 61:24
    klebt, kann man vielleicht irgendwie eine
    Community-Entscheidung auf GitHub machen.
  • 61:24 - 61:27
    Eine Verurteilung durch den Mob?
    Lachen
  • 61:29 - 61:34
    Herold: Dann bitte am Mikrofon 4.
    Anonym: Das sind jetzt doch relativ grobe
  • 61:34 - 61:36
    Kategorien. Und gerade bei Enterprise
    Software als Entwickler wirst du es jetzt
  • 61:36 - 61:40
    schwer schaffen, irgendwie bei "Lizenz" eine
    Kategorie hochzukommen. Ist denn deine
  • 61:40 - 61:43
    Hoffnung, dass tatsächlich Entwickler dazu
    angeregt werden, existierende Software zu
  • 61:43 - 61:46
    verbessern oder mehr in die Richtung, wenn
    ich jetzt eine neue Software mach, dass
  • 61:46 - 61:49
    ich mir mal Gedanken mach: "Was will ich
    überhaupt erreichen und was für Garantien
  • 61:49 - 61:52
    gebe ich?"
    Fefe: Das richtet sich vor allem an
  • 61:52 - 61:57
    Hobbyisten im Moment, weil im Enterprise
    Umfeld sind die sind die Einschränkungen
  • 61:57 - 62:01
    der Umgebung andere. Da wirst du halt
    bezahlt von der Firma. Und der Typ, der
  • 62:01 - 62:05
    dich bezahlt, entscheidet, wofür du deine
    Zeit ausgibt. Und da hast du gar nicht die
  • 62:05 - 62:08
    Option, jetzt rumzulaufen und den alten
    Code besser zu machen, weil es einen
  • 62:08 - 62:12
    riesigen Backlog an Sachen gibt, die du
    noch machen musst. Besonders so in Agile
  • 62:12 - 62:17
    Umfeldern wird ja sozusagen jede freie
    Minute noch rausoptimiert. Und da stellt
  • 62:17 - 62:20
    sich die Frage gar nicht, ob ich jetzt
    rumlaufe und alten Code besser mache.
  • 62:20 - 62:23
    Daher glaube ich, wir müssen über Open
    Source kommen, und da hätte ich früher
  • 62:23 - 62:28
    nicht viel Hoffnung gehabt. Aber Open
    Source hat gewaltigen Einfluss ausgeübt
  • 62:28 - 62:33
    auf Enterprise Umgebung. Das merkt man
    vielleicht aus der Open Source Seite noch
  • 62:33 - 62:38
    nicht so. Aber wenn du in Enterprise
    Umgebungen unterwegs bist. Fast alle
  • 62:38 - 62:42
    größeren Projekte sind alle irgendwie
    internetbasiert inzwischen. Selbst
  • 62:42 - 62:47
    Appliances haben alle Internet,
    und das ist dann zu bestimmt
  • 62:47 - 62:52
    60-80% Open Source, je nachdem, in
    welcher Branche man da unterwegs ist. Open
  • 62:52 - 62:56
    Source hat einen großen Einblick, und als Open
    Source anfing zu sagen: "Okay, wir
  • 62:56 - 63:00
    müssen agile werden", hat Enterprise
    nachgezogen. Daher, glaube ich, werden wir
  • 63:00 - 63:03
    es schaffen, als Open Source hier
    Standards zu setzen, dass es auch in
  • 63:03 - 63:06
    Enterprise rüberschwappt, das ist die
    Hoffnung...
  • 63:07 - 63:12
    36C3 Musik
  • 63:12 - 63:40
    Untertitel erstellt von c3subtitles.de
    im Jahr 2020. Mach mit und hilf uns!
Title:
36C3 - Das nützlich-unbedenklich Spektrum
Description:

more » « less
Video Language:
German
Duration:
01:03:40

German subtitles

Revisions