Un programme informatique peut s'affranchire de la localité géographique en s'exécutant sur plusieurs machines à la fois ou à la suite, localisées n'importe où dans le monde, en utilisant le réseau Internet. Mais pour cela il doit posséder une grande portabilité, c'est à dire être exécutables de façon identique sur toute sorte d'ordinateur quelque soit le système d'exploitation. Cette portabilité s'obtient lorsque le programme devient parfaitement indépendant du système d'exploitation.
Un programme informatique, dans son information haute, ne doit pas décrire les particularités du matériel ni du système d'exploitation sur lequel il s'exécute. Il relaye cela à un niveau plus bas qui est assuré, soit par un compilateur adapté au système d'exploitation avec le risque de voir apparaître des différences de compilation, des défauts de portabilité, ou soit par un moteur appelé "runtime" mais qui ralentit un peu l'exécution, puisque le code n'est plus complétement compilé mais seulement pré-compilé pour être, in fine, interprété par le runtime d'une façon identique sur tous les systèmes, assurant ainsi une portabilité sans égale.
La véritable difficulté que nous rencontrons dans le développement d'un logiciel n'est pas la technique du langage de programmation utilisé qui est surmontée au cours d'une phase d'apprentissage, mais apparaît lorsque les logiciels deviennent suffisamment grands pour que nos méthodes de développement traditionnelles, basées sur l'analyse en sous-problèmes et sur la surveillance de chacune des parties, ne permettent plus de percevoir la globalité.
Le processus global génératif et puissamment adaptatif qui produit le logiciel, est constitué en grande partie par ses développeurs récents. Sans celui-ci, un logiciel devient, à partir d'une taille critique, impossible à modifier, la modification s'avérant plus complexe que la refonte complète de A jusqu'à Z du logiciel. On résout ce problème en intégrant un processus dit "holistique" de développement. Un tel processus générale n'existe pas encore. Nous n'avons qu'un ensemble d'indices qui le circonscrivent.
Le processus holistique veut intégrer non seulement le cycle de vie du logiciel complet de sa naissance à sa mort, mais aussi l'impacte sur l'organisation et la vie des participants, utilisateurs, développeurs et tiers, prenant en compte certaines questions tel que le travail permet-il l'épanouissement ? Est-il créatif, agréable ? Exploite-t-il les talents naturels des gens ? Garantit-il le développement professionnel et personnel ? est-il en collision avec la vie familiale, etc. Il permet ainsi d'embrasser d'emblée la responsabilité de la totalité du projet, et non de restreindre sa responsabilité qu'à une partie du projet finalement insignifiante, car pris isolement celle-ci n'a plus de sens et ne porte qu'une responsabilité... sans signification.
Le processus holistique consiste à donner un rôle globale à tous les acteurs, en leurs donnant tous les éléments nécessaires au développement ainsi que l'information dite "générative" de la totalité, à l'image du développement d'un être vivant à partir d'une cellule embryonnaire. En effet, la nature ne crée pas des parties respectives dont elle compose par la suite la totalité. L'être vivant se forme à partir d'une cellule embryonnaire qui contient déjà la totalité de l'information nécessaire (en grande partie encore inhibée) dans L'ADN. L'ADN ne contient pas la définition complète d'un être vivant. La quantité d'information nécessaire à une telle définition serait d'un ordre largement supérieur à la capacité de stockage d'information de l'ADN. L'ADN contient seulement la description d'un processus de création d'un être vivant, c'est à dire les informations nécessaires pour lancer un processus de création, un processus très adaptatif, qui s'ajuste constamment aux forces changeantes internes et externes.
En proposant un éventail d'actions et de choix dans le but d'assurer une plus grande liberté d'action et de raisonnement, on permet une prise de conscience de la responsabilité globale, et une adaptation aux contingences, permettant dans la plus part des cas de construire des solutions pertinentes. Le choix peut même être fait dans le logiciel lui-même sous la forme d'une phase d'apprentissage d'un réseaux de neurones (solution empirique), ou bien assuré par une équipe qui acquière la maîtrise scientifique sur les actions et choix proposées (solution théorique).
Nos méthodes de développement traditionnelles sont basées sur la subdivision en objectifs (analyse dichotomique en sous-problèmes) et sur le "reporting" (la surveillance de chacune des parties), à l'image des sociétés privées dans un monde libérale. Cela introduit des cloisonnements réducteurs en amont rendant impossible une vision globale, et cela renforce une hiérarchie de cercles d'initiés concentriques basée sur la rétention d'information par la désinformation des cercles inférieurs.
L'innovation consiste non pas à modularisé en amont, asservissant de faite les équipes, mais à modulariser en aval dans le but de déléguer la charge de l'assemblage le mieux adapté, et la liberté des choix les plus créateur, dans les processus locaux.
Le processus holistique est récursif, et propose à chaque fois une liberté basé sur la totalité des connaissances génératives, le tout, en perpétrant une structure qui sert de squelette.
Cette liberté récursive est rendu possible grâce à la préservation d'une structure. On parlera alors de transformation préservant la structure, en analogie au développement des images fractales où à chaque niveau de développement, est introduit, une liberté, basée sur une information générative complète, et donc, où est introduit à chaque niveau une prise de responsabilité de la totalité. Cela est analogue au développement d'une plante verte où l'information génératives complètes correspond à l'information non inhibée contenue dans l'ADN.
Néanmoins ce serait une erreur de présenter la recherche d'un processus holistique comme l'oméga de la recherche en développement. C'est une étape importante, certes, pour imiter la nature, ce que l'on ne sait faire encore en développement informatique, mais cela ne peut constituer nullement un but final. En effet tout ce que l'homme a créé est au delà de la nature.
Le premier principe, dit d'émancipation, consiste à toujours proposer les connaissances les plus émancipatrices, celles qui amènent à une plus grande liberté d'action et de pensé, et qui amènent donc à prendre conscience d'une responsabilité globale.
Le deuxième principe, dit d'indépendance, consiste à toujours privilégier les choix qui assurent l'indépendance, et qui assurent la possibilité de transmettre nos travaux informatiques au plus grand nombre. On se place ainsi d'emblée dans la conquête du libre et du développement informatique pour tous.
Le troisième principe, dit de subsidiarité, affirme qu'il faut toujours déléguer autant que possible la programmation intelligente au niveau local. Cela se traduit par une très grande modularité, et par la charge de l'assemblage (adapté aux besoins locaux) déléguée en local. Une conséquence de ce principe est qu'il n'y a pas de travailleur non initié qui agirait dans l'ignorance d'une vérité détenue seulement par les cercles supérieurs, à l'image de la construction des sociétés privés dans un monde libérale. Comme nous le verrons, le principe de subsidiarité est supérieur au principe libérale.
Le quatrième principe, dit de genèse, affirme que les avancées
significatives sont nécessairement collectives (même un travail
individuel sur le long terme est un travail collectif, car l'on rencontre les
mêmes difficultés pour se relire après des années,
que pour relire les travaux d'un collègue) et qu'elles nécessitent
donc un langage commun, des signes communs, qui peuvent être considérés
comme une norme (comme l'évolution d'une langues par son usage).