The Acorvid Legacy Fortran Compatibility (ALFC) library has been created to assist in recovering legacy Fortran applications for which dependencies such as vendor or other proprietary libraries are no longer available.
Motivation for Development
This library has been developed to solve two main problems:
- compiling legacy Fortran code in a modern environment where legacy vendor libraries and extensions are no longer available, and
- assisting in refactoring away proprietary dependencies to ensure the copyright of the original proprietary routines is properly respected.
The main project goal is to allow applicaitons which depend on legacy, proprietary, or other 'problematic' libraries to be compiled without the problematic dependencies to assist in refactoring and revitalization. This does not ensure the resulting applications are efficient, robust, or correct, but the libraries should be, functional enough to allow compilation, testing, and refactoring.
To foster community development and long-term uptake, the ALFC library is
licensed under the MIT (
expat) License. See LICENSE.md for details. Licensing
questions may be addressed to the project maintainer.
Note that portions of the ALFC libraries depend on LAPACK. Routines from LAPACK are under src/lapack_x.y.z - these routines are unmodified from the original libnet sources and are covered separately by the LAPACK license, not the ALFC license. Redistribution of the LAPACK routines is intended as a convenience; no claim of ownership is made over LAPACK routines.
At present, three broad groups of libraries are supported:
- Sperry-Rand (UNIVAC) Large-Scale System Libraries (MATH-PACK and STAT-PACK)
- IBM Scientific Subroutine Package (SSP/1130 and SSP/360)
- Routines from Numerical Recipes
Legacy library compatibility graded into multiple levels: 0. Routines have been identified but have not been added to the compatibility library 1. Compatibility routines exist and have simple documentation (basic functional description). Arguments may not be complete, correct, or documented. Compilation may fail due to interface incompatibility. 2. Compatibility routines mimic the interface of the original library routines; argument type, dimension, and intent are consistent and all arguments are documented. However the routines are not functional, complete, or correct. They may however be suitable as 'mocks' for testing. 3. Routines perform the original function to an acceptable level of accuracy and efficiency
Numerical Recipes and IBM SSP routines are currently at level 0 (effectively known but not yet implemented even as stubs), Sperry MATH-PACK is at level 1 with several routines at level 2, and Sperry STAT-PACK is at level 1.
Version 0.1.0 of the library is written in standards-conforming Fortran 2008. While one might argue that a compatibility library of this sort should be targeted at the FORTRAN 66 or FORTRAN 77 standard, the overall intent of the ALFC is to support application modernization and revitalization rather than preserving legacy code in an unmodified, unmaintained, or abandoned state.
How do I get set up?
You'll need a recent Fortran compiler, preferably one that supports Fortran
gfortran or Intel's
ifort should work. Ideally the code
isn't compiler-dependent so as long as the compiler can digest the bulk of
Fortran 2008 (new intrinsic functions like
it should be okay.
A basic Makefile has been provided to build the libraries and link them to the
test executables. Ideally, the library will one day build with
and on Windows with
nmake and some flavor of Visual Studio or VS Code. At
present, consult the Makefile and your compiler documentation.
There are no dependencies at present however it is expected that many routines
will be thin wrappers around BLAS, ATLAS, or LAPACK routines from
No tests have yet been provided beyond a few special function checks for Numerical Recipes routines.
No example code or tutorials have yet been provided. The README file in the
src directory gives simple linux/gfortran build instructions
- Before code can be accepted into the project, a contributor waiver is necessary to assign copyrights and ensure code is contributed in a responsible and legal manner.
- Waiver/contibutor agreement is TBD
- This project will have a Code of Conduct (TBD). For now, the basic rule is to treat others with dignity & respect and find a way to disagree in a polite & civil manner. This is a volunteer project so to maximize everyone's enjoyment and satisfaction, abuse, hostility, personal attacks, and harassment will not be tolerated. Most people have no problem with this but there are always a few that ruin it for everyone else. Don't be that person.
Who do I talk to?
Questions or comments can be directed to the project maintainer, firstname.lastname@example.org