Η Mistral δημοσίευσε μια αναλυτική περιγραφή ενός έργου εκσυγχρονισμού παλαιού επιστημονικού λογισμικού, στο οποίο βοήθησε έναν ευρωπαϊκό διαχειριστή ενέργειας να μεταφέρει 40.000 γραμμές Fortran 77 σε C++. Το αντικείμενο δεν ήταν ένα απλό πληροφοριακό σύστημα, αλλά ένας προσομοιωτής δεξαμενών με έντονο φυσικό υπόβαθρο, χωρίς test suite και χωρίς κεντρική τεκμηρίωση. Η περίπτωση έχει ιδιαίτερο ενδιαφέρον, επειδή δείχνει πού σταματά η απλή αυτόματη μετάφραση κώδικα και πού αρχίζει η πραγματική μηχανική λογισμικού. Παράλληλα, φωτίζει τον ρόλο που μπορούν να παίξουν οι AI agents όταν συνδυάζονται με αυστηρές διαδικασίες ελέγχου.
Σύμφωνα με την εταιρεία, το βασικό πρόβλημα στα παλιά επιστημονικά codebases είναι ότι συσσωρεύουν γνώση δεκαετιών μέσα στον ίδιο τον κώδικα. Όταν οι αρχικοί δημιουργοί αποχωρούν, αυτή η γνώση γίνεται δύσκολα ανακτήσιμη και η συντήρηση επιβαρύνεται. Επιπλέον, όταν το λογισμικό βασίζεται σε γλώσσες χωρίς ενεργό οικοσύστημα προγραμματιστών, περιορίζεται και η δυνατότητα αξιοποίησης σύγχρονων βιβλιοθηκών και εργαλείων. Έτσι, ο εκσυγχρονισμός δεν αφορά μόνο την αναγνωσιμότητα, αλλά και τη δυνατότητα μελλοντικής εξέλιξης.
Γιατί η μετάφραση δεν αρκεί
Η Mistral σημειώνει ότι η σύνταξη από μόνη της δεν είναι πλέον το δύσκολο κομμάτι. Ένα σύγχρονο μοντέλο μπορεί συνήθως να μεταφράσει ένα απόσπασμα από μια γλώσσα σε μια άλλη με αποδεκτό αποτέλεσμα έπειτα από λίγες επαναλήψεις. Ωστόσο, η μετάβαση ενός ολόκληρου συστήματος από διαδικασιακή Fortran σε αντικειμενοστραφή C++ δεν είναι πρόβλημα απλής αντιστοίχισης γραμμών. Απαιτεί αλλαγές στην αρχιτεκτονική, στην οργάνωση των δεδομένων και στον τρόπο με τον οποίο ορίζονται οι ευθύνες κάθε τμήματος.
Η ίδια η Fortran 77 ενσωματώνει περιορισμούς της εποχής της. Δεν διαθέτει modules, namespaces ή δομημένους τύπους όπως τους γνωρίζουμε σήμερα, ενώ η κατάσταση του προγράμματος συχνά μοιράζεται μέσω των λεγόμενων COMMON blocks, δηλαδή μέσω μιας μορφής καθολικής μνήμης. Επιπλέον, οι μεταβλητές μπορεί να τυποποιούνται έμμεσα από το πρώτο γράμμα του ονόματός τους, κάτι που σημαίνει ότι ένα ορθογραφικό λάθος μπορεί να δημιουργήσει νέα μεταβλητή χωρίς προειδοποίηση από τον compiler. Αυτό εξηγεί γιατί ένα σύγχρονο ισοδύναμο σε C++ δεν μοιάζει απαραίτητα γραμμή προς γραμμή με τον παλιό κώδικα.
Το κρίσιμο βήμα του parity harness
Πριν ξεκινήσει ουσιαστικά η μετανάστευση, η ομάδα έπρεπε να απαντήσει στο βασικό ερώτημα της αριθμητικής ισοδυναμίας. Για ένα τέτοιο επιστημονικό σύστημα, το ζητούμενο δεν είναι μόνο να μεταγλωττίζεται ο νέος κώδικας, αλλά να παράγει τα ίδια αποτελέσματα με τον παλιό. Η συμφωνία αυτή αφορούσε τόσο τα τελικά αποτελέσματα όσο και συγκεκριμένα ενδιάμεσα σημεία ελέγχου που υπέδειξαν οι μηχανικοί του πελάτη. Με άλλα λόγια, η ορθότητα ορίστηκε με μετρήσιμο και επαληθεύσιμο τρόπο πριν γραφτεί νέος κώδικας.
Για να το πετύχει αυτό, η Mistral πρόσθεσε υπορουτίνες στο codebase της Fortran ώστε να εξάγεται η εσωτερική του κατάσταση, ενώ ταυτόχρονα δημιούργησε test framework στην πλευρά της C++ για να φορτώνονται αυτά τα checkpoints. Επίσης, χρησιμοποίησε αρχεία Skill.md για να καθοδηγεί τους agents στη σωστή χρήση της υποδομής ελέγχου. Σύμφωνα με την εταιρεία, αυτή η επένδυση απέδωσε άμεσα, επειδή έκανε ασφαλέστερες τις μεγάλες εκτελέσεις των agents και πρόσφερε έναν σαφή τρόπο απόδειξης ότι μια ενότητα είχε μεταφερθεί σωστά. Η Mistral θεωρεί ότι αυτό πρέπει να είναι από τα πρώτα βήματα σε κάθε έργο εκσυγχρονισμού παλαιού κώδικα.
AI agents για κατανόηση και τεκμηρίωση
Ένα από τα σημαντικότερα προβλήματα του έργου ήταν η κατακερματισμένη τεκμηρίωση. Μέρος της γνώσης βρισκόταν σε παλιά PDF, μέρος σε σχόλια μέσα στη Fortran, και δεν υπήρχε ένα ενιαίο σημείο αναφοράς. Η εταιρεία περιγράφει ότι ένα από τα μεγαλύτερα παράπλευρα οφέλη του έργου ήταν ακριβώς η ενοποίηση αυτών των πηγών και η μεταφορά της τεκμηρίωσης πιο κοντά στον κώδικα. Αυτό είναι κρίσιμο, επειδή κανένα σύστημα δεν μπορεί να εκσυγχρονιστεί αξιόπιστα όταν οι βασικές του λειτουργίες παραμένουν αδιαφανείς.
Η διαδικασιακή φύση της Fortran βοήθησε σε αυτό το βήμα. Η ομάδα παρήγαγε ένα πλήρες δέντρο κλήσεων, caller-callee tree, αναλύοντας το codebase με custom parser, και στη συνέχεια χρησιμοποίησε το Vibe CLI για να εκκινήσει περισσότερους από εκατό agents τεκμηρίωσης. Κάθε agent μπορούσε να αξιοποιεί τα σχετικά PDF μέσω document libraries και του Mistral OCR, τεκμηριώνοντας σταδιακά κόμβους του δέντρου από τα φύλλα προς τα πάνω. Ένας reviewer agent, που εκτελούνταν περιοδικά, εντόπιζε νέα pull requests, τα αξιολογούσε και προγραμμάτιζε διορθωτικές ενέργειες όπου χρειαζόταν.
Από την πλήρη αυτονομία στη δομημένη συνεργασία
Η Mistral δοκίμασε αρχικά το πιο φιλόδοξο σενάριο, την πλήρη αυτονομία. Ένας agent αναλάμβανε κάθε υπορουτίνα Fortran και τη μετέφερε ανεξάρτητα σε C++ μέσα σε διάστημα περίπου μίας εβδομάδας. Το αποτέλεσμα ήταν λειτουργικό, αλλά όχι πραγματικός εκσυγχρονισμός. Τα COMMON blocks μετατράπηκαν σχεδόν αυτούσια σε global structs και οι ροές ελέγχου με GOTO παρέμειναν ουσιαστικά ανέπαφες, σαν να είχε απλώς ξαναγραφτεί η Fortran με σύνταξη C++.
Στη δεύτερη προσπάθεια, η εταιρεία έδωσε μεγαλύτερη δομή στη διαδικασία. Για κάθε module συνεργάζονταν planner, coder, tester και reviewer, με αποτέλεσμα αισθητά καλύτερη ποιότητα κώδικα. Παρ’ όλα αυτά, η πολυπλοκότητα του αρχικού συστήματος τελικά οδηγούσε τους agents σε αδιέξοδα όταν εμφανίζονταν δύσκολα σφάλματα. Η λύση που επικράτησε ήταν ένα ενδιάμεσο μοντέλο, όπου ο άνθρωπος χειριζόταν τη ροή εργασίας των coder, tester και reviewer agents, παρεμβαίνοντας όταν η αυτοματοποίηση κολλούσε.
Η πρακτική ροή εργασίας που λειτούργησε
Αφού ολοκληρώθηκαν η τεκμηρίωση και το parity harness, το επόμενο ζητούμενο ήταν το σωστό επίπεδο αυτονομίας. Η ομάδα, σε συνεργασία με τους μηχανικούς δεξαμενών του πελάτη, χρησιμοποίησε το δέντρο κλήσεων για να εντοπίσει ανεξάρτητα modules, δηλαδή σχετικά αυτόνομα υποδέντρα διαχειρίσιμου μεγέθους. Εμπειρικά, αυτά ορίστηκαν σε λιγότερες από περίπου 10.000 γραμμές Fortran. Έτσι το έργο χωρίστηκε σε κομμάτια που μπορούσαν να ελεγχθούν και να ολοκληρωθούν σταδιακά.
Κάθε module περνούσε από συγκεκριμένα βήματα. Πρώτα παραγόταν η αρχιτεκτονική-στόχος σε C++, έπειτα γινόταν ανασκόπηση με reservoir engineer και, όταν υπήρχε έγκριση, το module διασπώνταν σε ουρά επιμέρους εργασιών. Για κάθε εργασία ακολουθούσε επαναληπτικός κύκλος σχεδίασης, υλοποίησης και δοκιμών. Στο τέλος, άνθρωπος αξιολογούσε τα pull requests και ζητούσε αλλαγές μέχρι να είναι έτοιμα για συγχώνευση στο αποθετήριο.
Τα όρια της προσέγγισης και τα βασικά συμπεράσματα
Η πρώτη φάση του έργου κάλυψε τον βασικό πυρήνα λειτουργιών, δηλαδή 40.000 από τις συνολικά 300.000 γραμμές του συστήματος. Η Mistral επισημαίνει ότι το συγκεκριμένο Fortran codebase ήταν αυτοτελές και εκτελέσιμο, κάτι που αποτελεί ευνοϊκή αφετηρία. Σε λιγότερο οργανωμένα περιβάλλοντα, όπου υπάρχουν εξαρτήσεις από εξωτερικά συστήματα, απουσία εκτελέσιμης βάσης ή φυσική που δεν τεκμηριώνεται πουθενά, οι δυσκολίες θα ήταν σημαντικά μεγαλύτερες. Άρα, η συγκεκριμένη μεθοδολογία δεν παρουσιάζεται ως καθολική λύση, αλλά ως πρακτικό πλαίσιο για μια σχετικά ευνοϊκή κατηγορία έργων.
Από την εμπειρία αυτή, η εταιρεία ξεχωρίζει τρεις αρχές. Πρώτον, ο μηχανισμός ελέγχου ισοδυναμίας πρέπει να προηγείται της μετανάστευσης, επειδή η αριθμητική συμφωνία είναι ο πιο καθαρός τρόπος επαλήθευσης. Δεύτερον, η τεκμηρίωση πρέπει να οργανώνεται πριν αναλάβουν οι agents, καθώς δεν μπορεί να μεταφερθεί σωστά κάτι που κανείς δεν μπορεί να διαβάσει. Τρίτον, σε αυτή την κλίμακα, οι δομημένες ροές εργασίας με ανθρώπινα σημεία ελέγχου αποδίδουν καλύτερα από την πλήρη αυτονομία αλλά και από την καθαρά χειροκίνητη προσέγγιση.













