Affichage des articles dont le libellé est linux. Afficher tous les articles
Affichage des articles dont le libellé est linux. Afficher tous les articles

jeudi, janvier 15, 2009

Project NACA: migration from an IBM mainframe to Intel/Linux servers - rationale and strategy.

UPDATE: Project NACA has given birth to Eranea, a company dedicated to 100% automatic migration of mission-critical apps to Java & Linux. Check out www.eranea.com or email to contact@eranea.com for more information
________________________________________________________________________________

[pour les lecteurs français: traduction - demandée par des lecteurs anglophones de ce blog - de la version originale en français qui reste à consulter ici pour les intéressés]
[for english readers: don't hesitate to get in touch to obtain additional detailed infos about the project]


This article will describe the NACA project run by Publicitas, advertising sales company based in Switzerland and executed by Consultas, IT subsidiary of the group. It is my employer.

the NACA project was about replacing an IBM mainframe under MVS/OS390 (zOS) with Intel servers on Linux. The project started in January 2003 and successfully ended on june 30, 2007, with the last 2 years much more active than the first2. It was on purpose implemented in a 100% iso-functional way, i.e. without any functional / applicational improvement brought during the process of trans-coding itself and by the transcoding engine. 4 millions lines of COBOL were 100% automatically trans-coded toward their Java equivalent.


The recurrent annual savings in cash-outs amount to a total of 3 millions euros, 85% of the initial yearly level. 
First of all, meaning of the project name:
  • in French, NACA = “Nouvelle Architecture Centrale d’Applications”
  • in English, NACA = “New Architecture for Core Applications”
As the title of the article and the project acronym imply, NACA was launched within Publicitas (Lausanne, Switzerland) to initially convert an IBM mainframe model G5 operated through the standard palette of “big iron” software (MVS/OS390/zOS, CICS, COBOL, DB2) toward its canonical equivalent in the Open Source world: Linux, Java, Tomcat, UDB. 
The aim was to transfer the homegrown administrative application (called PUB 2000 - developed at the end of the eighties) to state-of-the-art technologies, i.e modern and (cost) efficient. 
The first thoughts around the project emerged in July 2002 when we realized that Open Source software was gaining ground and was already heavily utilized for applications much more critical than ours. Multiple case studies were published about core applications in key industries: energy, aeronautics, space, finance, with famous names like Boeing, Sony, Nasa

Most of those industrial applications were run at much higher load with more severe performance / availability constraints than ours. Our own activity is around 750′000 transactions done by approx. 1′500 internal users.
From another perspective, the highly successful startups of that time like Google were demonstrating that Linux can be the cornerstone of a very large scale infrastructure delivering a complex service over the Internet, By that time, it wasn’t yet through 1 million servers delivering 120 billions pages per month but the load level of Google was already far higher than ours. About reliability, the proven resilience / reliability of Open Source is best described by Linus’ law (Linus = Linus Torwald, father of Linux) made famous in the essay of Eric Raymond named “The Cathedral and the Bazaar“: “given enough eyeballs, all bugs are shallow”.
All lights were green. So, we decided to launch the project knowing that many hurdles and unknowns were still in front of us: such a full migration from a mainframe under zOS was (minimally) to be considered as pioneer work. Some even said by that time that it was crazy or heretic…
But, we started to explore the technological possibilities for NACA because the first motivation was massive and critically important: the mainframe had a yearly cost of 3 millions euros paid to IBM and third parties and 2.5 millions euros, i.e. 80%+, were used operating the hardware.
The initial business case was simple (some even said simplistic…) : Open Source software is more or less free. IBM mainframe hardware can run Open Source. So replacing each component of the mainframe palette by its OSS counterpart would save us millions of euros. The only point being that you have to accept this brutal computation…
[Note: IBM was by then publishing figures saying that less than 1% of linux kernel had been modified to run on the mainframe hardware of series G]

So, mainframe Linux is clearly the same as the one running of Intel servers]
Those massive savings were attractive enough for the management and financial staff of Publicitas to authorize the project and support it further during the various troubled periods that always happen during the course of such a risky project. Those troubled times will be the core topic of a subsequent article.
We started NACA with following objectives and guidelines:
  • progressive migration: the one-shot “big bang” of a global migration from the old system toward the new one, implemented over a single week-end was banned from day 1 and for ever. All team members knew internal or external “big bang” projects that failed after a couple of unsuccessful “big step” trials. So, we decided to build our project path rather than as a very long stairway with as steps as possible, those steps being as small as possible. The idea was to achieve many incremental and irrevocable (but always reversible) successes.
  • 100% automatic and strictly iso-functional trans-coding: we did not want to mix genders between technology update and application improvement. This confusion inevitably leads to additional constraints becoming lethal most of time. So, we decided to migrate each COBOL function to its strictest equivalent in Java. So, at the end of the project, just the same application but delivering the same value for a drastically reduced cost. In addition, the automatic (i.e. costless) trans-coding means that the Cobol maintenance doesn’t have to be interrupted: the next run of the transcoder transfers the newly implemented Cobol code to its Java equivalent. So, the end users remain happy while the system engineers achieve their technological marathon over the many years of such a project.
  • continuation with teams in place: the employees loyal to the company and its IT system over 20 years are the best experts to execute a smooth migration. Knowing that system engineer spend their career learning new technologies, shifting to Linux is just another milestone on this road. We just added a couple of linux- and OSS-oriented “rookies” to accelerate the technology adoption.
The tactics of this progressive migration is clearly NOT to build the new system in parallel to (i.e separated from) the old one. It is rather about replacing one by one components of the legacy system with OSS technological equivalent in the live production environment. The target is to preserve the quality of service of the old world in the new system under permanent mutation. Thus, the end-users never perceive the launch of a new system but rather sense the permanent evolution of functions that have always been there. This evolution also brings improvements at no big cost: for us, THE example is the generation as pdf files of our administrative documents (orders, vouchers, etc.): in the mainframe world, it was always too expensive to be done but under Linux it came for free in course of migrating the print management system.
The consequent logical order is to start from the lower system layers of the system stack and then go up toward the application layer: the transcoded Pub2000 could not be launched before the ground layers were there!
The advantage of this bottom-up progression is clear: the existing systems engineers are the first employees to get involved. As such, they become clearly the owners of the new system and master all the Linux and other OSS technologies before anybody else. They feel then highly comfortable and have no fear of being displaced when the developers enter the game a few months later.
From another perspective, the iso-functional transcoding to Java is essential: by using such a cross-compiling tool (that we ended up developing by ourselves in order to achieve the 100% automation that we targeted initially - I’ll come back on that in a subsequent article), the functional maintenance of application is never interrupted. All changes made to Cobol are smoothly, instantly and at no cost transferred to the Java version in the next run of the transcoder (almost done on an hourly basis).

This relieves a very important constraint on the new Java / OSS version of the application: no firm release date is really needed from a functional standpoint. If, let say, a new legal function was implemented only in the new Java version after hand-tweaking of the half-baked java code, a delay on the productive release of the Java version could be dramatic for the entire project.
On the contrary, with the strategy that we chose for NACA, our developers did their functional maintenance on the cobol version (as they always did) until the new java version was satisfactorily used by 100% of our end users (progressively migrated groups by groups) for several weeks in the production environment. At this time only, the transcoded Java version of the application became the official new source code of PUB 2000. If any problem had occurred in this process and in the worst case, we could have brought 100% of the users back on the mainframe in matter of minutes.
It never occurred, by the way. 
But this careful and parallel progressive allowed us to make quietly some (unexpected) stops in user migration at points were some performance thresholds were reached in our Java architecture: our java / database experts would then adapt the system architecture or transcoding + runtime strategies to overcome the hurdle and we could proceed further with more migrated users. [All details in a subsequent article].
Last but not least, we wanted keep the very loyal teams in place even though the entire system was eventually changed. We offered all of them a very intensive OSS training package. The motivations were those:
  • Such a migration can’t succeed without full support of the team mastering the legacy system. Ten of thousands of tiny details (Remember: the devil is in them!) have to be handled for the project to succeed. So, hoping to generate competition by trying to oppose the young wolves of OSS to the old crocodiles of legacy mainframe would be a clear fatal mistake.
  • Most system engineers are used to change the horse that they ride (i.e the operating system that they master) many times over their career. At the end of the day, this is just another occurrence of such a switch! When they see that the world around them is deeply changing around them through a massive migration toward OSS, they welcome (with minimal resistance to change) any opportunity that allow them and their competences to also switch through a good training. Fundamentally, they are more experts in system architecture than in any specific operating system. It means that they just have to learn a new set of “bits and bytes” habits to transfer their expertise to the world of Linux and OSS. The core fundamentals of most operating systems remains essentially the same whatever the name of the OS is! It is just another command syntax and parameter definition format to learn…
To close this first episode, I would like to add that such a migration from proprietary world also brings intangibles advantages that are eventually almost as important (more important than ?) as the very sexy financial fact-based ROI that you can demonstrate for such a project. 
Those intangibles advantages can be presented in one sentence: “we are back in the market”. And even if you can’t equate this to euros, it has a clear value:
  • you can hire new engineers in a much simpler way: mainframe system engineers tend to become rare and then expensive!
  • you can interconnect the new version of the application in a so much easier way with other internal systems (CRM, SAP, etc..) as well as with external sites over the Internet (E-commerce, E-business). Those interconnections suddenly become 10 / 100 / (1000 ?) times more easier when you can rely on the full J2EE environment as well as on tons of open source java library.
You can then integration your home grown application in a much more flexible and efficient way to newer components of the IT systems: the old file exchanges, data conversion and import / export processes can disappear to be replaced by synchronous real-time data exchanges over any kind of remote procedure call. This clearly brings value to the business through processes that are accelerated.
As a conclusion, the only valid initial catalyst of such project are savings. They are so massive that they get the attention of any CIO. But, when those savings are achieved, another benefit probably even more important emerges: the company can now significantly improve its business through IT in ways that were only unachievable dreams before the migration. Some were not even anticipated!

And to close the loop, those improvements can even be financed through the savings just achieved via the migration…

lundi, janvier 05, 2009

Projet NACA présenté au salon Solutions Linux 2009

UPDATE 01-2012: Le projet NACA a donné naissance à Eranea, société dédiée à la migration 100% automatisée de grandes applications métier vers Java et Linux. Voir  www.eranea.com ou email à contact@eranea.com pour plus d'informations
_______________________________________________________________________
Notre projet NACA de conversion mainframe/Cobol vers Linux/Java sera présenté au salon Solutions Linux 2009 le 1er Avril à Paris. J'y reparlerai bien sûr de la mise en Open Source (GPL) de nos outils maison qui nous ont servi à convertir 100% automatiquement nos 4 millions de lignes de Cobol.

Voir le programme complet de Solutions Linux 2009 en page 10 pour les détails précis

Mon exposé sera la continuité des RMLL2008 à Mont-De-Marsan: le powerpoint de l'époque reste une bonne introduction.

Je sais: je m'y prends tôt pour l'annoncer mais l'overbooking nous guette tous, n'est-ce pas ? [Faites-moi signe si vous y serez aussi: un café, une bière, c'est toujours sympa!]

Rappel sur NACA

le projet NACA a conduit au remplacement d'un mainframe IBM sous MVS/OS390 par des serveurs Intel sous Linux. Le projet a été lancé en Janvier 2003 et s'est terminé avec succès au 30 Juin 2007. Il a été réalisé volontairement de manière 100% iso-fonctionnelle (i.e. sans aucune modification pendant et par le transcodage) pour l'application et a permis la conversion automatisée de 4 millions de lignes de Cobol vers leur équivalent Java. L'économie en cash-outs - paiements externes - est de plus de 85% de leur montant annuel = initial d'environ 3 millions d'euros annuels

Articles déjà parus:

Source: blog Media & Tech (par didier durand)

mercredi, octobre 22, 2008

Le noyau Linux vaut 1.4 milliard de dollars!

La fondation Linux publie une mise à jour d'une étude similaire déjà publiée en 2002 pour évaluer les coûts de développements selon le modèle COCOMO:
L'étude complète et détaillée est ici.

J'ai déjà parlé de la lame de fond de l'Open Source (avec Firefox comme fer de lance): elle se manifeste encore à travers ces chiffres.

En effet, qui d'autre qu'un effort coopératif global (à part quelques très rares exceptions comme Microsoft, Google, IBM ... et encore !) pourrait aujourd'hui aligner de tels sommes pour se lancer dans le développement du système d'exploitation "organique" et en mutation perpétuelle qu'est Linux?

Source: blog Media & Tech (par didier durand)

lundi, avril 21, 2008

Noyau linux: maintenant clairement développé par des professionnels!

Quand, chez Publicitas, nous sommes partis dans le projet NACA, nous avions pris cette décision car nous "sentions" déjà que la professionnalisation de Linux était en cours: nous n'avions de donc pas de crainte à migrer (automatiquement) nos 4 millions de lignes de Cobol vers du Java.

Le dernier rapport de la fondation Linux donne des chiffres explicites sur cette professionnalisation à travers une analyse de l'évolution du noyau de Linux.

Le nombre de changements / améliorations dans ce noyau devient toujours plus important au fil des nouvelles versions [Le graphe ci-après place le jour 0 du comptage à la version 2.6.11]


La taille de ce noyau va donc en conséquence toujours croissante: on est maintenant au bord des 9 millions de lignes de code source...


La partie intéressante autour de la maintenance / évolution de cette importante masse de code source:
  • 73% des changements dans les 3 dernières années ont été faits par des employés de sociétés au nom de cette société dont 28.5% pour le total des seuls IBM, RedHat, Novell
  • 14% ont été faits par des individus en leur nom propre. (Les 13% sont de "source inconnue")
On est donc plus du tout dans le système d'exploitation développé par Linus Torwald comme projet d'études.

Pourquoi une telle contribution des sociétés professionnelles à un système "qui scie la branche" de leurs système d'exploitation propriétaires?
  • Parce que, quand comme IBM on est constructeur de matériel, il n'y a plus d'autres choix que faire fonctionner Linux au mieux sur ses propres "boîtes" pour espérer en vendre un maximum. Il faut donc contribuer au maximum au fonctionnement optimal de Linux. La passivité serait fatale face aux concurrents qui eux feraient cette optimisation
  • Parce que, quand comme RedHat ou Novell, on vit directement de Linux, on doit tenter de de le répandre au maximum et "l'aligner au mieux avec sa propre stratégie": rien de mieux alors que d'y contribuer pour pouvoir réaliser directement cette alignement ou obtenir une influence importante sur la communauté pour y arriver indirectement. C'est, de plus, toujours un argument marketing utile que de pouvoir se vanter de contribuer au coeur du système sur lequel on vit, preuve indéniable de fortes compétences!
  • Parce que quand on est utilisateur ou prestataire de services d'un client y ayant "placé toute ses billes", le meilleur choix est de remettre dans la communauté Linux ses modifications afin qu'elles deviennent standard du système. Un système d'exploitation n'est pas un moyen de différentiation stratégique: il est de l'intérêt de tout modificateur de laisser la communauté poursuivre la maintenance de son travail...
Pour les sociétés professionnelles, nous noterez que je ne parle pas de "contribution généreuse à un système communautaire": celles qui contribuent y ont forcément un intérêt direct beaucoup moins désintéressé! Pécuniaire ou autre.....

Je perçois personnellement Linux comme le système d'exploitation ultime vers lequel tout le monde finira par migrer: c'est par exemple le système d'exploitation du million de serveurs de Google (dans une version modifiée).

C'est cette "unification par les couches basses" qui pourra donner naissance finalement à un "Utility Computing On Demand" (dont j'ai déjà abondamment parlé) homogène qui permettra enfin, via cette homogénéité, des économies substantielles aux entreprises trop souvent engluées dans des frais d'exploitation autour de 80% de leur budget informatique!

L'émergence actuelle du "Cloud Computing" dans des formes embryonnaires est le signe avant-coureur de ce phénomène: c'est pour cela que des constructeurs comme Sun font le grand saut dans cette direction.

C'est l'enjeu stratégique des 5 prochaines années pour les constructeurs informatiques!

Note: dans cet article, l'utilisation du mot "professionnel" n'a aucun sous-entendu de qualité par rapport à "amateur". Il entend juste signifier "personne payée par un employeur pour faire du développement logiciel"

Source: blog Media & Tech (par didier durand)

mercredi, janvier 30, 2008

Logiciel Libre: la Gendarmerie récidive avec l'OS après la bureautique!

Après le lancement puis la bonne fin de sa migration vers Open Office, la Gendarmerie Nationale récidive avec le système d'exploitation.

Dixit Tristan: "la Gendarmerie Nationale vient d'annoncer au public la migration progressive de tous les postes (70 000 au total) d'ici 2009 vers la distribution Linux Ubuntu. Le calendrier est le suivant :
  • 2008 : 5000 à 8000 postes déployés
  • 2009-2012 : 12 à 15000 postes environ par an
  • 2013 : quasi-totalité du parc sous Linux (70 000 postes)

Les principales raisons évoquées sont les suivantes :

  • Linux est mature
  • Le modèle communautaire du développement Libre est validé
  • Respect des standards qui permettent l'interopérabilité
  • Confiance dans la technologie, grâce à sa transparence.
  • Baisse des coûts (économies de l'ordre de 20% sur l'ensemble du système d'information), grâce à une économie récurrente de plus de 700 000 licences."
Voilà qui pourra faire une bonne référence à suivre pour toutes les entreprises qui se posent la question! Mais, comme c'est écrit ci-dessus, ce n'est pas avant 2013 que l'on saura si c'est allé au bout. Ce délai ne me surprend pas: il correspond finalement à celui qu'il nous a fallu dans notre projet NACA pour passer de notre mainframe IBM avec ses 4 millions de lignes de Cobol vers Linux et Java!

Source: blog Media & Tech (par didier durand)

jeudi, novembre 08, 2007

Projet NACA [3]: présentation technique et économique globale du projet

UPDATE 01-2012: Le projet NACA a donné naissance à Eranea, société dédiée à la migration 100% automatisée de grandes applications métier vers Java et Linux. Voir  www.eranea.com ou email à contact@eranea.com pour plus d'informations
_______________________________________________________________________

Mise à jour: le code source des outils du transcodage NACA est maintenant en Open Source. Voir http://media-tech.blogspot.com/2008/07/les-outils-du-projet-naca-de-publicitas.html.

[
Introduction: cet article fait partie d'une série qui décrit le projet NACA ayant conduit au remplacement d'un mainframe IBM sous MVS/OS390 par des serveurs Intel sous Linux. Le projet a été lancé en Janvier 2003 et s'est terminé avec succès au 30 Juin 2007.

Il a été réalisé volontairement de manière 100% iso-fonctionnelle (i.e. sans aucune modification pendant et par le transcodage) pour l'application et a engendré la conversion automatisée de 4 millions de lignes de Cobol vers leur équivalent Java. L'économie en cash-outs - paiements externes - est de plus de 85% de leur montant annuel = initial d'environ 3 millions d'euros annuels
Articles déjà parus:

]

Dans le fichier Powerpoint pointé ici se trouve une présentation complète de notre projet (faite récemment).

En particulier, j'y évoque :
  • le contexte économique initial du projet: la morosité suite à l'éclatement de la bulle en 2001 et donc la recherche par tous les moyens de libération de nos coûts coincés dans le domaine de l'entretien du courant pour pouvoir affecter cet argent à des projets qui représentent toujours le futur d'une société!
  • la vision technologique de l'époque: la montée en puissance très conséquente du Logiciel Libre, les constructeurs informatiques qui y basculent, etc.
  • Un analyse (instructive...) de la répartition de nos coûts mainframe qui a défini le chemin du projet: initialement zOS vers zLinux car le logiciel représentait le plus gros poste de coûts
  • L'arrivée d'un bénéfice supplémentaire: abandon de la plate-forme matérielle mainframe IBM au profit de serveurs Intel vu le bond quantique de performances effectués au fil des années (Merci la loi de Moore!)
  • La liste conséquente des logiciels open source introduits pour remplacer leurs équivalents sur le mainframe
  • Le transcodage: reprise en images (elles valent chacun 10'000 mots, dit-on...) de la thématique du transcodage automatique (article NACA[2]), du "blackbox testing", de la stratégie de migration sans "big bang".


Je livre aussi vers la fin quelques échantillons du "produit fini" (le Java résultant du Cobol) pour ceux qui veulent se faire une idée concrète de la traduction automatique ligne à ligne que nous effctuons tant pour les écrans que pour le code applicatif.

Voilà, bonne lecture!

Si vous souhaitez que je développe l'un ou l'autre thème de la présentation, à vos commentaires pour m'indiquer lequel!

Source: blog Media & Tech (par didier durand)

jeudi, octobre 11, 2007

Projet NACA[2]: transcodage automatique vers Java de 4 millions de lignes Cobol

UPDATE 01-2012: Le projet NACA a donné naissance à Eranea, société dédiée à la migration 100% automatisée de grandes applications métier vers Java et Linux. Voir  www.eranea.com ou email à contact@eranea.com pour plus d'informations
_______________________________________________________________________

Mise à jour: le code source des outils du transcodage NACA est maintenant en Open Source. Voir http://media-tech.blogspot.com/2008/07/les-outils-du-projet-naca-de-publicitas.html.
[Introduction: cet article fait partie d'une série qui décrit le projet NACA ayant conduit au remplacement d'un mainframe IBM sous MVS/OS390 par des serveurs Intel sous Linux. Le projet a été lancé en Janvier 2003 et s'est terminé avec succès au 30 Juin 2007.

Il a été réalisé volontairement de manière 100% iso-fonctionnelle (i.e. sans aucune modification pendant et par le transcodage) pour l'application et a engendré la conversion automatisée de 4 millions de lignes de Cobol vers leur équivalent Java. L'économie en cash-outs - paiements externes - est de plus de 85% de leur montant annuel = initial d'environ 3 millions d'euros annuels

Articles déjà parus:
]


L'enjeu majeur du projet NACA était sans aucun doute le transcodage de l'applicatif "maison" de PubliGroupe appelée PUB 2000 (4 millions de lignes de Cobol - applications transactionnelles sous CICS + programmes batches - base de données relationnelles DB2 + procédures stockées sous DB2 en Cobol -750'000 transactions/jour).

Pour les développeurs qui veulent juger par la structure, la palette d'outils développés pour le projet et décrits dans la suite représente:

  • transcodeur lui-même (NacaTRANS) : 83'000 lignes de code source Java; 688 classes.
  • environnement d'exécution (NacaRT) des programmes transcodés: 153'000 lignes; 890 classes.
  • outils de test automatiques (NacaTools): 16000 lignes; 128 classes.
A cela, il faut ajouter les codes sources suivants: Java lui-même, Apache Tomcat, l'IDE Eclipse, Berkeley Db java Edition, quelques composants l'immense librairie Apache Commons, Apache Xerces comme parser XML, Apache XSLTC, quelques petits composants de Apache Struts , Apache Log4J , Apache Ant, CVS

Pourquoi transcodage = enjeu majeur ? Parce que finalement quand on passe d'un système à l'autre, on retrouve en général les mêmes composants (couches de télécommunications, système de contrôle de la machine, gestionnaire de sécurité, moniteur transactionnel, séquenceur des travaux batches, etc…) : les nouveaux composants sont sur base de technologies modernes avec des concepts plus récents et efficaces mais à la fin on finit toujours par imprimer, sauvegarder et gérer le système de manière similaire à la génération précédente.
Ce ne donc pas les composants systèmes ni les ingénieurs qui les pilotent, habitués à ces générations successives de système, qui posent problème. Le point d'achoppement d'une migration technologique, c'est toujours l'applicatif. Quand il est fait "maison", il faut toujours l'adapter de manière importante. Et comme ce chef d'œuvre (en tout cas, vu comme tel…) a naturellement la vertu d'être unique, tous les coûts de migration d'un système à l'autre sont exclusivement à la charge de l'entreprise propriétaire.
Comme expliqué dans l'épisode [1], la pierre angulaire du projet NACA, c'est le Logiciel Libre (OSS- "Open Source Software") avec Linux comme fondation de l'édifice. Nous ne voulions pas déroger à ce principe pour l'applicatif. Aussi, un choix comme le Cobol Microfocus (qui fonctionne sous Linux) aurait peut-être permis un chemin peut-être plus facile a été abandonné car il n'est pas Open Source. Il est de plus (fort) coûteux et ne nous pas aurait permis de restructurer / instrumenter notre application comme la couche objet (Java) que nous intercalée nous a permis le faire [J'y reviens plus bas]
Des premiers essais en quelques semaines par un prototype interne nous ont montré que le transcodage automatisé de Cobol à Java était "jouable". Sur le bon principe "Buy before Make", nous avons donc passé un appel d'offres à plus de 20 sociétés (quel que soit leur pays d'origine) susceptibles de répondre: beaucoup de sociétés en liens offshore avec l'Inde mais personne capable de faire un transcodage 100% automatique.
Doté d'un groupe de développeurs-experts, PubliGroupe à pu se permettre de poursuivre en interne la voie du transcodeur (i.e une sorte de compilateur Cobol vers Java) développé "maison" parce que le transcodage 100% automatique était un must dans la stratégie NACA développée dans le premier billet.
Les objectifs que nous nous sommes fixés pour ce transcodage:
  • fonctionnement 100% automatique: le transcodeur reçoit les fichiers source de l'application Cobol: programmes, définitions des zones de données (les fameuses COPY CLAUSE de Cobol), les ordres SQL (souvent séparées en fichiers INCLUDE isolés), les définitions d'écrans (BMS Maps pour un mainframe IBM) et génère à partir de tout cela une application Java structurée en servlets Tomcat accédant à la base de données relationnelles via JDBC et assurant le dialogue vers les écrans par une interface http/HTML native.
  • lisibilité du nouveau code source Java: certains des répondants à notre appel d'offres généraient du Java mais ce Java avait l'aspect d'un langage machine (… une sorte d'assembleur pour ceux qui connaissent encore ce langage…). Ce Java était certes opérationnel et sans faute mais absolument illisible et non maintenable pour un être humain. L'objectif de notre transcodeur (tenu par la suite…) de générer un Java totalement lisible par un programmeur standard. La motivation en est très simple: à la sortie du transcodage, nous voulions un code pouvant vivre encore 10 ans au moins. Une nouvelle génération de PUB 2000 "from scratch" est maintenant mise en chantier mais on connaît la durée de ce genre de chantier !... Il faut donc que le programmeur qui connaissait la version Cobol ne soit pas noyé dans la nouvelle mouture transcodée. Sinon gare aux coûts de maintenance…
  • maintenabilité du nouveau code source Java: encore une fois, il s'agit de pouvoir poursuivre l'évolution fonctionnelle de l'application transcodée. Nous avons donc pris l'option de générer des servlets Java copiant le plus fidèlement possible le Cobol initial. Le Java généré n'est ensuite pas dans le plus pur style orienté objet mais si vous êtes prêts (nous l'étions à 100%) à des concessions dans la pureté théorique du code généré, le résultat obtenu est un programme Java calqué quasiment ligne pour ligne sur le programme Cobol originel. Un vrai bonheur pour les programmeurs applicatifs qui à la fois connaissait parfaitement leur "poésie" Cobol et ne sentent pas encore tout à fait à l'aise avec les dernières subtilités OO de Java.
  • homogénéité du code produit: comme personne ne met ces "petites mimines délicates" dans le code Java nouveau, ce dernier est incroyablement homogène car le code est généré à partir de l'analyse syntaxique du Cobol selon un algorithme toujours le même. On efface donc les touches personnelles de poésie d'un code maintenu pendant longtemps par des personnes différentes.
  • nettoyage du code: le Cobol est structurellement simple. Il est donc possible de détecter puis de retirer certaines zones de code mort. Nous en avons encore sûrement laissé derrière nous, mais pas mal ont quand même été purgées.
  • iso-fonctionnalité du code: c'est une conséquence naturelle du transcodage automatique. Mais, elle est importante: en ne travaillant jamais à la main, on n'introduit pas d'erreurs et on ne met pas en danger le projet par "l'ajout en passant de ces quelques petites fonctions que tout le monde attend depuis longtemps" qui finissent par s'avérer fatales car , par leurs bugs, elles troublent tout le planning du projet.
  • découpage du code transcodé en 2 niveaux: nous avons découpé notre code généré en 2 couches: (a) la partie visible: un objet par verbe Cobol et un objet par variable du programme. Ces objets s'utilisent mutuellement pour exécuter le programme. Dans cette partie du code se trouve la correspondance ligne à ligne entre Cobol et Java. Ce sont donc ces 4 millions de lignes Java que les programmeurs applicatif maintiennent désormais chez nous (b) une bibliothèque d'exécution ("runtime"), appelée NacaRT - développée spécifiquement pour émuler Cobol et son environnement d'exécution CICS ou batch ). Cette bibliothèque est elle très (très) fortement orientée objet. Elle est le pilier d'appui des objets verbes et variables du (a). L'intérêt de cette architecture est multiple: (1) on préserve visuellement l'ordre et la structure du programme Cobol initial (2) la très forte orientation objet avec une hiérarchie d'héritage très profonde permet de faire évoluer de manière fondamentale le comportement du programme (performances, répartition de charge, etc…) par modification de l'implémentation des objets sous-jacents de la hiérarchie. Une hiérarchie profonde permet ensuite de circonscrire ces modifications de comportement à des zones plus ou moins vastes de l'application en fonction de l'endroit où l'on place la modification
Les conséquences d'un tel choix d'architecture de transcodage:
  • transcodage répétable autant que nécessaire: le processus est 100% automatique. L'absence d'intervention manuelle permet de refaire l'opération autant que nécessaire à coût nul ou presque.
  • stratégie de test devient encore plus critique: puisque l'on peut transcoder sans effort, on a envie de le faire souvent (voir les 2 points ci-dessous). Par contre, il faut alors pouvoir tester facilement le résultat effectif du transcodage. On arrive donc très vite à la conclusion qu'un outil de test automatique va de pair: nous avons donc développé cet outil de test (NacaTools) autant pour le batch que le transactionnel. Il s'agit de comparer une base de données résultant d'une batterie de transactions-tests en Java sur une base de départ connue à une copie de la même base de données résultant de la même série de transactions-tests faites depuis les transactions CICS. En plus bien sûr, on compare chaque champ de chaque écran de chaque transaction-test afin de vérifier que les 2 extrémités de l'application (les données permanentes et l'interface utilisateur) sont bien identiques. Nous avons ainsi développé plusieurs centaines de tests de nos applications que nous avons repassé des dizaines de fois pendant la mise au point du transcodeur et du runtime. L'objectif était de ne déranger les utilisateurs qu'une seule fois et pas chaque semaine pour tester les bugs corrigés durant la semaine (….et vivre de pleins fouets les nouveaux): ils sont venus pour nous constituer la batterie de tests. Et ensuite, on les a revus que lors des tests finaux. Même si la migration est terminée, vous vous doutez sûrement que nous continuons à utiliser cette batterie de test comme outil d'assurance-qualité de la maintenance applicative faite maintenant manuellement par nos développeurs sur le nouveau-code Java.
  • continuité de l'évolution fonctionnelle applicative: le transcodage et les tests afférents étant sans douleur, on peut continuer à faire évoluer son application en Cobol pendant toute la période de bascule. En effet, on intègre les nouvelles fonctions en Cobol, on transcode et on teste automatiquement. Et hop, la nouvelle fonction fonctionne aussi en Java. Une telle migration entre le 100% des utilisateurs sur Cobol - 0% sur Java vers 0% sur Cobol - 100% sur Java dure forcément plusieurs mois, Il est impensable d'interrompre la maintenance fonctionnelle sur une telle durée.
  • possibilité de migration progressive: come nous disposons d'après ce qui précède d'un moyen d'avoir une application identique dans le monde mainframe/COBOL et dans le monde Linux/Java sans peine ni coûts excessifs: nous avons pu prendre le temps de passer nos utilisateurs de l'ancien environnement au nouveau par "petits paquets" au début puis par paquets plus gros au fur et à mesure de la confiance croissante. Cela s'est ainsi fait sans douleur ni retour arrière. Encore aujourd'hui, je recommanderais exactement la même approche à tout projet de migration similaire. Cette souplesse de migration est le bon (meilleur ?) moyen de ne pas trop faire monter la pression. Dans une migration "big bang", on ne dispose que de quelques heures pour réagir quand un problème important survient sinon c'est retour arrière et le nombre des allers-retours est en général limité avant que le projet ne s'arrête définitivement… Dans une migration douce où les 2 applis cohabitent aussi longtemps que nécessaire, une telle pression n'existe jamais: on voit les goulets de performances arriver en ajoutant les paquets d'utilisateurs et en voyant leur impact. Quand le "mur" approche, on met la bascule en pause, on révise l'implémentation des objets du runtime qui posent souci et puis on repart. Pas de stress inutile!
  • possibilité de cohabitation de versions Cobol & Java à long terme: ce point ne nous concerne pas directement. Mais la stratégie NACA est intéressante pour un éditeur de logiciel qui aurait à faire cohabiter 2 versions de son application pendant la durée de migration d'un portefeuille de licences placées chez des clients: la méthode migration douce rend une mutation technologique quasiment transparente (… et très économique) car il dispose en permanence d'une application identique dans "l'ancien et le nouveau monde".
  • extension transparente des fonctionnalités de l'application originelle: la logique business est préservée lors du transcodage par la couche supérieure clonant le Cobol (cf plus haut). Ensuite, l'extension des objets de la bibliothèque d'exécution permet d'ajouter des fonctions supplémentaires à forte valeur ajoutée avec un minimum d'effort. Pour donner quelques exemples (déjà réalisées dans NACA ou dans nos plans d'améliorations complémentaires):
    • techniques: par ex: introduction de messages de logging partout où nécessaire, profiling de l'application, instrumentation automatique de l'application pour récupérer des données plus fine sur son utilisation, etc…
    • fonctionnelles: par ex
      • lien "live" (par RPC) avec d'autres applications pour leur transmettre des en temps des données nouvelle / modifiées au sein de l'application commerciale
      • génération automatisée d'hyperliens vers d'autres applications en fonction de la donnée affichée (ex.: l'affichage d'un code client est agrémenté d'un hyperlien vers le système de CRM externe ou vers une autre transaction de la même application utilisant le code client en entrée
Afin de ne pas faire trop long, je réserverai les détails d'architecture technique du système de transcodage à un prochain billet de la série promise sur le projet NACA.
J'espère par ce qui précède vous avoir convaincu de l'intérêt d'une migration progressive combinée à (… ou permise par) un transcodage automatique. En synthèse, on pourrait dire que c'est sûrement un peu plus long et coûteux qu'une migration "big bang" parfaitement menée. Mais, encore faut-il que le "parfaitement menée" soit une réalité sinon, pour le projet, c'est la trappe quasi-assurée! Et chacun sait que la perfection n'est pas de ce monde….
Note (cf début d'article) pour les (très) férus de détails technologiques: en plus de nos propres packages, nous avons fait appel aux composants Open Source suivants:
  • Java lui-même qui est maintenant un vrai Open Source alors qu'il ne l'était pas au début du projet NACA
  • Apache Tomcat comme conteneur des servlets représentant les clones des transactions CICS originelles. JBoss a été envisagé au début. Mais, n'ayant pas trouvé de réelle utilité à la lourde mécanique des EJBs ("Enterprise Java Beans") et ayant discuté avec d'autres les ayant mal vécus (performances et complexité, nous avons décidé de rester avec le très efficace (et incroyablement stable...) Tomcat jusqu'à ce qu'il ne suffise plus. Et, il a suffi jusqu'au bout ;-)
  • l'IDE Eclipse avec divers plug-ins dont un spécifique développé "maison" sur lequel je reviendrai ultérieurement
  • Berkeley Db java Edition pour ses fonctions de tris massifs dans les batches. C'est un moteur complet de fichiers ISAM sequentiels indexés mais nous n'avons pris que le tri car toutes nos données sont 100% relationnelles. Il a par ailleurs fallu l'enrichir pour supporter le très propriétaire format EBCDIC d'IBM.
  • quelques composants de l'immense librairie Apache Commons pour l'implémentation de certaines structures de données et fonctions très standards à toute application
  • Apache Xerces comme parser XML dans le transcodeur lui-même et dans NacaRT pour le passage des XMLs générés par l'application à l'HTML envoyé par le navigateur
  • Apache XSLTC comme compilateur XSLT pour les transformations successives des XMLs utilisés à l'éxécution: enrichissements /modifications successifs du XML initial pour arrriver à du HTML finalement envoyé au navigateur
  • quelques petits composants de Apache Struts pour une meilleure gestion des URLs, des servlets et de leur correspondance
  • Apache Log4J pour assurer la journalisation (logging) de tous les messages émis par le transcodeur, l'application initiale et par les objets "instrumentés" de la biblliothèque NacaRT
  • Apache Ant comme outil de transcodage / compilation / contruction de l'ensemble de l'application ( NacaTrans, NacaRT, Nacatools + 4 millions de lignes de source Java de l'application transcodée. En fait, nous avons utilisé AntHill un dérivé commercial de Ant qui ne nous a pas donné entière satisfaction durant le projet: aujourd'hui, on prendrait Ant natif ou carrément autre chose dans le même domaine de la construction d'applications.
  • CVS pour la gestion de tous ces sources. Aujourd'hui, ce serait vraisemblablement Subversion (SVN) qui était encore très / trop jeune quand nous avons commencé.
PS (pour ceux arrivés jusqu'à là dans la lecture...): tout n'est pas aussi idyllique que cela pourrait en avoir l'air. J'ai demandé à nos développeurs / experts de faire un inventaire des "points durs" du transcodage. Ils feront l'objet d'un prochain billet.

mercredi, octobre 03, 2007

Commentaire du jour [27] - Linux et le PAF: des progrès à faire!

[Commentaire du jour sur Media & Tech: quoi et pourquoi - Les autres commentaires du jour]

Le PAF c'est ici le "Paysage AudioVisuel Français". Désolé pour ceux à qui le titre suggérait d'autres choses! ;-)

Suite à mon billet sur le projet NACA, merci à un lecteur anonyme (donc, pas de lien) de son pointeur vers cette vidéo dans laquelle il semble que Linux soit encore un illustre inconnu sur le PAF. Le monde du Libre a des progrès à faire dans sa communication!




Le commentaire intégral de ce lecteur: "un peu hors sujet mais ca vaut le coup : vous avez vu la revanche de linux chez ruquier incroyable, ils voulaient jouer au plus malin avec Tonvoisin Debureau, l'auteur de travailler avec des cons (vu un post de lui, et ke le salut bien bas)
http://www.travailleravecdescons.com.
et qui seme le vent recolte la tempete ! la reponse de tonvoisin debureau une pepite concernant windows http://fr.youtube.com/watch?v=JMI-UxzSUec
linuxiens linuxiennes enjoy !!!

linux s'invite chez france 2 je ne sais pas qui est tonvoisin, mais les autres avaient pas vu le coup venir !"

PS:il y a l'air d'avoir quelques bonnes choses (pas tout...) au 2ème degré sur www.travailleravecdescons.com (que je viens de découvrir)

Source: blog Media & Tech (par didier durand)

lundi, octobre 01, 2007

Projet NACA: migration Mainframe IBM vers serveurs Intel/Linux - motivations et stratégie [1]

UPDATE 01-2012: Le projet NACA a donné naissance à Eranea, société dédiée à la migration 100% automatisée de grandes applications métier vers Java et Linux. Voir  www.eranea.com ou email à contact@eranea.com pour plus d'informations
_______________________________________________________________________
Mise à jour: le code source des outils du transcodage NACA est maintenant en Open Source. Voir http://media-tech.blogspot.com/2008/07/les-outils-du-projet-naca-de-publicitas.html.
[Introduction: cet article est le premier d'une série qui décrira le projet NACA ayant conduit au remplacement d'un mainframe IBM sous MVS/OS390 par des serveurs Intel sous Linux. Le projet a été lancé en Janvier 2003 et s'est terminé avec succès au 30 Juin 2007. Il a été réalisé volontairement de manière 100% iso-fonctionnelle (i.e. sans aucune modification pendant et par le transcodage) pour l'application et a permis la conversion automatisée de 4 millions de lignes de Cobol vers leur équivalent Java. L'économie en cash-outs - paiements externes - est de plus de 85% de leur montant annuel = initial d'environ 3 millions d'euros annuels

Articles déjà parus:
]

]
Tout d'abord le nom du projet:
  • en français, NACA = "Nouvelle Architecture Centrale d'Applications"
  • en anglais, NACA = "New Architecture for Core Applications"
Comme le titre de l'article et l'acronyme ci-dessus l'indiquent, ce projet lancé par mes soins chez mon employeur Publicitas (mère de Publiconnect) a eu pour objectif initial la conversion d'un mainframe IBM modèle G5 exploité via les logiciels standards habituels (MVS/OS390, CICS, COBOL, DB2) vers son équivalent naturel dans le monde du Logiciel Libre (Open Source):Linux, Java, Tomcat, UDB. Il s'agissait d'amener l'application commerciale maison, appelée PUB 2000 et développée à la fin des années 80, vers un environnement technologique moderne et efficace.
Nous avons lancé ce projet à mi-2002 sur le constat que l'Open Source "montait en puissance" et était utilisé sur des applications autrement plus critiques que la nôtre: de multiples exemples émergeaient déjà dans le monde des industries classiques: énergie, aéronautique, aérospatial, finance avec des noms prestigieux comme Boeing, Sony, Nasa. Toutes ces applications industrielles trouvées au travers de notre veille technologique avaient des niveaux de charge et de volume bien supérieurs aux nôtres. Notre activité est d'environ 750'000 transactions par jour effectuée par une population de 1'500 utilisateurs environ.
Par ailleurs, dans un domaine moins habituel pour Publigroupe (mon employeur), des startups (de l'époque….) comme Google nous montrait qu'elles arrivaient à délivrer sur Linux un service de qualité impeccable à des très hauts volumes de charge. Certes, à l'époque pas encore avec 1 million de serveurs pour délivrer 120 milliards de pages chaque mois mais quand même avec déjà des niveaux de charge bien supérieurs aux nôtres. Côté fiabilité, la solidité prouvée de l'Open Source est bien décrite par la célèbre Loi de Linus (Torwald, père de Linux) énoncée par Eric Raymond dans son essai "La cathédrale et le bazar" (à lire ou relire, impérativement!). Cette loi dit donc ""Étant donnés suffisamment d'observateurs, tous les bogues sautent aux yeux'' .
Les feux étaient donc au vert et nous sommes lancés, conscients que de nombreux écueils se trouvaient encore devant nous car une telle migration Mainframe MVS était pour le moins pionnière (voire inconsciente ou hérétique au gré des interlocuteurs…)
Mais, nous sommes partis dans l'exploration des possibilités technologiques pour NACA car la première motivation du projet était massive: le mainframe IBM nous coûtait en "cashouts" (sommes payées aux fournisseurs IBM et tiers) environ 3 millions d'euros par an. 80%+ de cette somme, soit pas loin de 2.5 millions d'euros partaient dans les licences de location des logiciels utilisés comme "carburant de la grosse boîte".
Le calcul financier initial était donc simple (même simpliste pour certains…) : le Logiciel Libre est gratuit. La plate-forme mainframe IBM supporte le Logiciel Libre et le remplacement intégral des logiciels propriétaires d'IBM et des tierces parties par leurs équivalents Open Source permet donc réduire les coûts annuels de 2.5 millions par euros. Si on calcule abruptement...
[Note: IBM annonçait à l'époque - preuve avec le code source à l'appui - que moins de 1% du noyau de Linux était modifié pour supporter sa plate-forme hardware mainframe de la série G.On parle donc véritablement du même logiciel Open Source que pour des serveurs Intel]
Ces économies très consistantes représentaient une motivation suffisante aux yeux des gestionnaires des finances de PubliGroupe pour lancer le projet puis le soutenir dans les moments difficiles qui ne manqueraient pas de survenir (on en reparlera dans les prochains épisodes…)
Nous sommes partis avec les objectifs et lignes directrices:
  • migration douce: le "big bang" de la migration globale de l'ancien au nouveau système en une nuit a été banni d'entrée. Les uns et les autres de l'équipe connaissaient tous des projets internes ou externes ayant échoué par la volonté de passer "la grande marche" en 1 seule étape. Nous avons donc décidé de construire comme chemin de projet plutôt un long escalier doté de multiples petites marches permettant de progresser irrévocablement (mais avec retour arrière possible à chaque fois)
  • transcodage iso-fonctionnel et automatique: il s'agit d'éviter le mélange des genres qui conduit le plus souvent à l'émergence de nouvelles contraintes souvent fatales. Donc, nous avons décidé de migrer les fonctions écrites en Cobol 1 pour 1 vers Java. A la sortie, le code Java fait juste la même chose que le code Cobol. Il le fait et juste pour beaucoup moins cher....
  • préservation des équipes en place: les collaborateurs fidèles à l'entreprise et au système depuis 20+ ans sont les plus aptes à le faire migrer. Pour autant que l'on injecte juste le sang neuf nécessaire à l'infusion des nouvelles compétences Linux et Open Source.
Le principe de la migration douce est de construire le nouveau système non pas en parallèle (i.e séparée) du système historique mais plutôt de bâtir progressivement le nouveau système en remplaçant des parties de l'ancien et en interconnectant les nouveaux composants avec l'ancien système pour délivrer une qualité de service au moins identique (voire meilleure) en permanence aux utilisateurs sans créer de césure entre ancien système et nouveaux composants. La conséquence directe de cette stratégie est que l'on commence la migration du système par les couches basses puis que l'on remonte "la pile des niveaux logiciels" pour terminer par l'application maison.
Avantage de cette progression"bottom-up": les administrateurs du système gérant habituellement ces couches basses sont les premiers à quitter l'ancien monde vers le nouveau. Ils ont donc la possibilité de dominer les technologies (nouvelles pour eux) du monde Linux et de s'y sentir très à l'aise quelques mois plus tard quand c'est le moment pour les développeurs applicatifs d'y entrer.
Par ailleurs, le transcodage iso-fonctionnel et automatique est essentiel pour la fluidité du projet. En effet, en utilisant un outil (que nous avons fini par développer "maison" - j'y reviendrai dans un autre article) de transcodage 100% automatique, on peut continuer la maintenance applicative fonctionnelle dans l'ancienne version et faire passer "fluidement" les nouveautés dans le nouveau monde par simple transcodage.
On n'impose ainsi aucune date à la mise en service de la nouvelle version Open Source de l'application qui serait par exemple due à un respect d'une nouvelle réglementation. Dans une telle situation, un conflit entre une nouvelle technologie applicative qui ne fonctionnerait pas comme prévu et une obligation règlementaire impérative pourrait avoir des conséquences dramatiques pour le projet.
Avec le stratégie retenue pour NACA, au contraire, les développeurs font leur maintenance sur l'ancien code COBOL jusqu'au jour où la nouvelle application Java est certifiée comme valide pour la production après plusieurs semaines d'utilisation opérationnelle satisfaisante. A ce moment seulement, le Java transcodé devient le nouveau code source. Avant, il n'était qu'un langage intermédiaire de compilation. [On y reviendra dans tous les détails ultérieurement]
Enfin, nous avons décidé de préserver les équipes en place au maximum en les formant au maximum sur les technologies Open Source. Le deal est très simple:
  • une telle migration ne peut se réaliser sans la participation la plus entière des équipes en place. Il y a des dizaines de milliers de détails à connaître et à traiter de manière anticipée pour éviter au maximum tous les écueils (fatals) pouvant tuer le projet. Lancer les "jeunes loups de l'Open Source" contre les "vieux crocodiles du mainframe" serait la pire des erreurs de conduite d'un tel projet
  • la plupart des membres des équipes (système et développement) en place souhaitent faire évoluer dans leur expertise quand il voit que le monde change autour d'eux. Ils suivent aussi l'émergence de l'Open Source depuis leur cockpit du mainframe et donc sont prêts à se convertir avec peu de résistance - quand les objectifs précédemment évoqués leur sont expliqués clairement - pour poursuivre leur carrière en tant qu'experts du monde Linux dès qu'on leur offre le service de formation nécessaire. Les experts technologiques pointus aiment le rester et savent faire ce qu'il faut en termes de "bits and bytes" pour adapter leurs connaissances généralesd'architecture informatique à une "nouvelle quincaillerie" qui fonctionnent le plus souvent sur les mêmes grands principes que la précédente génération (juste une syntaxe de commande un peu différente...)
Pour terminer ce premier épisode, j'attirerai l'attention sur le fait qu'une telle migration de l'application maison d'un contexte propriétaire fermé à un contexte Open Source ouvert apporte aussi un avantage intangible (i.e. pas quantifiable en euros) lorsque l'on démarre: celui de replacer l'application sur une plate-forme à partir de laquelle les mécanismes d'interaction avec le reste du monde (i.e. autres applications de la société) deviennent 10 / 100 /1'000 fois plus simples.
On peut donc intégrer cette application d'une manière beaucoup plus efficace et rapide: des processus "historiques" semi-automatisés et peu rapides de transfert de données d'un système à l'autre (les célèbres "moulinettes" d'import-export inter-systèmes) peuvent être remplacées par des communications directes en temps réel (type RPC - Remote Procedure Call) entre les blocs du système informatique global (par exemple entre l'application commercial et le système CRM)
En conclusion, le catalyseur initial d'un tel projet est sûrement le montant consistant des économies réalisées mais le vrai bénéfice à long terme est de replacer le système de l'entreprise dans un contexte technologique moderne qui lui permet d'améliorer son business parfois de manières imprévues au début du projet mais très significatives. Et tout cela, pendant toute la durée du projet (4.5 ans pour nous) sans jamais perturber l'évolution de l'application via la magie du transcodage automatique....
Exemples de tout ceci dans les futurs billets. Donc, à suivre!
Source: blog Media & Tech (par didier durand)