Favorite operating systems query (UNIX vs VMS flaming!!!)

Daniel R. Levy levy at ttrda.UUCP
Sat Jul 5 14:22:47 AEST 1986


In article <873 at rti-sel.UUCP>, rcb at rti-sel.UUCP (Random) writes:
>I promised myself that I was going to stay out of this annual OS debate.
>However, I weakened. So here it comes.
>In article <1000 at ttrdc.UUCP> levy at ttrdc.UUCP writes:
>>Oh yes, and along with those verbose commands goes a command line which can't
>>be over 255 characters long, and a library-archiver, compiler, and linker
>>which can't take wild cards.  Real nice when you have a 100-module program.
>The librarian and most compilers WILL take wildcards and have done so for
>some time. True the linker won't which is a bother. However, it would be nice
>if you check your arguments before posting them.

I owe the net an apology; I tried it again with the LIBRARY command and yes
(whew), it does work.  So it's easy to build libraries (and in all fairness
too, the LIBRARY command is quicker than the UNIX 'ar' when inserting modules
in the middle is involved).

However, as Random admits, it won't work with the linker, and contrary to what
he says, it won't work with "most compilers" (at least not "most compilers"
that I have had opportunity to use!).  e.g. (VMS 4.2):

$ SET DEFAULT [LEVY.C]
$ DIR

Directory UD6:[LEVY.C]

FILE1.C;1           FILE2.C;1           

Total of 2 files.
$ CC *.C
%CC-F-OPENIN, error opening UD6:[LEVY.C]*.C; as input
-RMS-F-WLD, invalid wildcard operation

$ SET DEFAULT [LEVY.FORTRAN]
$ DIR

Directory UD6:[LEVY.FORTRAN]

FILE1.FOR;1         FILE2.FOR;1         

Total of 2 files.
$ FORTRAN *.FOR
%FORT-F-OPENIN, error opening UD6:[LEVY.FORTRAN]*.FOR; as input
-RMS-F-WLD, invalid wildcard operation
%FORT-F-ABORT, abort
$ SET DEFAULT [LEVY.MACRO]
$ DIR

Directory UD6:[LEVY.MACRO]

FILE1.MAR;1         FILE2.MAR;1         

Total of 2 files.
$ MACRO *.MAR
%MACRO-E-OPENIN, error opening UD6:[LEVY.MACRO]*.MAR; as input
-LIB-E-NOWILD, no wildcard permitted
$ SET DEFAULT [LEVY.MODULA2]
$ DIR

Directory UD6:[LEVY.MODULA2]

FILE1.MOD;1         FILE2.MOD;1         

Total of 2 files.
$ MODULA *.MOD
%MODULA-F-IOERR, problem during Open operation for file UD6:[LEVY.MODULA2]*.MOD;
-RMS-F-WLD, invalid wildcard operation
$ LO
  LEVY         logged out at 28-JUN-1986 20:21:04.43

(Me:)
>>Most Unix programs will print out a line or so of "usage" diagnostics if you
>>invoke them with bogus arguments.  Do VMS programs do this?
>>
(Random:)
>
>No. VMS programs will not let you invoke them with bogus arguments. Since
>the arguments are parsed by DCL before the program is invoked, if you give
>too many parameters or an unknown switch DCL will reject it with an error
>message that points out the specific problem.

Ah now, if only DCL were smart enough to give a diagnostic which is a little
more "specific" than this:

$ SHOW USERS/BOGUS
%DCL-W-IVQUAL, unrecognized qualifier - check validity, spelling, and placement
 \BOGUS\

I'd much prefer to see something like this, which is from SysV:

$ who -BOGUS
who:  illegal option -- B
Usage:	who [-rbtpludAasHTq] [am i] [utmp_like_file]

r	run level
b	boot time
t	time changes
p	processes other than getty or users
l	login processes
u	useful information
d	dead processes
A	accounting information
a	all (rbtpludA options)
s	short form of who (no time since last output or pid)
H	print header
T	status of tty (+ writable, - not writable, x exclusive open, ? hung)
q	quick who

>
>>>
>>>2) The on-line Help is well-indexed, and it's HUGE. They've recently started
>>>   digesting the language references into Help entries; I rarely need
>>>   to page through a manual anymore.
>>Tell me, is there one for the Fortran under VMS 4.x?  On our 3.x VMS systems,
>>we did indeed have a detailed online help for Fortran, and we have such a
>>help now for C, but not for Fortran.  Did someone just forget to install it,
>>(system manager is baffled) or is it an "extra" (cost) item, or what?
>This is the fault of your system manager for not reading the installation
>document that came with the fortran compiler. There are really 2 distributions
>on the tape. One for fortran and one for the help and the help is even more
>extensive than the one on 3.x.

I owe somewhat of an apology for this flame, and will go beat on my system
manager to install the fuller HELP :-).

>>Unix online help need not be "HUGE" because the system interface isn't "HUGE."
>>I think VMS is marvelous from many user points of view (despite my criticisms
>>herein) but the system interface is a monstrous headache because of the
>>complexity.
>
>VMS online help is HUGE because it is complete. Unix help on the other hand...

Well, maybe I shouldn't say that UNIX help is so small.  (WARNING: LOTS OF
TEXT FOLLOWS!)

$ ls -sRC /usr/catman
total 3        1 a_man     1 p_man     1 u_man

/usr/catman/a_man:
total 7       4 man1     2 man7     1 man8

/usr/catman/a_man/man1:
total 559               2 errstop.1m.z       3 qasurvey.1m.z
   3 Uutry.1m.z         6 ff.1m.z            3 reboot.1m.z
   2 abt.1m.z           2 filesave.1m.z      2 rmv.1m.z
   3 accept.1m.z        4 finc.1m.z          7 rst.1m.z
   7 acct.1m.z          5 format.1m.z       10 runacct.1m.z
   5 acctcms.1m.z       4 frec.1m.z          3 sadp.1m.z
   6 acctcon.1m.z      13 fsck.1m.z          7 sar.1m.z
   3 acctmerg.1m.z      6 fscv.vax.1m.z      3 setmnt.1m.z
   4 acctprc.1m.z      10 fsdb.1m.z          3 setmrf.1m.z
  14 acctsh.1m.z        4 fts.1m.z           3 shutdown.1m.z
   3 acuset.1m.z        4 fuser.1m.z         3 ssr.1m.z
   5 bdblk.1m.z         5 fwtmp.1m.z         2 sta.1m.z
   4 brc.1m.z          12 getty.1m.z         3 sysdef.1m.z
   5 checkall.1m.z     17 init.1m.z          3 tic.1m.z
   3 chmap.1m.z         7 install.1m.z      12 trenter.1m.z
   3 chroot.1m.z        5 intro.1m.z         4 uucheck.1m.z
   3 clri.1m.z          2 ipb.1m.z           3 uucico.1m.z
   3 config.3b.1m.z     2 killall.1m.z       5 uuclean.1m.z
  17 config.dc.1m.z     2 link.1m.z          6 uucleanup.1m.z
   6 cpset.1m.z        13 lpadmin.1m.z       6 uugetty.1m.z
  15 crash.1m.z         4 lpsched.1m.z       3 uusched.1m.z
   3 cron.1m.z          4 mkboot.1m.z        5 uusub.1m.z
   4 dcopy.1m.z         7 mkfs.1m.z          3 uutry.1m.z
   3 devnm.1m.z         3 mknod.1m.z         4 uuxqt.1m.z
   3 df.1m.z            3 mount.1m.z         3 vcf.1m.z
   3 dfcvers.1m.z       5 msi.1m.z           3 vlx.1m.z
   8 dgn.1m.z           2 mvdir.1m.z         6 volcopy.1m.z
   5 diskusg.1m.z       3 ncheck.1m.z       48 vpmc.dec.1m.z
   3 dmkset.1m.z        4 newboot.1m.z      24 vpmc.u3b.1m.z
   6 don.1m.z           3 non-btl.1m.z       4 vpmsave.1m.z
   3 dskfmt.1m.z        3 pcldaemon.1m.z     6 vpmset.1m.z
   5 dstart.1m.z        2 prm.1m.z           5 vpmtest.1m.z
   3 errdead.1m.z       4 profiler.1m.z      2 wall.1m.z
   3 errdemon.1m.z      3 psel.1m.z          2 whodo.1m
   6 errpt.1m.z         3 pwck.1m.z

/usr/catman/a_man/man7:
total 194             3 hm.7.z           3 osm.7.z          2 tn4.7
   4 acu.7.z          4 hp.7.z           3 pcl.7.z          2 tn74.7.z
   2 cat.7.z          3 hs.pdp.7.z       2 prf.7.z          3 tn83.7.z
   2 dgn.7.z          5 ht.7.z           3 rf.pdp.7.z       2 tn85.7.z
   2 dmc.7.z          4 intro.7.z        3 rk.pdp.7.z       5 trace.7.z
   3 dmk.7.z          2 kl.pdp.7.z       3 rl.7.z           5 ts11.7.z
   7 dsk.7.z          4 kmc.7.z          3 rm80.7.z         2 tty.7.z
   2 du.pdp.7.z       4 lp.7.z           3 rp.pdp.7.z       5 tu78.7.z
   2 dz.7.z           2 mem.7.z          3 rp07.7.z         4 un32.7.z
   2 err.7.z          2 ml11.pdp.7.z     6 sxt.7.z          2 un53.7.z
   4 gd.7.z           7 mtc.7.z         31 termio.7.z       2 vp.pdp.7.z
   2 gt.7.z           1 null.7.z         5 tm.pdp.7.z      19 vpm.7.z

/usr/catman/a_man/man8:
total 181             23 780ops.8.z        2 intro.8           7 romboot.8.z
   7 3B20boot.8.z     14 crash.dec.8.z     6 ldtape.8.z        4 tapeboot.8.z
   5 3B20ops.8.z       9 crash.u3b.8.z    12 mk.8.z            3 unixboot.8.z
  13 70boot.8.z        6 diskboot.8.z     14 prm.8.z
  16 750ops.8.z       16 eai.8.z          24 rje.8.z

/usr/catman/p_man:
total 10      2 man2     5 man3     2 man4     1 man5

/usr/catman/p_man/man2:
total 339            2 getpid.2.z      3 pipe.2.z        2 sync.2.z
   4 access.2.z      2 getuid.2.z      5 plock.2.z       4 sys3b.2.z
   4 acct.2.z       41 intro.2.z       4 profil.2.z      2 time.2.z
   2 alarm.2.z       3 ioctl.2.z      12 ptrace.2.z      4 times.2.z
   4 brk.2.z         5 kill.2.z        5 read.2.z        3 ulimit.2.z
   3 chdir.2.z       4 link.2.z       10 semctl.2.z      2 umask.2.z
   5 chmod.2.z       4 lseek.2.z       2 semget.2.z      3 umount.2.z
   4 chown.2.z      10 maus.2.z       13 semop.2.z       3 uname.2.z
   3 chroot.2.z      6 mknod.2.z       2 setpgrp.2.z     4 unlink.2.z
   2 close.2.z       4 mount.2.z       3 setuid.2.z      3 ustat.2.z
   5 creat.2.z       7 msgctl.2.z      6 shmctl.2.z      5 utime.2.z
   3 dup.2.z         6 msgget.2.z      7 shmget.2.z      6 wait.2.z
  14 exec.2.z       15 msgop.2.z       7 shmop.2.z       5 write.2.z
   5 exit.2.z        3 nice.2.z       15 signal.2.z
   5 fcntl.2.z       8 open.2.z        7 stat.2.z
   5 fork.2.z        2 pause.2.z       2 stime.2.z

/usr/catman/p_man/man3:
total 616               5 getc.3s.z          4 nlist.3c.z
   3 a64l.3c.z          3 getcwd.3c.z        3 perror.3c.z
   2 abort.3c.z         2 getenv.3c.z        6 plot.3x.z
   2 abort.3f.z         2 getenv.3f.z        4 popen.3s.z
   2 abs.3c.z           6 getgrent.3c.z     15 printf.3s.z
   3 abs.3f.z           3 getlogin.3c.z      6 putc.3s.z
   2 acos.3f.z          6 getopt.3c.z        3 putenv.3c.z
   2 aimag.3f.z         3 getpass.3c.z       3 putpwent.3c.z
   2 aint.3f.z          3 getpw.3c.z         3 puts.3s.z
   2 asin.3f.z          7 getpwent.3c.z      3 qsort.3c.z
   3 assert.3x.z        3 gets.3s.z          2 rand.3c.z
   2 atan.3f.z         10 getut.3c.z         2 rand.3f.z
   2 atan2.3f.z        12 hsearch.3c.z      10 regcmp.3x.z
   4 bessel.3m.z        2 hypot.3m.z         3 round.3f.z
   3 bool.3f.z          2 iargc.3f          14 scanf.3s.z
   7 bsearch.3c.z       2 index.3f.z         6 setbuf.3s.z
   3 clock.3c.z         9 intro.3.z          4 setjmp.3c.z
   2 conjg.3f.z         3 l3tol.3c.z         3 sign.3f.z
   4 conv.3c.z          3 ldahread.3x.z      2 signal.3f.z
   3 cos.3f.z           5 ldclose.3x.z       3 sin.3f.z
   2 cosh.3f.z          4 ldfhread.3x.z      2 sinh.3f.z
   5 crypt.3c.z         6 ldgetname.3x.z     3 sinh.3m.z
   3 ctermid.3s.z       7 ldlread.3x.z       4 sleep.3c.z
   8 ctime.3c.z         4 ldlseek.3x.z       3 sputl.3x.z
   4 ctype.3c.z         3 ldohseek.3x.z      3 sqrt.3f.z
  23 curses.3x.z        7 ldopen.3x.z        6 ssignal.3c.z
   3 cuserid.3s.z       4 ldrseek.3x.z       6 stdio.3s.z
  10 dial.3c.z          5 ldshread.3x.z      5 stdipc.3c.z
   2 dim.3f.z           4 ldsseek.3x.z       2 strcmp.3f.z
   2 dprod.3f           4 ldtbindex.3x.z    10 string.3c.z
  13 drand48.3c.z       4 ldtbread.3x.z      4 strtod.3c.z
   5 ecvt.3c.z          3 ldtbseek.3x.z      4 strtol.3c.z
   3 end.3c.z           2 len.3f             2 swab.3c.z
   2 erf.3m.z           3 log.3f.z           2 system.3f.z
   3 exp.3f.z           3 log10.3f.z         3 system.3s.z
   5 exp.3m.z           2 logname.3x.z       2 tan.3f.z
   3 fclose.3s.z        7 lsearch.3c.z       2 tanh.3f.z
   3 ferror.3s.z        6 malloc.3c.z        2 tmpfile.3s.z
   3 floor.3m.z        10 malloc.3x.z        7 tmpnam.3s.z
   7 fopen.3s.z         9 matherr.3m.z       5 trig.3m.z
   5 fread.3s.z         3 max.3f.z          13 tsearch.3c.z
   4 frexp.3c.z         2 mclock.3f.z        3 ttyname.3c.z
   5 fseek.3s.z         6 memory.3c.z        2 ttyslot.3c.z
   6 ftw.3c.z           3 min.3f.z           3 ungetc.3s.z
   9 ftype.3f.z         2 mktemp.3c.z        5 vprintf.3s.z
   3 gamma.3m.z         3 mod.3f.z           5 vprintf.3x.z
   2 getarg.3f.z        6 monitor.3c.z

/usr/catman/p_man/man4:
total 313               6 fspec.4.z          5 passwd.4.z
  16 a.out.4.z          8 gettydefs.4.z      6 plot.4.z
  12 a.out.pdp.4.z     10 gps.4.z            2 pnch.4.z
   6 acct.4.z           2 group.4.z          4 profile.4.z
   7 ar.4.z            16 inittab.4.z        7 reloc.4.z
   3 ar.pdp.4.z         3 inode.4.z         13 sccsfile.4.z
   2 checklist.4.z      2 intro.4.z          4 scnhdr.4.z
   4 core.4.z           2 issue.4.z          7 syms.4.z
   4 cpio.4.z          12 ldfcn.4.z          8 system.4.z
   2 dir.4.z            3 linenum.4.z       10 term.4.z
  12 errfile.4.z        6 master.dec.4.z    80 terminfo.4.z
   4 filehdr.4.z        5 master.u3b.4.z     5 utmp.4.z
  12 fs.4.z             3 mnttab.4.z

/usr/catman/p_man/man5:
total 144            1 intro.5.z      14 mv.5.z          3 types.5.z
   4 ascii.5.z      14 man.5.z         4 prof.5.z        5 values.5.z
   4 environ.5.z     3 math.5.z       18 regexp.5.z      6 varargs.5.z
   6 eqnchar.5.z     3 mm.5.z          3 stat.5.z
   3 fcntl.5.z       9 mosd.5.z        5 term.5.z
  22 font.5.z        3 mptx.5.z       14 troff.5.z

/usr/catman/u_man:
total 9        1 local     7 man1      1 man6

[listings of local stuff deleted to save space]

/usr/catman/u_man/man1:
total 1666             4 diff3.1.z         2 machid.1.z        4 sno.1.z
   9 300.1.z           4 diffmk.1.z        4 macref.1.z       14 sort.1.z
   3 4014.1.z          2 dircmp.1.z       10 mail.1.z          9 spell.1.z
   5 450.1.z           5 dis.1.z          52 mailx.1.z         4 spline.1g.z
  12 acctcom.1.z       3 du.1.z           30 make.1.z          2 split.1.z
  26 adb.1.z           6 dump.1.z          4 makekey.1.z       4 sroff.1.z
  22 admin.1.z         3 dx9700.1.z        2 man.1.z          17 stat.1g.z
   8 ar.1.z            2 echo.1.z          2 mesg.1.z          5 strip.1.z
   6 ar.pdp.1.z       43 ed.1.z            2 mkdir.1.z         3 strip.pdp.1.z
   2 arcv.pdp.1.z     15 edit.1.z         10 mm.1.z           19 stty.1.z
   7 as.1.z            6 efl.1.z           5 mmlint.1.z        7 su.1.z
   5 as.pdp.1.z        3 enable.1.z        6 mmt.1.z           2 sum.1.z
   3 asa.1.z           2 env.1.z           6 net.1c.z          2 sync.1.z
   9 at.1.z           13 eqn.1.z          12 newform.1.z      12 tabs.1.z
  12 awk.1.z          21 ex.1.z            5 newgrp.1.z        4 tail.1.z
   2 banner.1          7 expr.1.z          4 news.1.z          8 tar.1.z
   3 basename.1.z      8 f77.1.z           2 nice.1.z          8 tbl.1.z
   7 bc.1.z            2 factor.1.z        7 nl.1.z            5 tc.1.z
   3 bdiff.1.z         3 file.1.z          8 nm.1.z            2 tee.1
  13 bfs.1.z           8 find.1.z          4 nm.pdp.1.z        6 test.1.z
  37 bs.1.z            3 fsplit.1.z        4 nohup.1.z         2 time.1.z
   2 cal.1.z           6 gdev.1g.z        12 nroff.1.z         5 timex.1.z
   3 calendar.1.z     26 ged.1g.z         18 ocw.1.z           7 toc.1g.z
   3 cat.1.z          31 get.1.z           3 od.1.z            2 touch.1.z
   2 cb.1.z            4 getopt.1.z        7 pack.1.z          3 tplot.1g.z
  12 cc.1.z            5 graph.1g.z        5 passwd.1.z        5 tput.1.z
   3 cd.1.z            5 graphics.1g.z     6 paste.1.z         5 tr.1.z
   9 cdc.1.z           3 greek.1.z        15 pg.1.z            6 troff.1.z
   7 cflow.1.z         7 grep.1.z          2 pic.1.z           2 true.1.z
   5 chmod.1.z         7 gutil.1g.z        7 pr.1.z            2 tsort.1.z
   2 chown.1.z         3 help.1.z          8 prof.1.z          2 tty.1.z
   2 cmp.1.z           6 hp.1.z           25 prs.1.z           3 umask.1.z
   6 col.1.z          13 hpio.1.z         12 ps.1.z            5 un53ctl.1c.z
   6 comb.1.z          2 hyphen.1.z        5 ptx.1.z           2 uname.1.z
   2 comm.1.z          2 id.1              2 pwd.1             3 unget.1.z
   6 convert.1.z       5 intro.1.z         5 ratfor.1.z        3 uniq.1.z
   4 cp.1.z            4 ipcrm.1.z         4 regcmp.1.z        4 units.1.z
   8 cpio.1.z         14 ipcs.1.z          6 rjestat.1c.z     13 uucp.1c.z
  15 cpp.1.z           5 join.1.z          3 rm.1.z            7 uustat.1c.z
   2 cprs.1.z          5 kasb.1.z          4 rmdel.1.z         6 uuto.1c.z
   7 crontab.1.z       3 kill.1.z          3 sact.1.z          9 uux.1c.z
   5 crypt.1.z        10 ld.1.z            6 sag.1g.z          6 val.1.z
   8 csplit.1.z        9 ld.pdp.1.z        8 sar.1.z          10 vc.1.z
   6 ct.1c.z          10 lex.1.z           4 scc.1.z          24 vi.1.z
  21 ctrace.1.z        2 line.1.z          3 sccsdiff.1.z      3 vpr.1.z
  16 cu.1c.z          15 lint.1.z         35 sdb.1.z           2 wait.1.z
   6 cut.1.z           5 list.1.z          5 sdiff.1.z         2 wc.1.z
   4 cxref.1.z         8 login.1.z        14 sed.1.z           3 what.1.z
   5 daps.1.z          2 logname.1.z      28 send.1c.z         9 who.1.z
   5 date.1.z          3 lorder.1.z       53 sh.1.z            6 write.1.z
   8 dc.1.z            7 lp.1.z            7 shl.1.z          18 x9700.1.z
   6 dd.1.z            5 lpstat.1.z        3 size.1.z         13 xargs.1.z
  12 delta.1.z        10 ls.1.z            2 size.pdp.1.z      6 yacc.1.z
   6 diff.1.z         15 m4.1.z            2 sleep.1.z

/usr/catman/u_man/man6:
total 49                2 hangman.6.z        6 reversi.6.z
   4 arithmetic.6.z     1 intro.6.z          5 sky.6.z
   3 back.6.z           3 jotto.6.z          2 ttt.6.z
   4 bj.6.z             2 maze.6             2 wump.6.z
   3 chess.6.z          2 moo.6.z
   6 craps.6.z          4 quiz.6.z

>>>
>>>4) The system services are logical, consistent, and well-documented. Anything
>>>   a utility can do, a user program can do too. (And if you want to tickle the
>>>   kernel, there *is* a thick manual on the system internals.)
>>
>>Could you then do me a favor.  Show me how, in Fortran, I would go about
>>setting the protection (no fancy ACL stuff, just basic RWED protections)
>>on a file which I am creating.  (In C it's easy enough, since the protec-
>>tion is specified when the file is created, which of course is tied to the
>>straightforward Unix way of doing things!)  Please show actual code, such as
>>a USEROPEN program, together with the OPEN() statement that calls it, to run
>>on VMS 4.2.  Or even show me how I can do it in assembler.  (I hesitate to
>>say show me how to do it in the system programming language, since Bliss-32
>>is an "extra-cost" [and not really very commonly used outside of DEC, unlike
>>C which is commonly used outside of Unix systems, let alone AT&T machines]
>>option which I don't have.  I think the analogy fair since that is what I
>>would probably do if I needed to change the protection of a Unix file from
>>Fortran [I would call chmod() in a C routine].)
>Since I don't write in fortran, I can't give you the exact details, but
>the useropen routine should allocate a protection XAB and link it to the FAB
>passed into the useropen routine. When the open occurs, the protection
>will be right.

Well, GEEEEEEEE.  With a [SYS,LIB]$EVERYTHING_UNDER_THE_SUN, surely there
MUST be a simpler way to do this (or is there?)  Some people have suggested
using LIB$SPAWN(...,'SET PROTECTION=(whatever) FILENAME.DAT',...)
or some system call to change default protections.
Trouble is that spawning is a major undertaking under VMS, and changing the
default protections in a program I am running has the nasty side effect of
leaving them that way for the next program I run (since from DCL all user
programs from one DCL session run as part of the same process).

>>See also my comments under 2) about the system interface.  It is massive,
>>complex, and cumbersome, as well as introducing kludges into common pro-
>>gramming languages, to be blunt.  VMS does indeed pride itself on
>>accessibility of system routines from "any" language, but this occurs at
>>the cost of kludgey extensions (like Fortran STRUCTUREs and RECORDs and
>>%val()s and %loc()s) to common programming languages, that a user would
>>actually WANT to program in.  C, which is a fairly common, "ordinary"
>>programming language and sees wide use and portability even in non-Unix
>>environments, fits the UNIX system interface very naturally and needs no
>>such kludges to use it.  (It is commendable that DEC has seen fit to switch
>>rather than fight, and has provided an extensive UNIX-like interface to
>>the VMS system within C.)
>Fortran structures, records, etc. do not exist for the purpose of kludgey
>interfaces to system routines. They exist to enhance fortran's capabilities.
>Structures and records provide better programming practices and %val and
>%loc allow rather sophisticated pointer operations to be done.

Ah, but if those weren't there I'd say it would have a hard time indeed
communicating with the OS.  Also the %val and %loc and structure and record
stuff guarantees incompatibility with any other Fortran in the world.
It might be a nice programming language, but it is a superset of Fortran
and should be called such.

>>>
>>>5) VMS, she doesn't die, she doesn't break, she doesn't lose files, she
>>>   just keeps running along. It's pretty trustworthy.
>>
>>Oh yes, remember the security hole in VMS 4.1 about a nonprivileged user
>>being able to crash the system by entering certain line-editing sequences
>>in response to a prompt (involving ^B and some other escape codes).  I
>>succeeded in doing this once from DCL, and we have a plain VMS system, no
>>special private kernel drivers installed.  VMS 4.2 also kicked the bucket
>>on me the other week when I was trying to access the help library.  The
>>system just barfed, and the console dump contained my process name.  And
>>I wasn't even trying any funny business or having any special privileges.
>>Needless to say, Unix has never done this kind of thing.
>>
>Would you mind also including the list of unix kernal bugs that can be activated
>by any user to kill the system. Assuming that there is disk space to keep the
>list. The above bug makes a good example for you to point to because it
>stands out. The reason it stands out is because it is the ONLY bug of it's kind
>I have ever seen since about version 2.5

Oh yes, you want ANOTHER bug?  What about that ordinary users can make the
VMS approximation of "links" (SET FILE/ENTRY) to system files even if they
cannot write or read them.  Then if a process with proper privileges blows
these links away, VMS in its infinite wisdom blows away the CONTENTS of the
files as well as the entry!  This is not an "accidental" bug either, like the
^B bug was.

As for UNIX kernel bugs, I accept the challenge.  Any and all interested,
please send me C code which I can compile and run as a nonprivileged user
on SysVR2 to crash a 3B2, a 3B20, or a VAX, and I will either try it myself
(3B2) or submit it to people I know (and trust) to try it on the other
machines.

>Before you get the idea that I am a rabid UNIX hater, I actually like some
>features of unix. I prefer VMS for it's consistancy, reliability and
>versatility. There are many unix emulators on VMS because it has the power
>and flexability to do a lot of different things easily. I have never seen
>a VMS emulator on unix however. And as for the good things about unix,
>I have ported or duplicated them on VMS so that I now have the best of both
>worlds.
>--
>					Random (Randy Buckland)
>					Research Triangle Institute
>					...!mcnc!rti-sel!rcb

Yes, a UNIX emulator under VMS is improving things.  A VMS emulator under UNIX?
That would be an interesting research project, but what good would it do?...
(And it would of course only work on VAXen.  Forget about Amdahls, 3Bs, Pyra-
mids,...)

The VMS and UNIX paradigms are as different as night and day.
-- 
Daniel R. Levy
AT&T Computer Systems Division, Skokie, Illinois
..!ihnp4!ttrdc!levy



More information about the Comp.unix mailing list