VMS Python compatibility issues
From VSI OpenVMS Wiki
File system
- Directories and files with the same name are allowed
- Files have versioning, therefore two files with the same name might have different content
- Shared stream I/O does not work
- To guarantee the file content is on the disk the
fsync()
function must be used
- Because files can be referenced using logical names the real file path may be different from the “path” used to open a file
- Files has no access time attribute
- Changing a files permissions also changes its modification time
- Changing the content of a directory does not change the directory modification time.
- Files have four rights bits (read, write, execute, and delete); Linux (UNIX) has only three (read, write, and execute)
- The ‘.DIR’ extension is reserved
- Non-blocking file IO is not supported by the OpenVMS CRTL
- There are various known issues with symbolic link implementation
- The symbol '$' is commonly used in file and directory names
- On OpenVMS chmod(0) sets the user's default permissions as opposed to resetting permissions
- To delete a directory the user has to have ‘delete’ permission for the directory
- On OpenVMS
mkdir()
creates all intermediate directories (if required)
Process
- There are no Linux-like
fork()
and spawn()
functions
- Pipes are created via mailbox and are not totally compatible with UNIX pipes (compatibility issues)
- If a child process has threads, each thread posts 'END-OF-PIPE' when the child completes/terminates
- The functions
select()
and poll()
work only with sockets
- The function
siginterrupt()
is not supported
- Numerous compatibility issues with signals
- Interrupting I/O operations may cause the process to hang
- There is no root user with zero UID
- Processes do not handle recursion overflow cleanly
Sockets
AF_UNIX
has somewhat different meaning
- Binding a socket to an empty address fails (wildcard resolved to multiple address)
getpeername()
returns ‘0.0.0.0’ instead of an error
socket.socket.sendall
does not work correctly (process may crash)
Time
time_t
is unsigned
strftime()
- Does not support
%G
format
- Exhibits undefined behavior when format ends with
%
%4Y
is padded with spaces
Miscellaneous
- There is no appropriate way to programmatically get all environment variables (logical names and/or symbols)
- The current OpenVMS port of sqlite3 does not support "OR ROLLBACK"
locale.strxfrm()
does not work as expected
Compiler
uint_ptr
is always 64-bit, void*
is either 32-bit or 64-bit (depending on selected pointer size)
- Compiler does not support relative include paths