Difference between revisions of "VMS Python compatibility issues"

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

Latest revision as of 07:50, 1 July 2021

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)

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

Sockets

  1. AF_UNIX has somewhat different meaning
  2. Binding a socket to an empty address fails (wildcard resolved to multiple address)
  3. getpeername() returns ‘0.0.0.0’ instead of an error
  4. socket.socket.sendall does not work correctly (process may crash)

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

Miscellaneous

  1. There is no appropriate way to programmatically get all environment variables (logical names and/or symbols)
  2. The current OpenVMS port of sqlite3 does not support "OR ROLLBACK"
  3. locale.strxfrm() does not work as expected

Compiler

  1. uint_ptr is always 64-bit, void* is either 32-bit or 64-bit (depending on selected pointer size)
  2. Compiler does not support relative include paths