FreeBSD auf einem Lenovo T480

Ich, der derzeit fast ausschließlich seit sechs Jahren MacBooks nutzt und relativ glücklich mit seinem M5-Gerät ist, wollte schon immer mal FreeBSD auf einem Notebook ausprobieren. Ein gut kompatibles Gerät hatte ich bisher nie finden können, doch tauchte dann irgendwann ein Artikel auf, der meinte, dass das Lenovo T480 gut mit FreeBSD funktioniert. Also habe ich mir eins bei eBay für 170 Euro geklickt. 14″, i5, 256GB SSD, 16GB RAM. Nichts tolles, aber zum herumspielen reicht es, dachte ich.

Ich habe eine kurze Weile OpenBSD auf einem Eee-PC vor vielen Jahren genutzt und das Ding sogar mal für eine Weile mit ins Krankenhaus genommen. Es funktionierte echt gut, sogar Suspend und Resume. Leider ging es dann kaputt.

Bild vom Lenovo T480 mit FreeBSD und KDE

Das Gerät kam an, Windows 11 war installiert. Ich habe es direkt platt gemacht und FreeBSD 15 amd64 von einem USB-Stick installiert. Letztlich eine Standardinstallation. Was funktioniert alles?

  • Grafikkarte funktioniert, Monitor wird mit voller Auflösung (naja, ist nur Full-HD) unterstützt
  • Tastatur geht
  • Trackpad geht, auch mit Scrolling
  • Trackpoint geht auch
  • Der SD-Card-Reader funktioniert
  • WLAN- und Ethernet funktionieren
  • Beide Akkus (interner und externer) werden erkannt
  • Tonausgabe geht
  • USB-Anschlüsse funktionieren
  • Suspend und Resume funktionieren
  • Bluetooth

Was ich noch nicht ausprobiert habe, sind:

  • Smart-Card-Reader
  • HDMI-Anschluss

Installiert habe ich Xorg, KDE und ein wenig Software. Das Gerät funktioniert recht gut und für jemanden, der unbedingt FreeBSD auf einem Notebook haben möchte, ist es nicht schlecht, wenn man denn mit den ganzen Nachteilen leben kann (langsamer Prozessor, schlechte Grafikkarte, schlechter Bildschirm, mittelmäßiges Trackpad, billiges Plastikgehäuse).

KooKooK: App für neurodivergente Menschen als Testballon

Vor einiger Zeit wollte ich mich mit QML näher auseinandersetzen und suchte nach einer Projektidee. Als Domain hatte ich noch „kookook.org“ bei mir registriert und dachte, dass ich einfach damit was mache. Bei der Projektidee ging es, allen voran, darum, dass ich mich mit dieser Technik auseinandersetzen und mich vor allem auf mobile Plattformen (iOS, Android) konzentrieren wollte.

Ich habe mich entschieden, an einer App für neurodivergente Menschen zu arbeiten, um ein Ziel vor Augen zu haben. Herausgekommen ist jetzt eine kleine App, mit der man seine Stimmungen und Reize tracken kann. Das Programm kann noch nicht viel, aber vielleicht interessiert es jemanden.

Hier sind ein paar Screenshots:

Es gibt auch eine Android-Version, die ist im Google Play Store allerdings noch nicht freigegeben, da ich dafür erst 12 Tester benötige und mir dazu gerade die Zeit fehlt. Wer Lust hat: Gerne per E-Mail an mich, ich schalte die Version dann frei.

Die App ist kostenlos und benötigt keine Internetverbindung.

Gebrauchte Macs an Apple-Account gebunden

Vielleicht hilft das dem ein oder anderen. Ich habe 2023 gebraucht ein MacBook Pro 16″ (BJ 2019) als Zweitgerät auf Kleinanzeigen gekauft. Zwei Jahre lang hatte ich das in Benutzung, jetzt übergab ich es, aufgrund eines neuen Hardwarekaufs, an meinen Sohn. Also Programme, die er nicht braucht, gelöscht, Account angelegt und meinen Account gelöscht. So weit, so gut. Er hatte das Gerät jetzt gut eine Woche in Benutzung und forderte mich gestern, am 13.11.2025 auf, ihm nochmal das WLAN-Passwort zu geben, denn sein Mac sei irgendwie abgestürzt.

Ich sah mir das Gerät direkt einmal an und er hatte recht: Es versuchte, in den Internet-Recovery-Modus zu booten. Mir fiel dann ein, dass beim Erstellen vom Account meines Sohns irgendeine Apple-ID angezeigt wurde, die vom Vorbesitzer war. Anscheinend ist dieser informiert worden, dass da an seinem alten Mac gearbeitet wird. Er hat dann – so wie es aussieht – den Mac aus der Ferne vollständig gelöscht.

Zusätzlich bin ich nicht mehr in der Lage, den Mac überhaupt noch zu nutzen, da dieser via Apple-ID des Vorbesitzers entsperrt werden muss. Ich habe ihm einen Brief geschrieben (ich habe nur noch die Adresse und hoffe, er wohnt da noch) und darum gebeten, den Mac aus seinem Account zu entfernen. Wenn er das nicht macht, habe ich nur rechtliche Möglichkeiten, das zu verlangen, die aber wiederrum mit Aufwand und ggf. Kosten einhergehen. Ansonsten ist das Gerät nicht mehr als ein teurer Briefbeschwerer.

Mein Sohn ist natürlich enttäuscht und traurig. Ich hoffe, dass der Vorbesitzer noch einlenkt und alles wieder gut wird.

Also: Denkt beim Verkauf von Apple-Geräten daran, sie aus euren Accounts freizugeben und wenn ihr solche Geräte kauft, checkt das vorher. Ich denke nicht, dass hier böse Absicht hinter gesteckt hat, weiß es aber nicht. Natürlich sind alle Daten, Programme, usw. unwiderruflich gelöscht. Wohl dem, der ein Backup hat.

compow als Privatprojekt in Form einer Referenz wieder online

Eines meiner Projekte, dass ich vor wenigen Jahren gemacht hatte, lag noch auf meiner Festplatte und war bereits lange nicht mehr aktiv. Ich dachte mir allerdings, dass ich das noch einmal gerne als Referenz von mir online stellen wollte: compow.

Bei compow handelt es sich um eine Website, auf der sich Firmen vorstellen können und Stellenanzeigen schalten können. Ursprünglich war das mal kostenpflichtig, was ich aber herausgenommen habe, da ich nicht selbständig bin und damit kein Geld verdiene, es ist lediglich eine meiner Referenzen.

Das Interessante an der Website ist der Tech-Stack, denn anstelle einer der üblichen Webprogrammiersprachen wie Ruby, PHP, Python, Go, ASP.NET (keine Sprache, aber ihr wisst, was ich meine), basiert diese Website auf folgenden Technologien:

Wie gesagt, die Seite dient einfach nur als Referenz, womit ich mich in den letzten Jahren beschäftigte. Die Website ist nicht weiterentwickelt und wird es mitunter auch nicht.

KITA-Apps: Kita-Info-App, clivver und Co. – Wir müssen reden

Disclaimer: Ich schreibe hier privat meine Meinung. Ich behaupte nicht, dass irgendeine App unsicher ist, Datenhandel betreibt, unseriös ist usw. Dies ist meine private Meinung.

Es muss vor ungefähr zwei Jahren gewesen sein (vielleicht länger, vielleicht kürzer), als unser damaliger Kindergarten die Kita-Info-App einführte. Ich sah mir die Software an und war direkt davon überzeugt: Nein, das sieht nicht gut aus (Sicherheit, Datenerhebung, Qualität, usw.): wir machen da nicht mit. Meine Frau war gleicher Meinung. Wir hatten dann ein Gespräch mit der Kita-Leitung und erläuterten unsere Bedenken. Wir wurden an die nächste höhere Stelle verwiesen, die unsere Bedenken für grundlos hielt. Naja: https://www.heise.de/news/Datenleck-bei-beliebter-KiTa-App-Stay-Informed-9662578.html

Wir waren umgezogen, neuer Kindergarten, keine App, also alles super. Dann wurde vor ein paar Wochen mit clivver eine neue Kita-App eingeführt und wieder schaute ich mir die an. Ich wurde hellhörig, als ich sah, welche Informationen die App für die Nutzung vom Hersteller haben möchte (Stand 26.03.2024):

  • Vorname
  • Nachname
  • Mobilfunknummer
  • Device-ID: Android ID / Identifier for Vendor
  • Zeitpunkt der Registrierung
  • Vorname des Kindes
  • Meldungen zu einem Kind / sich selbst
  • Zeitpunkt des Öffnens einer Nachricht

Da wurde mir bereits schlecht und es stimmt nicht, denn die App benötigt noch eine weitere Information, die anscheinend bereits erhoben und auf den Servern gespeichert wurde: Das Geburtsdatum des Kindes.

Bis auf „Zeitpunkt der Registrierung“ (aus statistischen Gründen oder zur späteren Löschung bei Inaktivität) kann ich alle weiteren erhobenen Daten der Eltern und des Kindes nicht nachvollziehen. Über die App werden verschiedene Informationen ausgetauscht:

  • Nachrichten an alle/Gruppen
  • an Personal
  • Umfragen
  • Kalendereinträge
  • Krankmeldungen
  • Zuhause-Info (mein Kind bleibt heute zu Hause)
  • Mittagsessen-Info (mein Kind isst mit und was es isst)
  • Kommentare

Weiterhin hörte ich, ob es stimmt, weiß ich nicht, dass bsplw. Bilder, die Kinder gemalt haben oder Bilder von Gebasteltem darin verschickt werden.

Als Techniker im Allgemeinen und letztlich auch sowas wie „Digital Native“ im Engeren finde ich eine solche App erstmal super. Aber nur, wenn sie vernünftig gemacht ist.

Was ich damit meine: Warum werden diese Daten erhoben und warum ist nicht alles anonymisiert? Welchen Zweck hat für den Austausch mein Name, das Geburtsdatum meines Kindes, meine Device-ID, usw.?

Ich wollte es mir nicht nehmen lassen und schrieb an den Entwickler der App, seines Zeichens ehemaliger Journalist, ein paar Fragen:

Sehr geehrte Damen und Herren,

unsere Kita setzt ab jetzt clivver ein. Bevor ich den seitenlangen „Datenschutzbestimmungen“ zustimme, habe ich doch ein paar Fragen:

  1. Wo werden die personenbezogenen Daten gespeichert?
  2. Wie sind die personenbezogenen Daten verschlüsselt?
  3. Wer hat Zugriff auf die personenbezogenen Daten?
  4. Wozu wird die Telefonnummer gebraucht?
  5. Wozu wird das Geburtsdatum des Kindes benötigt?
  6. Ist die Kommunikation Ende-zu-Ende verschlüsselt?
  7. Wie werden Backups angelegt, sind diese verschlüsselt und
    wer hat Zugriff?
  8. Werden nach dem Löschen des Accounts auch alle Daten aus
    dem Backupbestand restlos entfernt?
  9. Welche Daten werden in der Cloud (Firebase) gespeichert,
    wo liegen diese Daten und wer hat Zugriff darauf und werden
    die Daten seitens Google weiterverwendet?
  10. Die erstellende und betreibende Firma sieht nach einer
    Privatperson aus, die im journalistischen Umfeld tätig
    ist (Sascha Müller-Jänsch). Gibt es im Unternehmen eine
    technische Abteilung, die die Expertise hat, eine solche
    Software sicherheitstechnisch zu betreiben?
  11. Warum werden die Daten nicht vollständig anonymisiert? Weder
    die Eltern noch die Kinder erhalten eine Rechnung, damit werden
    die Daten letztendlich nicht benötigt. Mich interessiert, warum
    diese dann erhoben werden, da ja die Kita die Rechnungen be-
    gleicht.
  12. Wir haben Zettel erhalten, auf denen unsere Namen sowie der Name
    unseres Kindes vermerkt sind und es findet ein Matching in der App
    für das Geburtsdatum des Kindes statt. Wo sind meine persönlichen
    Daten und die meines Kindes jetzt bereits (vor Registrierung) ge-
    speichert und wer hat mein Einverständnis zu dieser Speicherung
    gegeben?

Vielen Dank für die Beantwortung der Fragen und mit freundlichen Grüßen

Thorsten Geppert

E-Mail vom 28.02.2024

Ich bekam auch eine, für mich sehr schwammige, Antwort. Ich fragte nach, ob ich aus dieser Antwort zitieren dürfte. Das wurde abgelehnt. Wie die Antwort aussah, möchte ich aus einem Gedankenprotokoll anhand eines Beispiels klar machen:

Die Frage: „Wie sind die personenbezogenen Daten verschlüsselt?“ – Die Antwort: „Ja, sie sind verschlüsselt.“

Da ich nicht aus der Antwort zitieren darf, möchte ich da auch nicht weiter drauf eingehen und respektiere den Wunsch (und kann ihn an der Stelle auch absolut nachvollziehen…).

Verstehen konnte ich auch nicht die Antwort der nächst höheren Stelle der Kita, die von einem Mitglied des Eltenrbeirats angeschrieben wurde. Ich habe gefragt, ob ich diese E-Mail zitieren darf. Die Antwort kam spät, war aber ein Nein. Ich möchte das aber dennoch ohne O-Ton zusammenfassen, zumindest zwei Punkte:

  • Wenn der Hersteller zusichert, dass die Software DSGVO-konform betrieben wird, dann ist das so
  • Wir müssen mit Sicherheitslücken und auch damit, dass wir Opfer werden können, leben, wichtig sei nur, dass diese Mängel schnell beseitigt werden

Also interpretiere ich das so: Wenn Ihre Daten und die sensiblen Daten Ihres Kindes geleakt werden, dann ist das ok, da sie ja DSGVO-konform geleakt sind und der Mangel sicher bald schnell beseitigt wird…

Allerdings wurde noch mitgeteilt, dass wenn wir Datenschutzverletzungen feststellen, wir diese melden können und sie denen nachgehen würden.

In der E-Mail-Antwort der höheren Stelle wurde mir aber mitgeteilt, ich würde seine/ihre Worte nicht richtig interpretieren. Eine Relativierung der Problematiken wäre es damit nicht, sondern im Gegenteil. Dann kam direkt der Satz, dass ich aber die E-Mail nicht zitieren darf, um weitere Missverständnisse zu vermeiden.

Bevor ich noch auf ein wenig Technik komme, mal einen Gedankenanreiz für die, die meinen, dass es sich hier nicht um sensible Daten „Schutzbefohlener“ handelt. Bei einem Datenleak könnten die Daten von Ihnen und Ihrem Kind veröffentlicht werden:

  • Der jenige kennt den Namen von Ihnen und Ihrem Kind
  • Er kennt auch Ihre eindeutige Telefonnummer
  • Er weiß, wann Ihr Kind krank war und wie häufig, kann mitunter Rückschlüsse auf chronische Probleme ziehen
  • Er weiß, wann Ihr Kind in den Kindergarten geht
  • Er weiß vielleicht, wenn das mit den oben erwähnte Bildern stimmt, mitunter welchen kognitiven Zustand ihr hat, vor allem in Kombination mit dem Geburtsdatum (Es malt weiter unter der Alterserwartung… usw.)
  • Er kann Rückschlüsse auf Nahrungsunverträglichkeiten ziehen

Es lässt sich ein detailiertes Profil Ihres Kindes und teils Ihrer Familiensituation feststellen (Kind wird mittags geholt, sprich, Sie oder Ihr Partner arbeiten nur halbtags…).

Das wäre meiner Meinung nicht nötig, wenn man diese Daten nicht erhebt, bsplw. wenn das Kind nur eine Nummer ist und keine persönlichen Daten dazu getauscht werden und die Zuordnung zum Kind ausschließlich in der KITA erfolgt. Dann wäre ein Datenleak nicht ganz so schlimm. Das ist hier aber nicht der Fall.

Kommen wir zu etwas technischem, aber ich gehe da nicht in die Tiefe, da mir hier die Zeit zu fehlt. Wenn man sich die Website des Entwicklers ansieht, dann sieht man, dass dieser das Portal „Kita im Blick“ betreibt. Wenn man dort eine Bestellung aufgeben will, kann man sowas machen:

Das wird auch so in den Warenkorb übernommen:

Schaut man sich dann noch diese (von mir manipulierte) URL an: https://www.kitaimblick.com/kib/beta/public/auth/loginxxx stellt man zwei Dinge fest:

  • In der URL erscheint das Wort „beta“, was auch immer das (rechtlich) bedeuten mag
  • Es erscheint eine Fehlermeldung, in der sogar absolute Dateipfade sichtbar sind

Wenn wir uns dann noch ein nmap auf diesem Server ansehen, bekommen wir:

Dass bsplw. PostgreSQL und MySQL nach außen offen sind, muss nichts bedeuten, gibt aber ein ungutes Gefühl. Wir wissen nicht, ob dort Ihre Daten liegen und wie weit die gesichert sind.

Das war nur an der Oberfläche gekratzt und meine Frau und ich haben entschieden: wir machen bei clivver nicht mit, unsere Entscheidung. Mir fehlt leider die Zeit, da tiefer zu gehen.

Was ich aber gerne raten möchte ist: Hinterfragen Sie immer, warum gewisse Daten erhoben werden. Überlegen Sie, ob sie notwendig sind und wenn Sie auch nur ein minimales ungutes Gefühl haben, lassen Sie es lieber.

Noch einmal: ich rate auf keinen Fall von solchen Apps ab, ich sage nicht, dass sie unsicher sind, Datenlücken haben oder Datenhandel damit betrieben wird.

Ein interessanter Fehler beim Testen von Software

In der Firma, in der ich arbeite, ist mir ein Malheur passiert, und zwar beim Testen der von mir geschriebenen Software. Ich will (vielleicht darf) ich keine Details verraten, aber es geht um ein Programm, welches ein anderes Programm startet, überwacht und beendet. Nichts Großes, nichts Kompliziertes. Eine Sache muss man aber wissen: das Programm, an dem ich arbeite und das Programm, dass von meinem gestartet wird, soll auf macOS arm64 und macOS amd64 laufen und ist keine Fat-Binary, was bedeutet, dass es für die jeweilige Plattform immer ein Bundle gibt.

Jetzt ging es zum Glück nur um eine Testversion, die ich meinen Kollegen zum Ausprobieren geben wollte. Ich packte mein Programm also, zusammen mit dem Fremdprogramm. Einmal für macOS amd64, einmal für macOS arm64 (und noch weitere Plattformen). Faul, wie ich bin, hatte ich dafür ein Script geschrieben. Leider habe ich nicht weit genug automatisiert, denn hier passierte das Problem: Ich packte mein Programm für amd64 und das Fremdprogramm für arm64. Bevor ich meine Software zum Testen herausgebe, probiere ich diese immer einmal aus, zumindest im kleinen Rahmen. Eine CI-CD-Pipeline gab es in dem frühen Entwicklungsstadium leider noch nicht (Das ist ein Fehler! Kümmert euch direkt darum!). Jetzt hätte das Problem beim Testen auffallen müssen, aber hier beging ich den entscheidenden großen Fehler in der gesamten, sehr suboptimalen Kette: Ich probierte die arm64 und die amd64 meine Software und der Fremdsoftware nur auf meiner arm64-macOS-VM aus.

Wer aufgepasst hat, kann sich sicher denken, was jetzt passiert ist: Da Rosetta 2 lief, startete sie natürlich mein amd64-Programm und mein amd64-Programm startete das arm64-Fremdprogramm, ohne, dass ich was von einem Fehler mitbekam.

Ich lieferte natürlich die amd64-Version aus und es kam, wie es kommen musste: bei den Kollegen mit amd64 macOS funktionierte zwar mein Programm, das Fremdprogramm aber natürlich nicht, da es kein Rosetta-Äquivalent auf macOS amd64 gibt.

Dabei hatte ich den Fehler die ganze Zeit auf dem Schirm, denn mein Paketierungsscript lieferte Hinweise, wenn die Architektur der Fremdsoftware mit der Architektur meines Programms nicht zusammenpasst. Aber ein Hinweis lässt sich im Stress leicht übersehen. Hier hätte ich doch besser einen Abbruch eingebaut.

Was lernen wir daraus? Am Besten vollständig automatisierte Tests implementieren, aber wenn man für verschiedene Architekturen händisch testet, das dann auch direkt auf der jeweiligen Architektur durchführen und nicht in einer Emulation.

Java: JAR-Klassen-Versionsproblematik

Ja, nach langer langer Pause musste ich mich wieder einmal mit Java auseinander setzen. Dabei stieß ich auf ein Problem: Ich wollte JDBC-Treiber in einer bereits vorhandenen Version eines Programms einbinden. Soweit kein Problem, doch nicht alle Treiber funktionierten. Ich bekam keine (sinnvolle) Fehlermeldung, sondern Dinge funktionierten einfach nicht.

Ich fand dann heraus, dass mein JDK mitunter zu alt war, um mit den Klassendateien im JAR zu laufen. hier hätte ich mir eine vernünftige Fehlermeldung gewünscht, es kam aber keine.

Da ich für das Deploying (und nur für das Deploying) diese Problematik testen und Fehler werfen wollte, überlegte ich, wie ich vorzugehen habe. Zuerst dachte ich naiv, dass JAR-Dateien versioniert sein könnten. Natürlich völliger Quatsch, sind das ja einfach nur Archive, in denen alles Mögliche drin sein kann. So ist es auch: die darin enthaltenen Klassen-Dateien (.class) können für unterschiedliche JRE-Versionen kompiliert worden sein.

Allerdings kann man recht einfach herausfinden, für welche Version die Klassendateien kompiliert wurden: Im fünften und sechsten Byte der class-Datei steht die Minor-Version (also Byte-Offset 4 und 5), im siebten und achten Byte steht die Major-Version: s. Wikipedia.

Ich schrieb also ein Programm in C, welches die libzip nutzt, um an die Dateien im JAR zu kommen, las dann Byte 7 und 8 aus (Offset 6 und 7) (auf Endianess achten!) und fand somit die höchste und niedrigste Version des JDKs heraus. Eigentlich recht einfach.

Vielleicht hilft dem ein oder anderen das.

Hier noch die Versionsnummern bis 19 (kopiert von hier):

Java SE 19 = 63 (0x3F hex)
Java SE 18 = 62 (0x3E hex)
Java SE 17 = 61 (0x3D hex)
Java SE 16 = 60 (0x3C hex)
Java SE 15 = 59 (0x3B hex)
Java SE 14 = 58 (0x3A hex)
Java SE 13 = 57 (0x39 hex)
Java SE 12 = 56 (0x38 hex)
Java SE 11 = 55 (0x37 hex)
Java SE 10 = 54 (0x36 hex)
Java SE 9 = 53 (0x35 hex)
Java SE 8 = 52 (0x34 hex)
Java SE 7 = 51 (0x33 hex)
Java SE 6.0 = 50 (0x32 hex),
Java SE 5.0 = 49 (0x31 hex)
JDK 1.4 = 48 (0x30 hex)
JDK 1.3 = 47 (0x2F hex)
JDK 1.2 = 46 (0x2E hex)
JDK 1.1 = 45 (0x2D hex)