Ich und Windows CE

Ein kleiner Windows-Rechner, der samt Bildschirm in die Hosentasche passt. Boah! Wie geil wäre es damals vor 20 Jahren gewesen, wenn ich so ein Teil besessen hätte.

Doch leider waren es nur Artikel, die ich Ende der 90er über diese “Organizer” oder “Handheld-PCs” zu lesen bekam.

Ebenso glasig wurden meine Augen, als geschrieben stand, dass man mit Embedded Visual Basic sogar für solche Kleinlinge UIs programmieren konnte
… doch auch das kenne ich nur aus Schilderungen.


So dauerte es bis ins Jahr 2008, wo mich meine “erste” größere C++ Arbeit mit dem SDK für “Intelligente Geräte” in Berührung brachte.

Windows CE (Windows Compact Edition) ist ein Basisbetriebssystem, auf dem Produkte für “Smart-Devices” wie PDAs, Handhelds oder Smartphones basieren.

Und nachdem mein damaliger Chef so einen Windows-CE Organizer besaß, ließ er sich überzeugen eine experimentelle Portierung des C++ Projektes zu unterstützen.
Lange wehrte diese Portierung nicht, denn als er sich ein iPhone zugelegt hatte, war der CE-Organizer passé.

Doch ich hatte inzwischen gelernt, dass die Windows CE API eine kleine gemeinsame Untermenge mit der Win32 Windows API hatte und versuche seither im Kern nur jene Schnittmenge einzusetzen.

Und so kaufte ich mir zwischen 2011 und 2013 eines der letzten CE-5 basierten Windows Mobile 6 Phones und einen kleinen ARM Laptop auf dem CE-6 zum Einsatz kommt.

Windows CE wurde so zu einem nebenläufigen Hobby. Die Plattform selbst stirbt mehr und mehr aus und man wird heute wohl kaum mehr neue Software dafür erhalten, doch mir gefällt dieser minimalistische Ansatz und so lebt ein kleiner Funke davon in meinen Projekten stets weiter.

Und wie der Zufall es so wollte, gab es in den letzten Jahren tatsächlich ein Anwendungsgebiet für dieses Hobby.
Denn es gibt im Industrie- und Logistikbereich noch tatsächlich einige CE basierte Terminals und Barcodescanner (auch verniedlichend “Handgurken” genannt), die ihren Display mit Windows CE betreiben. Und um eben diese Geräte an neuere Technologien anzubinden, durfte ich mein Hobby-CE-Wissen entsprechend einsetzen.

Immer wenn Zeit bleibt, versuche ich das neue GATE Projekt auch für Windows CE zu “optimieren” bzw. eigentlich zu reduzieren. Denn meistens handelt es sich dabei um das Deaktivieren von neueren Windows-APIs, die es auf CE nie gab und geben wird.

Codeblöcke wie

 1gate_result_t gate_do_something()
 2{
 3#ifdef GATE_SYS_WINCE
 4  return GATE_RESULT_NOTIMPLEMENTED;
 5#else
 6  /* do really something */
 7  return GATE_RESULT_OK;
 8#endif
 9}

sind also nicht ungewöhnlich.

Würde Microsoft sein Windows CE nicht ausschließlich für Nischen vorsehen und eine offenere Strategie damit fahren, könnten wir CE häufiger antreffen. Denn der kleine Kernel kommt mit wenigen Megabyte RAM und niedrigen MHz CPUs aus und würde so auf Chips laufen, die nur mit RTOS Varianten und extrem abgespeckten Linux-Distributionen arbeiten.

Denn GUI und Treiber Frameworks sind in CE auswechselbar bzw. können auch entfernt werden.
Es gibt außerdem kein offizielles Windows CE im Laden zu kaufen, sondern man erhält fast alle OS Komponenten im Quellcode und muss sich sein eigenes CE mit Visual Studio und einigen weiteren Tools erst zusammenkompilieren.

So ist die flexible Anpassung und Optimierung auf viele Plattformen denkbar, doch wenn überhaupt, so trifft man heute nur noch das “Standard-Profil” von Windows CE auf ARM basierten Geräten an.
Frühere Varianten für Motorola und andere Hersteller habe ich seit über 15 Jahren nicht mehr gesehen und auch nichts davon gehört.


Wie auch immer, CE mag veraltet und für viele tot sein.
Ich mag das Ding trotzdem irgendwie … wahrscheinlich weil es in meiner Jugend ein unerreichbares Mysterium war.