# GnuCOBOL

GnuCOBOL (anciennement OpenCOBOL, et pendant une courte période connu sous le nom de GNU Cobol ) est une implémentation en logiciel libre du langage de programmation COBOL. GnuCOBOL est un transcompilateur vers C qui utilise ensuite un compilateur C pour générer du code natif. Conçu à l'origine par Keisuke Nishida, son développement avait été repris par Roger While. Les développements les plus récents sont désormais dirigés par Simon Sobisch, Ron Norman, Edward Hart, Sergey Kashyrin et bien d'autres. La société française OCamlPro participe au développement depuis janvier 2022.

## Histoire

Alors qu'il travaillait avec Rildo Pragana sur TinyCOBOL, Keisuke Nishida décida d'essayer de développer un compilateur COBOL adapté à l'intégration avec GCC. Ce prototype est rapidement devenu le projet OpenCOBOL. Nishida a travaillé en tant que développeur principal jusqu'à la version 0.31 en 2005. Roger While a ensuite pris la direction du projet et a publié OpenCOBOL 1.0 le 27 décembre 2007. Les travaux sur la pré-version d'OpenCOBOL 1.1 se sont poursuivis jusqu'en février 2009. En mai 2012, le projet a été déplacé vers SourceForge et la pré-version de février 2009 a été marquée comme une version. Fin septembre 2013, OpenCOBOL a été accepté en tant que projet GNU, renommé GNU Cobol, puis finalement GnuCOBOL en septembre 2014. Ron Norman a ajouté un module Report Writer en tant que branche de GnuCobol 2.0, et Sergey Kashyrin a développé une version qui utilise des intermédiaires C++ au lieu de C.
Le transfert des copyrights à Free Software Foundation sur le code source de GnuCOBOL (incluant les versions nommées GNU Cobol et OpenCOBOL) a été finalisée le 17 juin 2015.
La dernière version stable est la v3.2, sortie le 28 juillet 2023, alors qu'une branche 4.0 est déjà en cours de développement.

## Utilisation en production

Peu d'entreprises communiquent sur leur utilisation du langage COBOL, et il est donc difficile de connaître le nombre d'entreprises utilisant GnuCOBOL en production. En France, la DGFIP est en train de migrer l'un de ses plus gros programmes COBOL des mainframes GCOS de BULL vers des PCs tournant GnuCOBOL.
Le compilateur CobolIT, société française rachetée par OpenText/MicroFocus, est une version de OpenCOBOL modifiée. CobolIT étant utilisé par plusieurs dizaines d'entreprises, cela atteste de la maturité de la solution GnuCOBOL. Contrairement à GnuCOBOL dont les sources sont disponibles en ligne, les sources du compilateur CobolIT ne sont pas publiques, bien que sous la même licence que GnuCOBOL.
La société OCamlPro fournit une offre de support sur GnuCOBOL dans le cadre de son offre de service sur SuperBOL, studio de développement pour GnuCOBOL.

## Philosophie

Tout en s'efforçant de rester conformes aux normes COBOL jusqu'à la spécification COBOL 2014 , et également d'inclure des fonctionnalités communes aux compilateurs existants, les développeurs ne revendiquent aucun niveau de conformité aux normes. Malgré cela, la version finale 2.2 réussit plus de 9 688 (99,79 %) des tests inclus dans la suite de tests NIST COBOL 85, sur 9 708 (20 tests ayant été supprimés).
GnuCOBOL traduit un programme COBOL (code source) en programme C. Le programme C peut ensuite être compilé en code natif utilisé par l'ordinateur (code objet) vers un programme ou vers une bibliothèque dynamique, que d'autres programmes peuvent appeler. Sous UNIX et les systèmes d'exploitation similaires (tels que Linux ), le compilateur GNU C est utilisé. Pour Windows, le package Visual Studio Express de Microsoft fournit le compilateur C. La compilation en deux étapes est généralement effectuée par une seule commande, mais il existe des options pour contrôler à quelle étape le compilateur s'arrête.

## Documentation

Le site opencobol.org a été le site officiel de l'équipe de développement de 2002 à 2012 et la meilleure source d'informations sur le développement en amont.
La plupart des développements ont désormais lieu dans un projet SourceForge nommé GnuCOBOL.
Rećemment, une partie du développement sur la branche 3.x a lieu sur un mirroir Github hébergé par OCamlPro.
Le Guide du programmeur GnuCOBOL, de Gary Cutler, a été publié sous la licence de documentation libre GNU. Il a été mis à jour pour inclure GnuCOBOL avec Report Writer et est répertorié dans la page de présentation de la documentation GnuCOBOL avec les dernières versions dans l'arborescence de code. Il est maintenu par Vincent Coen et d'autres à mesure que chaque nouvelle version du compilateur est publiée et est disponible sur le projet GnuCOBOL.
Une version formattée au format Sphinx, plus facile à naviguer, est aussi disponible sur le site GnuCOBOL de SuperBOL.

## Exemples de programmes
### Format historique (syntaxe fixe)

Compilation et exécution :

### Format moderne (syntaxe libre)

Compilation et exécution :

### Programme le plus court

Le programme COBOL valide le plus court, avec l'option de syntaxe libre dans GnuCOBOL 2.0, est un fichier vide. Compilation et exécution :
Pour les versions antérieures et avec une syntaxe libre :
Compilation et exécution :
Sans syntaxe libre et avec n'importe quelle version de GnuCOBOL, GNU Cobol ou OpenCOBOL (remarque, il y a 7 espaces de début pour se conformer à la source COBOL de disposition FIXED) :
La compilation s'effectue sans erreur :
Veuillez noter que ces exemples triviaux ne doivent pas être considérées comme de bonnes pratiques de programmes COBOL ; COBOL a été conçu pour être un langage de programmation en anglais lisible.

## Mise en œuvre

L'analyse de syntaxe utilise Bison et Flex. Le préprocessing de GnuCOBOL est plus simple que celui du standard COBOL, qui exige quatre passes, mais les programmes exigeant ces quatre passes sont très rares.
Le compilateur sous licence GPL et les bibliothèques d'exécution sous licence LGPL sont écrits en C et utilisent C ABI pour la liaison de programmes externes.
Le système de compilation est basé sur les outils du GNU Build System. Les tests standard avec make check utilisent Autoconf, la suite de tests ANSI85 exécutée par make test utilise des scripts Perl. Pour faciliter ses contributions, OCamlPro a développé l'outil Autofonce, permettant en particulier la promotion automatique des tests modifiés.
Le script de configuration de la compilation de GnuCOBOL comporte des options qui incluent :
* le choix du compilateur C et de ses options de compilation post-traduction
* le système de gestion de base de données pour le support ISAM
* l'inclusion d'iconv

## Disponibilité

* Version 1.0 sur SourceForge.
* Version 1.1 sur SourceForge
* Version de développement 2.0 sur SourceForge
* Paquet Debian open-cobol.
* Version 2.2, publiée le 7 septembre 2017 sur SourceForge
* Version 3.1 publiée en juillet 2020 sur SourceForge
* Version 3.2 publiée en juillet 2023 sur SourceForge.