Je pense que le problème aurait été le même que ce soit du Linux ou du Windows.
Oui et non. Le problème, c'est qu'ils ne mettaient pas à jour les centaines de serveurs une fois par semaine. Donc techniquement, on en arrive à la difficulté de mettre à jour un système Windows, ce qui revient à un détail technique qui est un véritable boulet que Microsoft traîne depuis des décennies, si je ne m'abuse : le verrouillage implicite en écriture des fichiers ouverts et l'absence de fichier sans nom.
Vous voyez, quand vous ouvrez un fichiers, sous GNU/Linux, notamment lorsque vous lancez un logiciel ? Sans plus de précision, le fichier correspondant n'est absolument pas verrouillé, un autre logiciel peut l'ouvrir en écriture et le modifier sous vos pieds. C'est moche, mais pas dramatique. D'une part, lorsque vous ouvrez un fichier, vous pouvez le verrouiller explicitement. D'autre part, pour mettre à jour des logiciels ou des bibliothèques, les gestionnaires de paquets écrivent les nouveaux fichiers avec un nom temporaire, puis suppriment l'ancien et renomment le nouveau avec le même nom que l'ancien.
Par exemple, pour installer une mise à jour de /bin/ls, le gestionnaire de paquets va écrire la nouvelle version dans /bin/ls.new, supprimer /bin/ls et renommer /bin/ls.new en /bin/ls.
Pour un logiciel en cours d'exécution, qu'est-ce que ça change ? Rien du tout, l'ancienne version, toujours ouverte, n'a plus aucun nom dans le système de fichiers, mais est toujours présente dessus : elle sera supprimée lorsque la son compteur de liens (déjà à zéro donc) et son compteur d'ouvertures arrivera à zéro.
Du coup, vous pouvez mettre à jour tout ce que vous voulez, puis relancer plus tard, quand vous voulez les processus concernés par ces mises à jour. Il faut tout de même penser à le faire, sinon vous gardez des processus obsolètes et potentiellement troués. Si la mise à jour concerne le noyau, là, rien à faire, il faut redémarrer.
Ça, c'était sous GNU/Linux. Sous Windows, rien de tel. Pour mettre à jour un logiciel en cours d'exécution, donc ouvert, impossible d'écrire sur son fichier, qui est verrouillé. On peut l'installer avec un nouveau nom, mais impossible de supprimer l'ancienne version pour ensuite renommer la nouvelle. Du coup, que fait-on ? On écrit une note pour le prochain redémarrage, qui demande au système de faire cette opération pour vous, très tôt dans le processus de démarrage. Donc... redémarrage à tous les coups, même pour des mises à jour qui ne concernent pas le noyau.
[^] # Re: Oui et non...
Posté par 🚲 Tanguy Ortolo (site web personnel) . En réponse au journal Manutan, cyberattaque et Windows/Linux. Évalué à 10.
Oui et non. Le problème, c'est qu'ils ne mettaient pas à jour les centaines de serveurs une fois par semaine. Donc techniquement, on en arrive à la difficulté de mettre à jour un système Windows, ce qui revient à un détail technique qui est un véritable boulet que Microsoft traîne depuis des décennies, si je ne m'abuse : le verrouillage implicite en écriture des fichiers ouverts et l'absence de fichier sans nom.
Vous voyez, quand vous ouvrez un fichiers, sous GNU/Linux, notamment lorsque vous lancez un logiciel ? Sans plus de précision, le fichier correspondant n'est absolument pas verrouillé, un autre logiciel peut l'ouvrir en écriture et le modifier sous vos pieds. C'est moche, mais pas dramatique. D'une part, lorsque vous ouvrez un fichier, vous pouvez le verrouiller explicitement. D'autre part, pour mettre à jour des logiciels ou des bibliothèques, les gestionnaires de paquets écrivent les nouveaux fichiers avec un nom temporaire, puis suppriment l'ancien et renomment le nouveau avec le même nom que l'ancien.
Par exemple, pour installer une mise à jour de
/bin/ls, le gestionnaire de paquets va écrire la nouvelle version dans/bin/ls.new, supprimer/bin/lset renommer/bin/ls.newen/bin/ls.Pour un logiciel en cours d'exécution, qu'est-ce que ça change ? Rien du tout, l'ancienne version, toujours ouverte, n'a plus aucun nom dans le système de fichiers, mais est toujours présente dessus : elle sera supprimée lorsque la son compteur de liens (déjà à zéro donc) et son compteur d'ouvertures arrivera à zéro.
Du coup, vous pouvez mettre à jour tout ce que vous voulez, puis relancer plus tard, quand vous voulez les processus concernés par ces mises à jour. Il faut tout de même penser à le faire, sinon vous gardez des processus obsolètes et potentiellement troués. Si la mise à jour concerne le noyau, là, rien à faire, il faut redémarrer.
Ça, c'était sous GNU/Linux. Sous Windows, rien de tel. Pour mettre à jour un logiciel en cours d'exécution, donc ouvert, impossible d'écrire sur son fichier, qui est verrouillé. On peut l'installer avec un nouveau nom, mais impossible de supprimer l'ancienne version pour ensuite renommer la nouvelle. Du coup, que fait-on ? On écrit une note pour le prochain redémarrage, qui demande au système de faire cette opération pour vous, très tôt dans le processus de démarrage. Donc... redémarrage à tous les coups, même pour des mises à jour qui ne concernent pas le noyau.