(EMail envoyé à mes anciens collègues Microsoft)
Amis Softies,
Voici mes bonnes résolutions pour 2020…
Je vous fais une annonce: je souhaite retravailler pour Microsoft et plus
particulièrement pour Corp. Cela passera peut-être par du Services avant, je ne
sais pas mais j’y travaille. Comme je le disais à mes copains Alain et les
zEric, travailler chez Microsoft était un rêve mais qui s’est arrêté
brusquement. Je ne reviendrais pas sur cet épisode et les raisons de cet arrêt,
la page est tournée.
Depuis que je suis MVP, j’ai accès à pleins de choses et c’est génial.
Microsoft est the number 1 software company, ça ne fait aucun doute. Vous y
travaillez et vous le savez. Cette entreprise est magnifique, les produits sont
nickel et surtout la technologie est fantastique. Qui ne se prend pas de
passion pour un SDK ou un produit ? Notre métier est fait de passion, de
rire et de larmes. Les échecs d’aujourd’hui seront les succès de demain.
Quand je lis le code de Windows, c’est complexe mais c’est beau. Le code
C++ contient quelque chose que ne possèdent pas les autres langages. Le style
Microsoft à base de COM est très spécial. Le mix entre les types Windows (COM
strings, VARIANT, UINT, DWORD, UNICODE LPWSTR, wchar_t et char *) et les types
C++ (wstring et string) fait que le code est fait avec plusieurs styles. On
trouve le code business fait la plupart du temps en composants COM ou en code
C++ ISO et la glue spécifique en API Win32. Don Box disait « COM is
love ». C’est vrai. Une coclass d’un composant COM, c’est une classe C++.
On a une classe en mode shared_ptr, un ctor ambigu AddRef, un dtor ambigu
Release, un cast QueryInterface pour obtenir les différentes interfaces (une
classe C++ peut implémenter plusieurs interfaces et peut hériter de plusieurs
classes contrairement à C# qui lui ne peut hériter que d’une seule
classe).
Dans le code de Windows Terminal, il y par exemple le code WinUI du cadre
(tabbed et Window et popup menu et menu) écrit en pure Windows API et XAML
Islands, le code du cmd avec son char buffer engine, son interpreter et le code
Windows ancestral réécrit en moderne C++. Le code est amélioré. C’est comme un
bon Bourgogne, il se bonifie avec le temps. Le code C++98/03 est amélioré en
code C++11/14 et progressivement ce Modern C++ fait que le code est nickel, il
est beau ! Par exemple, j’ai fait une contribution avec PR (pull-request
acceptée le 19 June 2019 https://github.com/microsoft/terminal/pull/1161
) qui consistait à mettre un shared_ptr sur un raw pointer et à faire la
plomberie qui va avec pour y jouer avec une référence derrière. La mémoire est
libérée automatiquement via le pointeur intelligent (smart pointer). C’est
beau. Il y a plein de TODO et FIXME dans le code pour améliorer le code legacy
Windows. J’ai vu que cela fait 4 ans que le code du CMD est refactoré et amélioré.
C’est peut-être ma mémoire qui me trahie mais je crois que c’est ça ; vu
dans les commentaires de code. On ne se rend pas compte de la puissance des
outils de Windows. Rien que l’archive de code GitHub du Windows
Terminal (https://github.com/microsoft/terminal)
fait 9.3 MB. Il y en a pour 6.3 MB de fichiers .h et .cpp. C’est pas mal déjà.
Enorme pour un seul individu à comprendre. Le CMD est un outil complexe qui va
au-delà d’un simple dir c:\ ! C’est un pilier de Windows. Nos admins
système le savent bien. Je compte bien continuer de m’investir encore un
peu sur Windows Terminal car c’est passionnant. C’est ma première résolution.
Ensuite, il y a le CoreCLR (https://github.com/dotnet/runtime)
qui est le runtime NET. Là je m’y mettre à fond car c’est une partie de mon
avenir qui se joue la dessus. Je vais apprendre et potasser la bête pour bien
comprendre comment ça marche. L’archive fait 99MB et unzipped ça fait 777MB.
C’est énorme mais bon, y a les tests unitaire & co mais bon le code C++
fait environ une taille de 76MB sans les tests. Autant vous dire que c’est
énorme de chez énorme. OK Windows fait 1 GB de source code mais la on parle
juste du folder Windows\NET Framework mscoree.dll et compagnie… avec les DLL de
la BCL system.xxx. & co. J’en ai pour 3 mois à naviguer, explorer et
comprendre le code. C’est ma seconde résolution. Ensuite, je tente
l’Issue… Faut que je me trouve un truc facile au début, un FIXME ou TODO basic
pour rentrer dedans.
Ensuite il y a le code de Windows via le NDA Shared Source
Initiative et là, c’est mon kiffe régulier : lire le code
source de Windows. Pour ceux qui ne connaissent pas le C++, c’est l’occasion de
s’y mettre. Achetez mon livre « Aide-Mémoire C++ » et demandez à
avoir accès au code source de Windows et admirez la qualité du code des
Ingénieurs Windows. J’ai énormément de respect pour le code de Windows. Depuis
que j’ai mis la main sur le leak Windows NT4 et Windows 2000 (2 GB de source
code) dans les années 2000/2002, j’ai passé de nombreuses heures à étudier ce
code. Le kernel, les dlls RTL NTUser & co, le Shell, le File Explorer.
C’est un roman de Star Wars en 350 Volumes. C’est beau. C’est complexe mais à la
fois subtile et organisé. Putain, c’est bon ! C’est pour cela que je voue
une admiration sans faille à Bill Gates. Windows est un fleuron de
technologies. OK des fois c’est du bon vieux C/C++ mais ça marche vite et bien.
Quand j’ai découvert Windows Internals (7th edition Part 1; 6th Edition Part 1; 6th Edition Part 2). dans les années 2000, j’ai vu la vierge car cela m’a aidé à comprendre les
sources Windows puis quand j’ai découvert les Windows Protocols (https://docs.microsoft.com/en-us/openspecs/protocols/ms-protocolslp/9a3ae8a2-02e5-4d05-874a-b3551405d8f9),
ça a été le graal. Quand j’étais au Services en 2017, j’ai été surpris, les
gens ne connaissent pas ça. La culture du NET fait que les gens sont très peu
cultivés sur Windows alors que c’est le fleuron de la companie. OK, maintenant
y a Azure mais bon Azure c’est Windows Server et Service Fabric et tout ça
c’est Windows. Je fais abstraction de la partie Linux… Chaque Microsoftie
devrait se voir offrir le livrer Windows Internals pour son arrivée dans
l’entreprise !
Bref vous l’aurez compris, mon objectif c’est de bosser pour Corp. J’y travaille. Je vais trouver un moyen de tirer mon épingle du jeu via GitHub et mes relations avec l’équipe Visual C++ aux US. Mon pote Simon Brand est bien advocate C++ et vie pourtant à Edinburg, UK. La France c’est très spécial… Le C++ est limité. Les entreprises pour Services font, pour le développement avec les Technologies Microsoft, du C# / NET.
Bonne Année à toutes les copines.
Bises à mon mentor EricV. Bises à EricMitt. Bises à Alain.
Bises à Agnes , ma Directrice de Projet HEXV2 de OBS en 2006…. On se
marrait bien avec GGray, PCP, Nicolas. Je suis toujours en relation avec les
ex-collègues de OBS pour qui on devait remplacer leur système Linux (700.000)
BAL POP/IMAP par Exchange Server via HMC… On se revoit régulièrement autour
d’une bière avec Gael Roualland, le petit génie de OBS qui nous donnait du fil
à retordre et ses potes de l’époque. Depuis que je suis passé aussi à Debian
Linux et Ubuntu (C++ oblige), ils m’acceptent mais me chambrent en me disant
que Microsoft est mon meilleur ennemi façon je t’aime moi non plus. Ils me
disent de tout plaquer de builder que sur Linux et que j’aurais plus de succès
qu’avec Microsoft… Je ne suis pas d’accord. 25 ans de C++ Microsoft, ça ne
s’abandonne pas, au contraire, ça se monnaie. Et quand on aime, on ne compte
pas ses efforts.
Christophe | www.christophepichaud.com