Dédoublement de personnalité
L'un des problèmes qui se retrouvent souvent en informatique est d'améliorer les logiciels, notamment en intégrant des techniques nouvelles, tout en gardant une compatibilité maximale avec l'existant. Par exemple, dans le cas de Windows, il fallait réfléchir à augmenter la stabilité pour qu'une application défectueuse ne bloque pas les autres - ou même plante le système d'exploitation entier - alors que des milliers de programmes devait pouvoir encore y fonctionner (même ceux de MS-DOS ont été récupérés). Au fur et à mesure des ajouts et des améliorations, il en est arrivé à nécessiter 128 mégaoctets de RAM pour travailler confortablement alors qu'au début on se débrouillait avec 4 mégas. Malgré toutes les fonctionnalités supplémentaires apportées, on dirait qu'intervient là un facteur multiplicatif plutôt qu'une simple addition. Personnellement, j'ai l'impression que cela vient en bonne partie de la volonté de faire le grand écart entre le plus ancien et le plus nouveau sur un système unique.
Je me dis que pour mieux traiter le problème, il faudrait une séparation radicale entre les orientations "compatibilité" et "nouveaux concepts". Les vieilles versions de Windows, par exemple, utilisaient une forme de multitâche rudimentaire où chaque programme devait passer la main explicitement aux autres, ce qui en cas de bug, pouvait provoquer les disfonctionnements cités plus hauts. Si, maintenant, on veut employer un multitâche plus efficace et plus fiable, il faut que les premières applications tournent toujours, en sachant qu'elles ne s'exécutent pas d'une façon entièrement séquentielle mais par la gestion de messages arrivant du système (des évènements tels qu'un déplacement de la souris), ce qui est beaucoup plus compliqué. Je crois que la solution pour éviter l'escalade serait de mettre en place 2 machines virtuelles.
L'une d'elles assurerait la compatibilité avec ce qui existe déjà et l'autre pourrait implémenter des concepts beaucoup plus modernes. Les fonctionnalités élémentaires seraient placées au niveau du super système d'exploitation et ainsi partagées entre les 2 machines. Il y aurait une interface commune pour celles-ci et il suffirait d'un appel système en tout début d'exécution pour savoir où aiguiller un programme (son absence signifierait bien sûr que c'est la compatibilité qui devrait être assurée). Cela n'interdit d'ailleurs pas de pouvoir transférer des ressources d'une machine virtuelle à l'autre en cours de route.
Pour se faire une idée des possibilités apportées par cette scission, il faut se souvenir du passage de 16 à 32 bits déjà réalisé sous Windows. Au départ, les applications fonctionnaient en 16 bits (taille des registres du processeur). La mémoire devait être segmentée et ces segments ne pouvaient excéder 2 à la puissance 16 = 65536 octets. Dès qu'un tableau dépassait cette taille les choses se compliquaient. Avec le mode 32 bits, utilisable à partir du 80386, les segments ont pu aller jusqu'à 2^32 = 65536^2 = plus de 4 milliards d'octets, en sachant qu'il peut y en avoir simultanément un pour le code, un pour la pile et d'autres pour des données. Il faut ajouter à cela un nouveau format pour travailler (32 bits), des modes d'adressages plus souples et des instructions supplémentaires.