This is version 1.0.0 of my implementation of the OpenVMS ODS-5 file system for Linux. It can read OpenVMS On Disk Structures (ODS) version 2 and 5. Here the Linux file system is named 'ods5', references to the OpenVMS file systems are 'ODS', 'ODS-2' or 'ODS-5'. The ODS file system is also known as 'Files 11'. The Linux ods5 file system is read-only and there's no plan to change that.

The major work for version 1.0.0 was to fix a few bugs and to support UTF-8 filenames (and the usual adjustments to current kernels).

The Linux implementation of the file system is based on the description in Kirby McCoy (1990), VMS File System Internals, Digital Press, ISBN 1-55558-056-4 and on publicly available header files.

VMS files can be structured in records, VMS supplies the Record Management Services (RMS) to allow record oriented I/O. The Linux ods5 file system supplies a tool to display RMS file attributes, rats, and a tool to copy RMS records, copr.

You can try out the filesystem with a kernel module in ods5.zip for TinyCorePure64 version 15.
There are no new features or bug fixes in this version, only adjustments/changes for recent Linux kernels. TinyCorePure64, release 15, contains a 6.6.8 kernel.
To use the kernel module, extract ods5.ko from the archive and load it with "$ insmod <path-to>ods5.ko". Then mount the VMS disk as usual. See the description for mount options, especially if the mount fails to find the ODSx home block at LBN 1 of the device.
The zip archive also contains a debug version of the kernel module and the tools to copy and/or look at files on the ODSx disk. Additionally there are two tools to look at or extract from VMS backup save sets.
As known, the Linux kernel is a moving target and not being in any kernel mailing list makes it difficult to include the necessary changes in a timely fashion. It very much depends on what I use. I just moved away from Debian Bullseye with a 5.10 kernel.

You can also try the filesystem with a Tiny Core Linux iso image. Just burn and boot the remastered ISO image of Tinycore 9.0, with the ods5 kernel module.
For more info on this distribution, see Tiny Core Linux.

Current limitation: Exporting an ods5 files system with nfs is not supported. This limitation may be lifted, sometime.

Limitation: Using an disk image file from an ods5 volume for a Linux loop device is supported, but may not work for older kernels. The error 'ioctl: LOOP_SET_FD: Invalid argument' indicates that there is no support in ods5 required by the loop driver in such kernels.

Limitation: In general, ods5 can be used with stackable unification file systems such as aufs, unionfs-fuse and unionfs. However, aufs does not forward ioctl or getxattr calls, which are used by the ods5 tools rats and copr. That is, here you can not retrieve the RMS file attributes, which are required to do a record based copy of the file content. The unionfs-fuse supports forwarding of getxattr but only if it was compiled with HAVE_SETXATTR. The unionfs seems to forward both calls, but I have no current version of it to do some testing.

Limitation: ODS Volume sets are not supported.

Known incompatibility: On VMS, following a symbolic link depends on the process context. The context can be case blind or case sensitive. In a case blind context a link to "hello" can be followed to the file "HELLO.;1". A Linux process is always case sensitive and will not follow such a link.

Please note that ODS-5 filenames are sorted in the directories. You want to use "ls -U" to keep the ODS-5 sorting. The ODS-5 sort is caseblind in uppercase. Therefore 'x' comes before 'Y' and 'z' before '_'.

How the Linux ods5 looks like, an overview.

What you can do with it.

List of ods5 specific mount options

Comparing the OpenVMS ODS and the Linux ods5 file systems.

Design and Implementation notes.

Any question, suggestion, bug report? Send an email to: ods5 dot info at vms2linux dot de.