25.7.2020 – die Corona-WarnApp funktioniert nicht. Wer ist Schuld?

Die Corona-Warnapp funktioniert nicht. Erst auf Android-Handys, dann auch auf iPhones. Das Land der Bundestrainer wusste es natürlich schon vorher, dass da nichts bei rauskommen kann, rechnet die verschleuderten Millionen auf und schließt, dass das ja logisch ist, wenn die genau so arbeiten wie Frau Merkel – um mal willkürlich ein paar Sprüche zu zitieren, die mir in die Timeline rutschten.
Aber ist das so? Treue Leserinnen wissen, dass ich gerne dabei bin zu seufzen, wenn „Deutschland mal wieder was nicht hinbekommen“ hat. Aber andererseits ist das ja hier auch das Fachblog für differenzierte Betrachtung – also gucke ich mal hin.

Weil ich gründlich arbeite, fange ich vorne an. Vorsicht, das wird länger, aber danach denken Sie höchstwahrscheinlich „Ach soooo …“

Irgendwie gehört es zum Allgemeinwissen, dass Computer mit Nullen und Einsen arbeiten; was aber passieren muss, damit aus den Nullen und Einsen dann das lustige Katzenbild im Internet oder aus dem hektischen Mausschieben ein präziser Headshot beim Tactical-Shooter wird – keine Ahnung.
Ich versuche mal, es sehr grob zu skizzieren.

Informatiker mögen gern ob mancher brutaler Vereinfachungen oder Ungenauigkeit schweigen. Es geht nur ums Prinzip.

Wichtige erste Info: Stellen Sie sich das bitte wie ein Modell mit vielen, vielen Schichten vor. Ganz unten sind die Einsen und Nullen und jede Schicht darüber wurde erfunden, um die Benutzung komfortabler zu machen. Grob sind es diese Schichten:

Tief im Innersten arbeiten Computer damit, dass Strom fließt oder nicht fließt. An oder Aus ist gleich Null oder Eins – und der Prozessor, also der innerste Kern unserer Computer, der versteht nur An oder Aus, nur Nullen und Einsen. Mit der richtigen Folge von Nullen und Einsen (die man über eine Tastatur eingibt) kann man den zB auffordern, zwei Zahlen zu addieren oder zwei Werte zu vergleichen oder oder oder.

Nächste Schicht: Damit ist natürlich überhaupt nicht komfortabel zu arbeiten, deswegen gibt es für Prozessoren eine kleine Anzahl von Befehlen (wieder über Tastatur), die sog. Assemblersprache. Die ist, wenn man englisch beherrscht, schon von Menschen lesbar – aber es ist eben nur eine sehr kleine Anzahl von Befehlen. Diese Schicht übersetzt also die Eingabe eines Assembler-Befehls in die richtige Reihenfolge Nullen und Einsen.

Deswegen kommt in einer nächsten Schicht ein Betriebssystem ins Spiel. Das macht alles schon sehr komfortabel, denn es ist eine Sammlung von Befehlen (immer noch über die Tastatur), die einen endlich auch etwas mit dem Computer anfangen lassen. Es gibt zB Befehle, um Dateien zu speichern, zu kopieren oder zu verschieben oder vor allem: Um Programme zu laden – zu denen kommen wir sofort.
Was das Betriebssystem tut ist also: Einen Tastaturbefehl in eine Abfolge von Assemblerbefehlen zu übersetzen und sich auch darum zu kümmern, ob die korrekt ausgeführt werden. Und im Zweifelsfall eine mehr oder minder hilfreiche Fehlermeldung auszugeben. (zB „Could not move file“)
Ein sehr bekanntes Betriebssystem war DOS, das irgendwann vollkommen vor den Benutzern versteckt wurde. Denn niemand möchte mit der Tastatur Befehle tippen; dazu später mehr. Auch recht bekannt sind Unix oder Linux.

Bis zu dieser Schicht ist ein Computer für uns als Anwender quasi vollkommen nutzlos.

Die nächste Schicht: Programme (endlich).
Für ein Betriebssystem kann man jetzt Programme schreiben. (Wenn man ein Freak ist oder Gründe hat, dann kann man auch Programme in/für Assembler schreiben, aber wir sprechen mal von den üblichen Fällen)
Ein Programm ist jetzt wieder eine Reihe von Textbefehlen, die etwas für uns tun. Man könnte zum Beispiel ein Programm schreiben, das uns übersichtlich anzeigt, welche Dateien auf der Festplatte gespeichert sind. Und die wir dann kopieren, verschieben, umbenennen können. Oder so.
Ja, da habe ich gerade schon behauptet, dass das Betriebssystem das auch kann. Aber unser Programm kann das schöner. Übersichtlicher.
Und alles was das Programm tut ist: Es verlässt sich wieder auf das Betriebssystem unter ihm und übersetzt das, was der Benutzer tut in die entsprechenden Befehle für eben dieses Betriebssystem. Der Benutzer tut das übrigens immer noch mit der Tastatur und das ist der Grund, warum Computer zu dem Zeitpunkt immer noch etwas für Freaks waren.

Eine Zwischenschicht: Das grafische Betriebssystem.
Damit eben nicht nur Freaks sondern alle Computer bedienen konnten erfand wer das grafische Betriebssystem. Und wer die Maus.
Beides zusammen ergibt eine mehr oder minder hübsche Ansicht, die wir sehen, wenn wir den Computer starten – und die Möglichkeit endlich eine Maus benutzen zu können. Das grafische Betriebssystem übersetzt also die Mausbewegungen (und später Fingerbewegungen) und die Tastatureingaben in das, was das eigentliche Betriebssystem versteht; das übersetzt in eine längere Reihe Befehle in Assembler und Assembler übersetzt in eine längere Reihe Binärcode, also Nullen und Einsen.
Aus guten Gründen bekommen wir das nicht-grafische Betriebssystem heute nicht mehr zu Gesicht und können im Normalfall nur in der sog. DOS-Box oder dem Terminal darauf zugreifen.

Und noch eine: Programmiersprachen.
Ich selbst, der ich ja auch gelegentlich programmiere, habe mit dem jeweiligen Betriebssystem übrigens auch wieder nichts zu tun. Denn ich habe mich für eine Programmiersprache entschieden. Die ist wieder eine Reihe von Befehlen, die es mir einfacher machen. Angenommen ich möchte prüfen, ob die E-Mail-Adresse die jemand in ein Kontaktformular eingibt wirklich eine ist, dann könnte ich das vermutlich mit einer langen Reihe von Befehlen fürs Betriebssystem tun. Oder mit einem Befehl in meiner Programmiersprache, die dann zur langen Reihe Befehle fürs Betriebssystem übersetzt wird. Und dann zu Assembler und dann … – Sie wissen schon.

Soweit das grundsätzliche Kontrukt: Jede neue Schicht nimmt das, was die darunter liegende anbietet, macht den Zugriff leichter und fasst es so zusammen, dass sich neue Befehle ergeben. Das ist praktisch, weil es eben die Benutzung vereinfacht (ich musste nie Nullen und Einsen lesen) und vor allem, weil es Entwicklung vereinfacht.
Wenn mein Betriebsystem schon Mechanismen für alles möglich anbietet, dann kann ich die benutzen. Ich muss nichts mehr erfinden, was prüft, ob eine eingebene E-Mail-Adresse wirklich eine ist – denn das hat schon wer getan und ich nutze seinen Befehl.

Ihnen ist aber sicher auch sehr klargeworden, dass sich da jede Schicht auf die darunter liegende verlassen muss. Hat zB irgendwer ganz vorn in der Kette schon beim Prozessorbau Blödsinn gemacht, dann kann ich als Programmierer für Anwendungsprogramme noch so genau coden. Bekannt geworden ist 1994 ein Fehler im Prozessor der Firma Intel, der unter Umständen irgenwelche Nachkommastellen ungenau berechnete. Wer nur grob sein zwei- bis dreistelliges Taschengeld verwalten wollte, dem ist der Fehler nie aufgefallen. Wer teure Teleskope an exakt berechnete Stellen im Universum ausrichtete und ein halbes Jahr darauf gewartet hatte, zwei teure Stunden am Teleskop zu bekommen – der ärgert sich, wenn er statt der erwarteten Supernova einfach nix sieht und der Taum von Nobelpreis verpufft.

Exkurs: Benutzereinstellungen und veraltete Rechner
Unsere schicken fancy glossy Betriebssysteme geben uns eine Menge Einstellungen an die Hand. Dummerweise stehen da in den Einstellungen friedlich, nur fünf Klicks entfernt voneinander die Möglichkeit, den Warnton für E-Mails anzupassen oder das komplette Netzwerk zurück zu setzen. Das ist ein Designproblem aber im Moment ist es so.
Dazu kommt, dass wir im Normalfall Einstellungen nicht lesen, verstehen und dann ausgewählt verändern, sondern exakt dann, wenn wir ein Banner der neuen Computerbild sehen und darauf steht: „iPhone endlich sicher!
Und im Artikel dann empfohlen wird, die Super-Firewall Supi-Secure zu installieren und auf „ganz streng“ zu setzen. Stolz wird das dann noch schnell der ganzen WhatsApp-Gruppe weitergeleitet und dann getan.
Und warum das Internet (ach, egal) aber auch CandyCrush (schlimm!) plötzlich nicht mehr laufen – ja woher soll man das denn wissen?
Die wütenden Rückmeldungen der WhatsApp-Gruppe bekommt man ja zum Glück auch nicht mehr.

In meiner Arbeit ist das übrigens eigentlich Dauerthema: Ich kann nämlich weder wissen, welches Betriebssystem, welche Version davon mit welchen Updates und welchen Einstellungen – dann welchen Browser in welcher Version und mit welchen Updates und welchen Einstellungen hinter welchem Router (Version, Einstellungen) mein User sitzt.
Ich hatte früher mal Kundinnen, die mir stolz erzählten, dass sie alle! Flash-Inhalte generell geblockt haben. Schon im Router, jaha! Das stand in der Computerbild!
Und sich dann beschwerten, weil die Flash-Animation, die sie unbedingt auf ihrer Website haben wollten, nicht angezeigt wurde – und den Zusammenhang nicht selbst herstellen konnten.

Rein theoretisch müsste ich also jede Website mit jedem Compter testen. Literally jedem. Sie verstehen, dass ich das nicht tue?

Kommen wir endlich zur Corona-WarnApp. Die tut jetzt also auf Android-Geräten nicht ganz, was sie soll und dann ein paar Tage später wird bekannt: Auch auf iPhones.

Sie haben jetzt oben (Danke fürs Durchhalten) schon so viel gelernt, dass ich nur weniges dazu sagen muss:

Die Entwickler haben Apple über die Lücken bei der Kontaktüberprüfung informiert, der iPhone-Hersteller habe den Fehler mittlerweile eingeräumt. Nach bisherigen Erkenntnissen befindet sich im Betriebssystem iOS ein Bug.

(https://www.tagesschau.de/investigativ/corona-warn-app-113.html)

Laut Entwickler ist das keine Fehlfunktion in der App, sondern hängt mit den Einstellungen bei den Geräten zusammen. Dies könne von den Nutzern geändert werden.

(https://www.tagesschau.de/investigativ/corona-warn-app-113.html)

Aus meiner Perspektive ist das eine wirklich gut und sauber und auch sehr fix programmierte App – ich vertraue da dem CCC, der vermutlich wirklich, wirklich gern etwas zu mäkeln gefunden hätte.
Dass es jetzt Fehler gibt, weil man sich auf eine dokumentierte Funktion des Betriebssystem verlassen hat. Holy forkin’ shirt, ja. Richtig forkin shirt.

Aber mit meinem Hintergrundwissen habe ich zumindest eine klare Idee, ob es sich jetzt lohnt, Deutschland, SAP & Telekom und Frau Merkel wieder mal durchs Dorf zu jagen. Oder ob es reicht, der Whatsapp-Gruppe mitzteilen, dass man die App besser schnell aktualisieren wollte.

Sie vielleicht ja jetzt auch.

Nachtrag: Wie Tom in den Kommentaren ganz richtig anmerkte hätte die App aber dabei eins nicht tun dürfen: Nämlich den Eindruck erwecken, dass alles richtig ist.

Sie finden Tagebuchbloggen der alten Schule gut?
Hier können Sie mir ’ne Mark in die virtuelle Kaffeekasse werfen!
Oder, wenn Ihnen Geld so unpersönlich ist, hier meine Wishlist finden; Sie finden dort hübsche und Freude-machende Geschenke zwischen acht und sechstausend Euro.

11 Kommentare

  1. Bin da ganz bei Dir, bis auf eine Kleinigkeit – für mich ist da ein grundlegender Fehler im Design: unabhängig wo im stack der fehler passiert, es darf nicht sein, dass die app user in falscher sicherheit wiegt, nur weil sie keine widersrpüchlichen daten bekommt.
    also der unterschied zwischen ‚ich habe aktuelle daten, keine treffer, alles gut‘ und ‚ich habe keine daten, somit auch keine treffer, alles gut‘.

  2. Großes Danke! Viel gelernt.
    Der Text sollte verpflichtend sein für alle die „ist-doch-nur-ein-Klick-Sager“. Nicht nur im Bezug auf die Warn-App.

  3. Technisch gesehen bin ich ja Informatiker und ich erteile Dir Absolution! 😉 😉

    Mal im Ernst: Eine gute Zusammenfassung! Muss ich mir mal wegbunkern …

    (Dieser Blogeintrag wurde nur mit Nullen und Einsen geschrieben.) 😉

    1. 01001111 01101000 00101110 00100000 01001101 01100001 01101110 00100000 01100100 01100001 01101110 01101011 01110100 00100001

  4. 01001010 01100001 00101100 00100000 01110011 01101111 00100000 01110111 01100001 01110011 00100001 00100000 01001010 01100101 01110100 01111010 01110100 00100000 01101101 11111100 01110011 01110011 01100101 01101110 00100000 01110111 01101001 01110010 00100000 01100001 01101100 01101100 01100101 00100000 01100100 01100101 01101110 00100000 01000010 01101001 01101110 11100100 01110010 01100011 01101111 01100100 01100101 00100000 01101100 01100101 01110010 01101110 01100101 01101110 00100001

    1. @jawl
      Ist doch schön, wenn jemand sein Talent entdeckt … 😉

      Disclaimer:
      Ja, ich weiß, dass Du das schon längst hast — aber ich konnte die Pointe einfach nicht liegen lassen! 🙂

Hinterlasse einen Kommentar.

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Die Website benötigt Cookies. Ich nutze Matomo, um zu sehen, welche Artikel Sie interessieren. Matomo ist lokal installiert, es werden keine Daten mit externen Diensten ausgetauscht oder Cookies gesetzt. Auf Anforderung können Sie zB Videos ansehen, die dann weitere Cookies setzen.