[Info-vax] VMS Features I Wish Linux Had

lawrencedo99 at gmail.com lawrencedo99 at gmail.com
Thu Jun 9 23:37:24 EDT 2016


My first exposure to Unix systems was at the peak of my DEC-fanatic period. While there were benefits to the Unix way of doing things, there were also limitations. And some of those limitations carry right through to Linux systems today.

The most obvious one is trouble with async I/O. In VMS, I/O requests and process dispatch are entirely separate mechanisms. $QIOW, for example, is just a user-mode wrapper around an async $QIO followed by whatever it is they used to replace the original simplistic $WAITFR call. Whereas the traditional POSIX read, write and other I/O calls are entirely blocking. Though their behaviour has been refined somewhat with the introduction of threads: now they just block the requesting thread, rather than the entire process.

Linux does have async I/O calls. But it still carries the legacy of the intertwining of I/O requests and process dispatch, which puts limits on what those async calls can do. No doubt this will be sorted out as time passes. History repeats, doesn’t it?

The other one is the terminal driver. My first impression of Unix was what a crap terminal driver it had, that echoes everything as soon as it’s typed. Seems like no other system has seen fit to emulate the thoughtful VMS feature of not echoing anything until it is actually being recognized as input to a program. And of course note the versatility of IO$_READPROMPT--you could do all your terminal I/O with just this one call!

That concept of a “character device”, that reads and writes in units of bytes rather than I/O requests, has been carried on into Linux today. While it is a good idea elsewhere, I wish the terminal driver architecture didn’t have to be so tightly tied into that limitation.

Many interactive utilities on Linux use a library called GNU Readline. This gives you an interactive prompt with command-line editing, persistent searchable history and so on. But it cannot automatically refresh the current line if anything (like output from another process) should overwrite it--you have to manually trigger that yourself.

Anyway, just some random thoughts.



More information about the Info-vax mailing list