Wie man einen Laptop für die Softwareentwicklung auswählt (oder auch nicht)

Angeregt von Ayo Isaiahs Artikel ‘How to choose the right laptop for programming’ schreibe ich hier einmal auf wie es ausgegangen ist, als ich mir zur Jahreswende die gleiche Frage stellte. Und am Ende bei etwas komplett anderem gelandet bin, als ich mir eigentlich vorgestellt hatte. Die Geschichte dazu findet vielleicht der ein oder andere unterhaltend. Oder sieht sie als warnendes Beispiel 😁

Was ich (glaubte) zu wollen

Ich suchte einen Laptop als privates Gerät für kleinere Softwareentwicklungsprojekte. Warum einen Laptop? Weil ich schon seit mehr als 15 Jahren auf solchen Geräten entwickle. Bei den ersten Suchen im Netz waren dabei meine Schlagworte meist so etwas wie ‘Dev Laptop’, ‘16GB’, ‘Linux’, ‘SSD’. Und irgendwie landete ich dabei immer wieder bei Dells XPS Reihe und ihren äußerst positiven Rezensionen wie hier von The Verge.

Vielleicht hat mich dann dieses wunderschöne Gerät allmählich auf die ’schiefe Bahn’ gebracht und nach und nach den ästhetischen Aspekt in den Vordergrund treten lassen: Hat man sich erst einmal in ein so flaches Gerät mit nahezu randlosem, sehr hoch auflösendem Display verliebt wirken Produkte, die eigentlich deutlich pragmatischer sind, plötzlich blass und uncool. Und es gibt sogar Versionen mit Linux drauf. Auch das ich in den Jahren zuvor viel Zeit auf einem MacBook verbracht habe hat sicher dazu geführt, dass ich auf keinen Fall irgendeine ‘Klapperkiste’ erwerben wollte.

Was ich dann tatsächlich erwarb

Leider gab es ein Problem mit der XPS Reihe: Schönheit hat ihren Preis und in der Ausstattungslage, die ich mir vorstellte, gab es nichts unterhalb von eineinhalb tausend Euro. Zu viel für ein Gerät, welches im Haushalt neben Smartphone, Pixel C Tablet samt Tastatur, verschiedenen Chromebooks, dem MacBook und einem alten Windows Laptop würde um seinen Platz kämpfen müssen.

Nachdem ich daher lange in Schnäppchen- und Kleinanzeigenseiten vergeblich darauf gewartet hatte ein günstiges (Gebraucht)Gerät zu finden war klar, dass es kein XPS werden würde. Da inzwischen aber schon so viel Zeit vergangen war wurde es Zeit für einen Spontankauf. Von einem Kollegen auf den in Münster beheimateten Gebrauchtgerätehändler Lapstore gebracht ging es dann ganz schnell: Durch die von der XPS Fixierung erzeugt Fokussierung auf gutes Aussehen und eine dünne Bauform schlug ich dann bei einem Lenovo Yoga 600 Ultrabook zu. Natürlich in der goldenen Variante:

Lenovo Yoga Ultrabook

Und wie gut erfüllt nun das Gerät meine ursprünglich formulierten Ansprüche? Hier halte ich mich grob an die Kategorien, die Isaiah gewählt hat:

Mobilität

Das ist einer der wenigen Punkte, bei denen ich mir treu geblieben bin: Ich wollte ein Gerät, welches eher mobil als extrem leistungsfähig ist. Das habe ich mit diesem Ultrabook erreicht: Der Bildschirm ist ausreichend groß, aber nicht zu groß, es ist sehr, sehr flach und man kann in jeder Tasche Platz dafür schaffen, in dem man die c’t herausnimmt. Die dann später – als die ersten Kratzer aufgetreten waren – beschaffte Filzhülle macht das Gerät ca. doppelt so dick, aber es ist immer noch sehr flach.

Display

Das Display ist kraß. Für mich ist es der erste Laptop mit einer Auflösung, die der schon lange von Smartphone und Tablet gewohnten nahekommt (QHD+). Braucht man das? Vielleicht nicht, und die hohe Pixeldichte macht auch manchmal Probleme, z. B. bei einigen Java Anwendungen, die ohne Anpassungen in winzigen Schriftgrößen daher kommen. Aber wenn es klappt, dann sieht es sehr, sehr gut aus.

Es ist auch mein erster Windows Laptop mit Touchscreen. Ich habe mich früher oft verächtlich über den Sinn eines Touchscreens in Geräten mit fest eingebauter Tastatur geäußert und zwar in dem Sinne, warum man ein Bedürfnis haben sollte den Bildschirm unnötigerweise mit seinen Fingerabdrücken zu besudeln?

Tatsächlich bemerkte ich in den letzten Jahren aber immer häufiger, dass ich unbewusst damit begann auf allen möglichen Bildschirmen herum zu wischen, einfach weil inzwischen die Mehrzahl der benutzten Geräte (Smartphone, Tablet, Chromebook) das bot. Ich könnte auch weiterhin ohne die Touchfunktion leben, aber gelegentlich ist sie – z. B. beim Lesen langer Texte bzw. beim Surfen – einfach praktisch.

Bei der Gelegenheit auch ein Wort zur Möglichkeit das Display komplett herum zu klappen und damit das Gerät in ein klobiges Tablet zu verwandeln: Das habe ich ein einziges Mal gemacht, für mich ist es ein wenig nützliches Gimmick. Allerdings nutze ich tatsächlich recht häufig die damit verbundene Möglichkeit das Display extrem flach anzustellen, z. B. wenn ich auf dem Laptop etwas lese.

Was mich tatsächlich an dem Bildschirm insgesamt nervt sind die sehr starken Spiegelungen. Gerade die Chromebooks, die ich meist zum Schreiben langer Texte verwende, sind alle matt, und bei dem MacBook ist es mir nie so störend aufgefallen. Vielleicht liegt es bei Yoga daran, dass nicht nur der Bildschirm spiegel, sondern auch der schwarze Rand drumherum. Das ist wirklich unnötig.

CPU & Lüfter

Erst als der Lüfter des Yoga zum ersten Mal ansprang und sich lange nicht mehr ausschalten wollte fiel mir ein, dass ich jahrelang Geräte genutzt habe, die entweder:

  • keinen Lüfter hatten,
  • so gut belüftet waren, dass er nie anspringen musste oder
  • deren Lüfter unhörbar leise war.

Keiner dieser Punkte trifft auf das Yoga zu und gerade die manchmal stundenlangen Windows 10 Updates verbringt das Gerät gerne mit einem unangenehmen Dauergepuste aus den schicken Luftauslässen:

Lenovo Yoga Ultrabook

Nervig. Bei der für mich normalen Entwicklungsarbeit (Java, Eclipse) hingegen verhält er sich zum Glück meist ruhig.

Die CPU ist eine i5. Reicht für mich und ein i7 hätte die Lüfter- und Batterieprobleme vermutlich noch weiter verschärft.

RAM

Ich bin dann doch bei nur 8 GB gelandet. Für mich reicht es, da ich im Moment doch nicht so viel mit VMs hantiere, wie zunächst gedacht. Die fehlende Erweiterungsoption könnte mich hier aber vielleicht einmal einholen.

Harddisk

Natürlich eine SSD, aber nicht besonders groß. Was OK für mich ist, meine ganzen Fotos lagern sowieso nicht lokal auf den PCs und ich lade mir bei der bescheidenen Internetverbindung hier auch nicht jeden Tag gewaltige Datenmengen herunter.

Das Gerät hat manchmal sekundenlange Aussetzer, in denen ‘nichts’ passiert, und irgendwie bringe ich das mit der SSD in Verbindung. Allerdings ohne es bisher beweisen zu können.

Tastatur & Trackpad

Die Tastatur ist tatsächlich für mich – neben dem nervigen Lüfter – das größte Problem: Lenovo hatte die blöde Idee an den rechten Rand, also neben Return und Backspace, noch eine Tastenspalte zu quetschen und zwar mit so wichtigen Tasten wie Pos1, Ende, Page up/down. Alle, wirklich alle Geräte, die ich sonst nutze, haben keine derartigen, überflüssigen Tasten an dieser Stelle. Wie sehr sich mein Gehirn angewöhnt hat bei der Suche nach Löschen, Zeilenumbruch und Shift einfach den rechten Geräterand mit den Fingern zu suchen und dann auf die ersten dort vorgefundenen Tasten zu klicken ist mir sehr schnell klar geworden.

Lenovo Yoga Ultrabook

Länger hat es gedauert bis klar war, dass sich mein Gehirn nicht so ohne weiteres umprogrammieren lässt, jedenfalls nicht, solange ich die anderen Geräte weiter nutze. Was ich tue. Und so verfluche ich das Yoga und die Designer seiner Tastatur bis heute, wenn ich meine ersten Zeilen eingebe und beim ersten Versuch ein falsches Zeichen zu löschen am Zeilenanfang lande.

Das Trackpad ist hingegen OK, wobei ich inzwischen einfach größere Pads gewohnt bin und die hier gewählte Aufteilung zwischen einer Seite für ‘linken Mausklick’ und einer für ‘rechten Mausklick’ unsinnig und irritierend finde.

Batterie

Laut Prospekt ‘mehr als 8 Stunden’. Aber das ist gelogen. Für mich ist das Yoga kein Gerät, mit dem man einfach morgens ohne Ladegerät aus dem Haus gehen und sicher sein kann nicht irgendwann in Probleme zu geraten. So wie es beim MacBook der Fall ist.

Gerade am Anfang war das Yoga schockierend schnell leer, z. B. wenn man ein Windows Update machte, weitere Software installierte und nebenher normal damit arbeitete. Gleichzeitig ist das Ladegerät ein echter Klotz, den man nicht mitschleppen möchte.

Betriebssystem

Kein Linux, sondern Windows 10. Auch hier haben sich die Folgen der Ästhetik gezeigt: Für die Laptops mit den extrem schlanken Bauformen und aktuellen Bauteilen ist die Treiberlage einfach schlecht und selbst wenn man es schaffen sollte darauf ein Linux zum Laufen zu bringen kann man nicht damit rechnen die gleiche Performance – z. B. bei der Batterielebensdauer – zu erreichen wie unter Windows.

Und im Grunde gefällt mir Windows 10 wirklich gut: Schicke Oberfläche, weit moderner für meinen Geschmack als das, was Apple heute hat, wenn auch natürlich nicht so aufgeräumt wie das Material Design, welches in ChromeOS nach und nach Einzug hält. Und die Sünden und Fehler aus Windows 8 wurden zum größten Teil rausgeworfen oder minimiert.

Und Linux kann man in ganz unterschiedlichem Umfang für Entwicklungszwecke ja trotzdem bekommen, wenigstens wenn einem die Kommandozeile im wesentlichen ausreicht: Abgesehen von der klassischen VM gibt es seit einiger Zeit von Microsoft das sogn. Linux Subsystem, welches einem die Bash bringt. Und für etwas weniger anspruchsvolle Zwecke reicht vielleicht auch schon die Cmder Shell aus.

Aber, aber….

…wieso ich das Gerät behalten habe, trotz der ganzen nervenden Punkte? Vielleicht hätte ich es wirklich zurückgeben sollen, insbesondere wegen der Tastatur. Allerdings dachte ich damals noch, dass ich mich daran bestimmt gewöhnen würde.

Und auf der anderen Seite ist das Gerät für meinen Geschmack wirklich, wirklich schön. Wer hat nicht gern Werkzeug, welches (auch) gut aussieht? Dadurch zieht das Yoga immer mal wieder interessierte KollegInnen an und sorgt für Diskussionen 😆 Das Gehäuse hat eine hohe Steifigkeit, die bei einem so dünnen Gerät verblüfft, und dem Metallgehäuse des MacBooks nicht nachsteht.

Aber würde ich es noch einmal kaufen? Vermutlich nicht. Denn beim nächsten Kauf hätte ich diese Prioritäten:

  1. Das Gerät sollte weiterhin eine gewisse Eleganz und Schlankheit haben (ja, ich kann da nicht aus meiner Haut)
  2. Die Tastatur muss zu mir passen bzw. meinen Gewohnheiten entsprechen, das Trackpad sollte möglichst groß sein
  3. Der Bildschirm muss nicht matt sein, aber er sollte auch nicht so extrem stark spiegeln. Touch ist OK, aber kein MUSS
  4. Wenn schon Lüfter, dann bitte leise oder selten genutzt
  5. Der Akku sollte einen durch den Tag bringen

Ansonsten natürlich eine gewisse Grundleistungsfähigkeit (SSD, RAM, etc.). Diese Liste führt eigentlich automatisch dazu, dass man das Gerät ein paar Tage nutzen muss, da sich gerade die Frage ob man in der Lage ist sich auf bestimmte Eigenarten einzustellen, oder ob sie ein dauerhafter Stein des Anstoßes sein werden, sonst kaum beurteilen lässt.

BoringSSL und die FIPS 140-2 Zertifizierung

Vor inzwischen mehr als 3 Jahren verkündete Adam Langley in seinem Blog den Beginn der Arbeiten an BoringSSL, einem Fork von OpenSSL, der speziell auf die Anforderungen von Google zugeschnitten ist. Anlass waren die verschiedenen Probleme in SSL/TLS Implementierungen, insbesondere der Heartbleed Bug in OpenSSL, der damals für viel Aufsehen sorgte. Mit BoringSSL schuf Google sich eine bereinigte SSL/TLS Implementierung, die schon knapp ein Jahr später in die großen Google Produkte Chrome & Android einging und zum Betrieb der Google Services im Netz verwendet wurde. Für Google ist das Projekt offenbar ein Erfolg, da sie damit endlich eine einheitliche Basis für diesen sicherheitsrelevanten Code schaffen konnten, die sie nach eigenem Gutdünken weiterentwickeln können.

Ist BoringSSL eine Alternative?

Wer OpenSSL einsetzt, oder LibreSSL, den anderen damals entstandenen Fork, kann sich die Frage stellen ob ein Library, welches von Google entwickelt wird, vielleicht die bessere Alternative ist? ‘Besser‘ ist dabei ein Adjektiv mit mehreren Aspekten, darunter Rückwärtskompatibilität (mit OpenSSL), Stabilität, Sicherheit, Codereife, Funktionsumfang und Lizenzierung. Google stellt auf der BoringSSL Seite dazu diese Hinweise direkt an den Anfang:

“BoringSSL is a fork of OpenSSL that is designed to meet Google’s needs.

Although BoringSSL is an open source project, it is not intended for general use, as OpenSSL is. We don’t recommend that third parties depend upon it. Doing so is likely to be frustrating because there are no guarantees of API or ABI stability.

Programs ship their own copies of BoringSSL when they use it and we update everything as needed when deciding to make API changes. This allows us to mostly avoid compromises in the name of compatibility. It works for us, but it may not work for you.”

Das kann man nicht gerade als aktives Werben um neue NutzerInnen verstehen. In jedem Fall muss man damit rechnen einen gewissen ’Preis’ für die Nutzung eines leistungsfähigen, von einem hochkompetenten Entwicklerteam weiterentwickelten Pakets zu bezahlen, und zwar in Form vorzuhaltender eigener Entwicklerkapazitäten, damit man im Fall von Änderungen an BoringSSL in den eigenen Produkten entsprechend nachsteuern kann. Auf der anderen Seite ist heute das Risiko eines kompletten Refactorings von BoringSSL wohl eher gering, dazu ist selbst Google nicht mehr so ohne weiteres in der Lage angesichts von Millionen – oder gar Milliarden – von Android Geräten, die sich nur schwer aktualisieren lassen.

Seit ein paar Tagen gibt es eine neue Seite im BoringSSL Repository, die das Thema der FIPS Validierung behandelt. Dabei geht es nicht um das komplette Projekt, sondern um einen Teilbereich, genannt BoringCrypto. Dies könnte für Unternehmen, die nur entsprechend zertifizierte Produkte einsetzen dürfen (Finanzbereich, etc.), noch einmal einen Stolperstein bei der Nutzung beseitigen. Aber was ist FIPS 140-2 eigentlich und verbessert es wirklich die Sicherheit von BoringSSL?

Was ist FIPS 140-2 und was macht es ‘sicher’

Der ‘Federal Information Processing Standard (FIPS) Publication 140-2’ ist ein Standard der US Regierung, der – ausgeführt vom NIST – Anforderungen an kryptographische Module sowohl in Hardware wie auch Software definiert. Er legt damit verbindlich fest welche Anforderungen an entsprechende Module gestellt werden (z. B. in Form einer Liste der notwendigen/zulässigen kryptographischen Algorithmen) und auch das Verfahren, über das Anbieter entsprechender Produkte diese Zertifizierung erhalten können. Dabei wird in 4 Level unterschieden, die jeweils immer höhere Anforderungen stellen, z. B. in Bezug auf die Verhinderung bzw. Feststellung von Manipulationsversuchen.

Dieser Standard ist neben den Common Criteria wohl der wichtigste IT Sicherheitsstand weltweit. Eine FIPS Zertifizierung erhöht damit die Sicherheit eines Produkts in jedem Fall. Oder?

Die Snowden Enthüllungen

Eine Anforderung im FIPS Zertifizierungsprozess ist die Garantie, dass eine zertifizierte Software sich selbst auf Konsistenz prüfen kann. Siehe dazu im letzten Abschnitt mehr. Dies kann nur auf eine Weise erreicht werden, die man aus heutiger Sicht nicht mehr unbedingt als letzten Stand der sicherheitsbewussten Programmierung sehen muss. In der BoringSSL Seite zu FIPS findet sich daher an einer Stelle der Satz

‘This might make building ROP chains easier for an attacker, but so it goes.’

Ein weiterer Kritikpunkt – der z. B. in der entsprechenden OpenSSL Seite vorgebracht wird – ist die Langsamkeit des Zertifizierungsprozesses. Nun braucht eine sorgfältige Zertifizierung ihre Zeit, aber auf der anderen Seite ist es heute wichtiger denn je bei gefundenen Fehlern schnell Bugfixes verbreiten zu können. Denn selbst nach einer Zertifizierung ist es unwahrscheinlich, dass jeder einzelne Fehler gefunden wurde. Wenn aber eine Fehlerkorrektur dann eine erneute Zertifizierung erforderlich macht vergehen schnell mal einige Monate. In dieser Zeit haben Angreifer dann ausgerechnet in den Industrien mit besonderen Sicherheitsanforderungen, die zur Nutzung FIPS-zertifizierter Lösungen gezwungen sind, ggf. leichtes Spiel.

Ein letzter, massiver Kritikpunkt entsteht allerdings aus dem mit den Snowden Enthüllungen massiv gewachsenen Misstrauen gegen die US-Geheimdienste und ihre Verquickungen mit den Standardisierungsbehörden. Insbesondere betraf dieses Misstrauen damals einen in den Standard gebrachten Algorithmus zur Generierung von Zufallszahlen, der immer schon von Kryptographen misstrauisch beäugt worden war, sich nun aber als sehr wahrscheinlich mit einer bewusst konstruierten Hintertür versehen erwies. Durch die langsamen Standardisierungsprozesse war es dann ein sehr zeitaufwändiger Prozess diesen Algorithmus aus Produkten zu entfernen, bis dahin schlummerte er als potentielles Einfallstor in den als ‘sicher’ zertifizierten Produkten.

Insgesamt ist die Sache also ein zweischneidiges Schwert, und für EntwicklerInnen eines Libraries wie BoringSSL immer mit der Frage verbunden was ihnen wichtiger ist: Ein Produkt zu entwickeln, welches nach den bekannten Maßstäben der IT Sicherheit ganz vorne ist, oder zusätzlichen, teilweise bürokratischen Aufwand auf sich nehmen um am Ende bei einem möglicherweise in Teilaspekten weniger sicheren Produkt zu landen, welches dafür dann aber in besonders sicherheitsbedürftigen Bereichen eingesetzt werden – und dort vielleicht andere, weniger gut gepflegte Lösungen verdrängen – kann. Oder den Aufwand noch weiter zu erhöhen und parallele Stränge des eigenen Produkts zu pflegen, die beiden Anforderungen gerecht werden.

Wie macht man Software FIPS kompatibel

Aber nun wieder zurück zu der Frage welche Anforderungen eigentlich entstehen, wenn man eine C/C++ Programmierung mit den FIPS Vorgaben in Einklang bringen will?

‘FIPS-140 mandates that a module calculate an HMAC of its own code in a constructor function and compare the result to a known-good value. Typical code produced by a C compiler includes large numbers of relocations’

Wie man diesen Spagat löst, darüber geht der größere Teil der BoringSSL Seite und er erklärt auch recht gut wie ein C/C++ Compiler im Detail vorgeht und welche Dinge man ihm abgewöhnen muss, damit dieses Ziel erreichbar wird. Möglicherweise haben die Google Leute hier nur damit begonnen die Erfahrungen nachzuhalten, die sie entweder selbst gemacht haben oder große Android Nutzer wie Samsung (PDF), die auf BoringSSL basierende Komponenten bereits in den FIPS Prozess eingebracht haben.