VMS Python compatibility issues

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