Newsgroups: comp.emacs,comp.editors,comp.os.ms-windows.programmer.tools
Path: gmd.de!newsserver.jvnc.net!yale.edu!nigel.msen.com!sdd.hp.com!
col.hp.com!news.dtc.hp.com!srgenprp!darrylo
From: darr...@srgenprp.sr.hp.com (Darryl Okahata)
Subject: GNU Emacs for MS-Windows and MSDOS
Sender: n...@srgenprp.sr.hp.com (News Administrator)
Message-ID: <C4vIHC.1G9@srgenprp.sr.hp.com>
Date: Fri, 2 Apr 1993 20:34:23 GMT
Reply-To: darr...@sr.hp.com
Organization: Hewlett-Packard / Center for Primal Scream Therapy
X-Newsreader: TIN [version 1.1 PL9.2]
Lines: 471

[ Here's yet another version of GNU Emacs that runs within Windows, but
  within a Windows DOS box. ]

     A preliminary version of "oemacs" has been made available via
anonymous ftp.  Oemacs is, basically, a version of GNU Emacs V18.59 that
will work inside a Windows 3.1 DOS box (note that it is NOT a native
Windows application, but works within a DOS box).  It is partially based
upon demacs, but is not compatible with it.

     At the end of this message, I've enclosed a copy of the file
"readme.dos", which describes the features and problems of oemacs.  READ
THIS BEFORE OBTAINING OEMACS.


***** Why would you want to use "oemacs"?  Because:

* It works within a Windows DOS box.  If you're feeling particularly
  masochistic, you can start more than one copy of oemacs, each in a
  different DOS box.

* It works with plain MSDOS or Windows 3.1.

* It fixes some bugs that demacs has.

* It is based upon GNU Emacs V18.59.

* It contains a few more useful emacs-lisp packages.  One or two of the
  existing emacs-lisp packages have been upgraded, like info.el.

* Pressing Ctrl-Break at *ANY* time will interrupt whatever Emacs is
  doing (assuming that it has not crashed and is not running
  "subprocesses").  With demacs, pressing Ctrl-Break just sends a C-c to
  demacs.

* It does not require an ANSI.SYS that allows the keyboard to be
  redefined.  Some versions of "ANSI.SYS" would crash if you tried to
  redefine the keyboard.


***** Why would you *NOT* want to use "oemacs"?  Because:

* It requires lots of RAM and lots of disk space.  In order to run
  within Windows, you need at least 8MB of motherboard RAM, and I
  recommend that you have at least 12-16MB.  You also need about 14MB of
  disk space to install oemacs, *NOT* including any space used to hold
  the .ZIP distribution files.  Demacs requires much less resources.

* It can take a while to start up (because it is not dumped, as is
  demacs).  On my 33MHz 486DX, it takes about 10 seconds to start up.
  Demacs starts up much faster.

* It doesn't handle large files very well.  Demacs works much better for
  this.  The biggest file that oemacs can handle is probably just under
  16MB (although I haven't tried this -- the largest file that I've
  tried editing is 5MB).

* It has a fixed internal stack size.  Any highly recursive emacs-lisp
  functions *might* fail with this version.  However, to minimize this
  problem, I've set the maximum stack size to 300KB.  A typical Emacs
  running on my (real ;-) workstation uses up 100-150KB of stack, and so
  I gave oemacs a stack twice that size.  The majority of people will
  probably never run into any stack problems, but you never know.
  Demacs doesn't have this problem.

* Subprocesses don't work inside Windows.  Then again, demacs doesn't
  work at all inside Windows.  "Subprocesses" in MSDOS are also
  asynchronous; you CANNOT DO ANYTHING while a subprocess is running.

* It is based upon GNU Emacs V18.59.  (Yes, this is both a "feature" and
  a "problem".)  A version by Pearl Software is based upon Lucid Emacs
  V19.


***** Where can you get a copy?

NOTE: please access the following ftp site during "off-hours" --
      sometime OTHER THAN 10AM-6PM EST (1500-2300 hours GMT/UTC).  The
      site adminstrators have graciously provided the disk space, and I
      don't want to annoy them by overloading their site with ftp
      requests.

     NOTE THAT THIS IS A PRELIMINARY VERSION!  BACKUP YOUR HARD DISK
BEFORE USING OEMACS!

     Oemacs is available via anonymous ftp from theory.lcs.mit.edu, in
/pub/emacs/oemacs:

-rw-r--r--  1 5536     toc          1065 Apr  2 16:15 README
-rw-rw-rw-  1 5536     toc       1077736 Apr  2 08:26 oemacs1.zip
-rw-rw-rw-  1 5536     toc       1089291 Apr  2 08:26 oemacs2.zip
-rw-rw-rw-  1 5536     toc       1094240 Apr  2 08:27 oemacs3.zip
-rw-rw-rw-  1 5536     toc        719295 Apr  2 08:27 oemacs4.zip

All four files have been compressed using the new .zip 2.0 format (you
can't use the old pkunzip programs), and must be extracted such that the
subdirectory hierarchy is preserved (i.e., give the -d flag to pkunzip).
Also, *ALL* four archives must be extracted in order to use this version
of Emacs; while some files are unnecessary, they must be manually
deleted (if you don't want them), after all of the files are extracted.
Complete sources and binaries, with the exception of GNU termcap, are
included.

     For a starting point, see the file "emacs-18.59/readme.1st".

     -- Darryl Okahata
	Internet: darr...@sr.hp.com

DISCLAIMER: this message is the author's personal opinion and does not
constitute the support, opinion or policy of Hewlett-Packard or of the
little green men that have been following him all day.

===============================================================================
				OEMACS
			     Release 1.0
			    Thu Apr 1 1993

     While I would have liked to have used the name "demacs" or
"demacs2", I didn't, because I don't want people thinking that this
version is compatible with demacs.  For reasons of ease-of-use and
ease-of-installation, this version is partially incompatible with
demacs.  In particular, the two versions cannot share the same "_emacs"
file (the "_emacs" file is the MSDOS equivalent of ".emacs").  The major
differences between oemacs and demacs are:

* Oemacs works within a Windows 3.1 DOS box.

* Oemacs does not require a memory manager like EMM386 or QEMM, although
  it is recommended that one be used.

* The _emacs files are different.  In oemacs, the _emacs file has been
  simplified and streamlined.  Demacs cannot use the oemacs' _emacs
  file, and oemacs cannot use the demacs' _emacs file.

* The terminal config files ("lisp/term/ibmpc.el") are different.
  Oemacs doesn't rely on reprogramming the keyboard mapping via
  ANSI.SYS.  Some versions of ANSI.SYS don't allow keyboard mapping, and
  some versions even crashed if this was attempted, and so oemacs uses a
  different method of keyboard handling.

* Oemacs doesn't have the NEMACS or FEPCTRL code merged into the Emacs C
  code.  I can't test these features, and so I didn't bother merging
  them in.  The merge was done by hand (and not via patch(1)), and so
  merging these untestable features would have added more work, which I
  didn't want.  The 8-bit support was kept, although it hasn't been
  tested much.

* Oemacs needs to load the emacs-lisp files at startup.  Demacs can be
  dumped, but oemacs cannot, and so oemacs needs to load the emacs-lisp
  at startup.

* Oemacs is based upon Emacs V18.59.  Demacs is based upon
  V18.55/V18.57.

* The version of dired that comes with oemacs has been modified, and
  will work only with oemacs.  This version of dired will not work with
  demacs.


Here is a list of features and non-features in oemacs:

* Oemacs works within a Windows 3.1 DOS box.

* Enhanced C++ support has been added.  Barry A. Warsaw's latest and
  greatest C++ mode has been added (including the "new syntax table" C
  code from Lucid V19 for better and quicker editing of C++/C comments).
  However, because DOS filenames cannot contain "+" characters, the
  filename has been renamed from "c++-mode.el" to "cpp-mode.el".

* You can press Ctrl-Break at any time to interrupt oemacs.  Note that
  the C-g key will only interrupt Emacs if Emacs is waiting for input.

* Added Sam Kendall's (kend...@CenterLine.COM) etags++ tags program,
  which generates etags for C++ programs, as well as C, lisp, scheme,
  TeX, and Fortran programs.  The DOS program name is "etags.exe".  See
  the sources in "emacs-18.59/tags.xx" for details.

* Better error message support.  If there's an error in _emacs, you'll
  get something a bit more useful than "error in init file".

* Fixed the bug where files on the command line had to contain names
  with forward slashes if they were not in the current directory.
  Filenames on the command line are now allowed to contain backslashes
  ("\") as directory separators.  Users of MSDOS filename completion
  programs (like 4DOS) can use them to complete filenames for Emacs.

  The primary fix for this is in `expand-file-name'; this function will
  now lower-case the filename, and convert backslashes to forward
  slashes.

* Fixed the bug where dired "randomly" displayed some file dates with a
  year (e.g., "1990") instead of a time (e.g., "14:53").  Now, dired
  will display the file's modification year if the file is
  *approximately* over six months old (the actual time is around six
  months plus or minus a day or two).  This is more like Unix.

* If Emacs runs out of memory, Emacs should get a "memory exhausted"
  error (however, I suspect that there are occasional corner cases where
  Emacs will crash).  If Emacs does get a "memory exhausted" error, I
  strongly recommend that you exit and restart Emacs.  Not only will
  this unfragment memory, but it will insure that Emacs' internal data
  structures are correct (which should be, but might not be, after a
  "memory exhausted" condition).

* If Emacs is improperly installed and `(load "loadup.el")' cannot be
  done or encounters errors, Emacs will display an error message, abort,
  and return to the DOS prompt.  Other versions of Emacs would simply
  start up an unusable (and nearly unquittable) Emacs.

* I strongly recommend that you have 12-16MB of RAM on your motherboard,
  and that you have a permanent swap large enough to give you at least
  16MB of free RAM after starting Windows 3.1.  Merely starting Emacs
  within a Windows DOS box sucks up FOUR MEGABYTES of (virtual) RAM.  I
  have no idea where the memory is going.  I've written some code to do
  malloc(3) instrumentation, to see where the memory is going, but Emacs
  is only allocating 200-300KB of RAM at startup.  I suspect that most
  of the RAM is being eaten by the DOS extender.  (Interestingly enough,
  running this version under plain DOS uses much less memory.)

  Also note that Emacs allocates memory in sizes that are a power of 2.
  If, for example, you try to edit a 5MB file, Emacs will attempt to
  allocate an 8MB chunk of memory to hold the file.  If you don't have
  that much memory left, Emacs will get a "memory exhausted" error.

* `M-x compile' does not work within a Windows 3.1 DOS box, while it
  does work outside of Windows.  If you try running Borland C++ 3.1 via
  M-x compile, the Borland compiler will hang.  If you try running the
  WATCOM C/386 compiler via M-x compile, Emacs will abort (you will lose
  *ALL* your work) after the compile/link has completed.  I suspect that
  this is a problem with the DOS extender (I can reproduce the problem
  with a small program that does nothing but execute system(2)), and so
  this problem will probably not get fixed.

  However, if you do `M-x compile' under plain MSDOS (which does seem to
  work), this version fixes the bugs in demacs 1.2.0 where the current
  drive is not saved.  Your compile process can now switch drives and
  change directories, and the current drive/directory will still be
  saved.  Also, as a special case, if the compile program is not on the
  current drive, the drive/current directory will be saved/restored on
  the drive where the compiled program is stored.

* I've had this version lock up if I tried to execute a built-in DOS
  command (e.g., "rmdir") via `call-process' (the dired "delete
  directory" command will fail without locking up Emacs, though).

* Running this version within a Windows 3.1 DOS box seems to cause
  Windows to disable the screen saver (if one is used).  I have no idea
  what is happening here.

* I left in the "int86" function.  Be careful using this function, as
  you can easily crash the system by passing incorrect or bad values.

* Because this version is compiled using WATCOM C/386 9.0, the maximum
  runtime stack size must be specified at link time (unlike demacs,
  whose stack grows as necessary).  In this version, the stack size is
  fixed at 300K (if you want this changed, you'll have to relink emacs).

* This version suffers from the NIH syndrome.  While much of the code
  was stolen from demacs 1.2.0, much of it wasn't.  I merged in, by hand
  (from diff -c), much of the MSDOS- and 8-bit-specific code, but left
  out the NEMACS and FEPCTRL (??) code.  This will probably make a lot
  of people unhappy.  However, I didn't want to introduce bugs by
  merging in code that I can't test, and so I didn't.

* Undump/unexec does not, and probably will never, work.  This means
  that you'll need mondo quantities of disk space to store ALL of the
  emacs-lisp files, and that starting Emacs will be SLOW.  You will need
  perhaps 5-10MB for a minimal Emacs installation.  On my 33MHz 486DX
  w/256KB cache, it takes about 10 seconds to start Emacs from DOS, and
  about 11 seconds to start from a Windows 3.1 DOS box.  Not fast, but
  bearable.

  This problem is caused by the fact that the DOS extender (DOS/4GW)
  that comes with WATCOM C/386 has an sbrk() that somehow returns some
  pointer values LESS THAN the ending address of the BSS space.  Can you
  say #define VIRT_ADDR_VARIES (for Emacs)?  Another related problem
  is that the addresses returned by the DPMI provider in Windows 3.1
  have some of the most significant bits set (e.g., 0x80000000 or
  0x81000000).  Can you say #define DATA_SEG_BITS with variable data
  segment bits (they vary between plain MSDOS and a Windows 3.1 DOS
  box)?  Ptuii.  This means that there's a potentially nasty situation
  that could occur if, in Windows, the DPMI provider starts returning
  pointers whose ~GCTYPEMASK bits vary; currently, Emacs will abort()
  if:

	(raw_pointer1 & ~GCTYPEMASK) != (raw_pointer2 & ~GCTYPEMASK)

  ("raw pointers" are pointers without the GC type bits.)  Great
  possibilities for DATA LOSS exist here (if Emacs aborts), and I'm not
  sure if this "problem" will ever get solved.  If this problem exists,
  it'll probably manifest itself as intermittent Emacs abort()'s
  (abortions?).

  However, I've tried editing 5MB files under Windows 3.1, and I haven't
  noticed any problems.

  I'd like to use djgcc, but I can't, until the djgcc DPMI issues are
  straightened out.

* While I have pruned out much of the unnecessary, often
  platform-specific code and other files, I haven't cleaned out the
  emacs-18.59/etc and emacs-18.59/lisp directories; these directories
  contain unnecessary and often useless files (as far as MSDOS is
  concerned).

* Unfortunately, this version does NOT work on Windows NT.  At one time,
  I thought that it might, but it doesn't.

* Instructions on compiling this version of Emacs has not been written.
  Everything that you need is here (except for the WATCOM C/386 C
  compiler, and the GNU termcap library).

* Some new emacs-lisp files were added.  Note that not all of the
  packages in the following list have been ported to MSDOS, if they need
  porting:

      + c++-mode.el (renamed to cxx-mode.el in this version)
	Barry A. Warsaw's C/C++ editing mode.

      + c-style.el
	This file allows you to configure sets of C code editing files.
	This is most useful if you have to edit C code in a number of
	different editing styles (e.g, different indentation, etc.).

      + header.el
	Add and maintain file headers.  This mode knows about C
	comments (as well as shell script/perl comments), and will
	insert an appropriately-commented-out file header.  When a file
	with a file header is saved, the modification time in the header
	is automatically updated just before the file is saved.

      + add-doc.el
	Appends user documentation to the end of the mode description.
	Normally, this would contain documentation about user
	enhancements/changes to the mode.

      + asm-mode.el
	A major mode for editing typical assembler code.

      + b-k-ring.el
	Browses the kill ring in another buffer.  Use C-y to yank most
	recent kill ring entry (number 1.) into the buffer which was
	current when browse-kill-ring was invoked.  Use a numeric
	argument (M-# C-y) to yank the corresponding entry.

	If you move point into the browse-kill-ring buffer, the keys
	C-y, y, Y, or SPC will yank the entry on the current line into
	the previous buffer.

	Note that browse-kill-ring should always be called before its
	contents is used; its buffer is not automatically updated when
	kills and yanks are done.  This is normally not a problem, since
	yanks will cause the buffer to be deleted automatically.

      + blink-mt.el	(was: blink-mtch.el)
	Yet another form of parenthesis-matching code.

      + c-com-ed.el	(was: c-com-edit.el)
	c-comment-edit is a command that copies a C comment into a
	temporary buffer for editing under a more suitable major mode
	(usually text-mode).  Once the comment is edited,
	c-comment-edit-end (normally bound to C-c ESC) replaces the old
	comment with the edited version, adding comment delimiters and
	leaders as necessary.  c-comment-edit is ideal for large
	comments of these styles:

		/*	/*	/*
		  ...	 * ...	** ...
		  ...	 * ...	** ...
		*/	 */	*/

      + c-doc.el
	This package allows you to:
	
	 1) Enter a description of a function, with its name, a module,
	    a file (normally taken to be the file the current buffer is
	    visiting), a documentation string (as large as you'd like),
	    the arguments (each with a name and a type and a
	    documentation string), and a result type.
	 2) Edit the description (i.e., any name, doc string, containing
	    module, etc.).
	 3) Get a buffer listing all functions/variables currently
	    defined, all functions residing in a given module, etc.
	 4) Get a buffer showing all the information on a given
	    function.
	 5) Read/write the documentation info from/to a file.
	 6) Visit a function's definition (basically a regexp on the
	    function's name within the defining file).  Kind of like a
	    tags visit, but driven from its own info.
	 7) Insert an (ANSI-compatible?) external decl of the function.
	    (Mostly works :-)).
	 8) Prompt for the arguments for a call to a given function,
	    showing argument types/names for each one.
	 9) Complete the symbol in front of point from the function
	    information.  (Like M-Tab, but again using its own table.)
	10) Read a function definition from C source, prompt for
	    documentation, and add it to the list.

      + completi.el	(was: completion.el)
	After you type a few characters, pressing the "complete" key
	inserts the rest of the word you are likely to type.
	
	This watches all the words that you type and remembers them.
	When typing a new word, pressing "complete" (meta-return)
	"completes" the word by inserting the most recently used word
	that begins with the same characters.  If you press meta-return
	repeatedly, it cycles through all the words it knows about.
	
	If you like the completion then just continue typing, it is as
	if you entered the text by hand.  If you want the inserted extra
	characters to go away, type control-w or delete.  More options
	are described below.
	
	The guesses are made in the order of the most recently "used".
	Typing in a word and then typing a separator character (such as
	a space) "uses" the word.  So does moving a cursor over the
	word.
	
	You automatically save the completions you use to a file
	between sessions.

      + edebug.tex
      + edebug.el
	Contains functions to allow the user to step through Emacs-lisp
	code (as a function is executed, the cursor moves over the
	source code).  Breakpoints can be set.	This is a much better
	Emacs-lisp debugger than the one that comes with GNU Emacs.

      + ereplace.el
	This source code replaces the emacs commands replace-string,
	replace-regexp, query-replace, and query-replace-regexp with a
	single command electric-replace-string.  While entering from
	string, the user can use keystrokes to toggle between replacing
	regexps and strings, or between query and noquery modes.  In
	addition, the user can choose to apply the replace over the
	entire (potentially narrowed) buffer, or over the entire region.
	Lastly, the user can yank the last string or regexp searched
	(depending on mode) to the from-string buffer.
	
	Quick summary:
	
	  C-h		Print this help message
	  C-r		Toggle between string/regexp replace
	  M-q		Toggle in and out of query replace mode
	  C-l		Toggle region mode (replace only in region)
	  M-a		Toggle full buffer mode
	  C-s		Yank the last string/regexp searched
	
	The key bindings are far from perfect.  Perfect bindings should
		a) not interfere with useful standard editing functions
		   (hence M-a and M-q instead of C-a, C-q).
		b) be reasonably mnemonic.

      + infer-mo.el	(was: infer-mode.el)
	Functions to infer the proper mode of a file from its contents,
	not from its file extension.

      + info.el
	A new version of the info file reader.

      + log-msg.el
	Have you ever been frustrated by not being able to read an emacs
	message because it gets overwritten by another message?  Then
	this package is for you.  By setting the user variable
	"log-messages" to non-nil, you can have the messages logged for
	you in the buffer "*Message Log*"

      + macedit.el
	A keyboard macro editor.  Very useful.  From GNU Calc.

      + minibuf.el
	Functions to grow/shrink minibuffer window so that all lines show.

Path: gmd.de!Germany.EU.net!mcsun!uunet!decwrl!bu.edu!nntp-read!jbw
From: j...@bigbird.bu.edu (Joe Wells)
Newsgroups: gnu.emacs.help,gnu.misc.discuss
Subject: Re: GNU Emacs for MS-Windows and MSDOS
Message-ID: <JBW.93Apr5203422@bigbird.bu.edu>
Date: 6 Apr 93 01:34:22 GMT
References: <9304022042.AA08053@hpnmxx.sr.hp.com>
Sender: n...@bu.edu
Followup-To: gnu.emacs.help
Organization: Boston University Computer Science Department
Lines: 16
In-reply-to: darrylo@hpnmxx.sr.hp.com's message of 2 Apr 93 20:57:42 GMT

In article <9304022042.AA08...@hpnmxx.sr.hp.com> darr...@hpnmxx.sr.hp.com 
(Darryl Okahata) writes:

[ Note: with the exception of the DOS extender, this version falls under
the GNU Public License. ]

[ Here's yet another version of GNU Emacs that runs within Windows, but
within a Windows DOS box. ]

Is the DOS extender linked with a distributed binary? Is this allowed by
the GNU General Public License?

??????

-- 
Joe Wells <j...@cs.bu.edu>
Member of the League for Programming Freedom --- send e-mail for details

Path: gmd.de!Germany.EU.net!mcsun!uunet!zaphod.mps.ohio-state.edu!
pacific.mps.ohio-state.edu!cis.ohio-state.edu!hpnmxx.sr.hp.com!darrylo
From: darr...@hpnmxx.sr.hp.com (Darryl Okahata)
Newsgroups: gnu.misc.discuss
Subject: Re: GNU Emacs for MS-Windows and MSDOS
Date: 7 Apr 1993 21:30:53 -0400
Organization: GNUs Not Usenet
Lines: 83
Sender: dae...@cis.ohio-state.edu
Distribution: gnu
Message-ID: <9304080124.AA09833@hpnmxx.sr.hp.com>

In gnu.emacs.help, Joe Wells (j...@bigbird.bu.edu) writes:

> In article <9304022042.AA08...@hpnmxx.sr.hp.com> darr...@hpnmxx.sr.hp.com 
(Darryl Okahata) writes:
> 
> [ Note: with the exception of the DOS extender, this version falls under
> the GNU Public License. ]
> 
> [ Here's yet another version of GNU Emacs that runs within Windows, but
> within a Windows DOS box. ]
> 
> Is the DOS extender linked with a distributed binary? Is this allowed by
> the GNU General Public License?

The DOS extender is a royalty-free, redistributable part of the C
compiler that I used (in this case, WATCOM C/386). The DOS extender is
part of the compiler's runtime environment, and is a separate
executable/program. Note that I do *NOT* have the source code for the
DOS extender.

The problem here is that the GPL seems a bit "vague" regarding
compiler libraries/environments. As far as the source code for my
version of GNU Emacs is concerned, the DOS extender is *NOT* necessary.
However, the machine code generated by the C compiler does require the
DOS extender.

Because the FSF has, in the past, allowed the distribution of
binaries that require the use of "libraries" which do not fall under the
GPL, I assumed that DOS extenders (which can be considered a form of
runtime "library") would pose no problems with the GPL. After all,
there is nothing in the source code that requires the presence of a DOS
extender; only the compiler-generated machine code requires it.
However, I'm not a lawyer, and could easily be wrong.

BTW, Pearl Software's Win-Emacs uses the same compiler that I use.
For Win-Emacs, the "DOS extender" has been bound into the executable
(here, "bound" means "merging"; it is very similar to, but is not the
same as, the process of linking). Unfortunately, only native Windows
programs can take advantage of "binding"; programs which run under MSDOS
or within a Windows DOS box cannot have the DOS extender merged into
them. [ In any case, the process of "binding" is only a subterfuge that
hides the fact that a proprietary DOS extender is being used. ]

If this is not allowed, then the only alternative is to completely
stop the distribution of this "free" software. Why? Read on.

It can be suggested that the problem can be solved by separating
the DOS extender from the Emacs distribution. Unfortunately, this
cannot be done, because the license for the DOS extender requires it to
be distributed WITH the binary produced by the compiler; it cannot be
separately distributed.

It can be suggested that a different compiler be used.
Unfortunately, I don't know of ANY other compiler that allows the
corresponding DOS extender to be separately distributed, and meets the
following (necessary) criteria:

1. Produces flat, 32-bit code that runs under MSDOS.

2. Produces code that runs within Microsoft Windows.

3. Has a DOS extender that is royalty-free, and can be redistributed with
compiled programs. There are other DOS extenders, but they either do
not work within Microsoft Windows, or are not royalty-free.

The MSDOS GCC fails criteria #2 above, and so I can't use it. [ And
please don't propose that I help modify the DOS GCC to work within
Microsoft Windows. While I *might* be able to do it, it would take a
couple of months of painful work, and I'm much rather go to the dentist
and have my mouth excavated, than do it. ]

I really hope that there's no problem distributing the DOS extender
as part of the Emacs package. If there is, I'll have to stop
distributing this version entirely, as I don't know of any other way to
meet the terms of the GPL. This would make a lot of people very
unhappy, and reduce the amount of "free" software. I want to write
"free" software, and I hope that the GPL won't hinder me.

-- Darryl Okahata
Internet: darr...@sr.hp.com

DISCLAIMER: this message is the author's personal opinion and does not
constitute the support, opinion or policy of Hewlett-Packard or of the
little green men that have been following him all day.

Path: gmd.de!ira.uka.de!sol.ctr.columbia.edu!zaphod.mps.ohio-state.edu!
magnus.acs.ohio-state.edu!cis.ohio-state.edu!gnu.ai.mit.edu!rms
From: r...@gnu.ai.mit.edu (Richard Stallman)
Newsgroups: gnu.misc.discuss
Subject: Re: GNU Emacs for MS-Windows and MSDOS
Date: 8 Apr 1993 02:05:00 -0400
Organization: GNUs Not Usenet
Lines: 18
Sender: dae...@cis.ohio-state.edu
Distribution: gnu
Message-ID: <9304080600.AA13497@mole.gnu.ai.mit.edu>
References: <9304080124.AA09833@hpnmxx.sr.hp.com>

I think your executable violates the GPL. As it stands, it is not
free software--it is a black box which users can only execute.

The purpose of the GNU project and the GPL is to spread free
software--which means, among other things, that *every* user has to
have access to the complete source code.

So, for now, you'll have to stop distributing this executable. You
can distribute the sources for the modified GNU program.

By the way, Pearl Software is also violating the GPL for various
reasons, as I've already announced. I've already taken this matter up
with them.

It might be possible to find a way to permit what you'd like to do.
I'm willing to discuss it with you to look for a way. But ensuring
the integrity of the GPL is paramount.

Path: gmd.de!ira.uka.de!scsing.switch.ch!news.univie.ac.at!
paladin.american.edu!howland.reston.ans.net!zaphod.mps.ohio-state.edu!
pacific.mps.ohio-state.edu!cis.ohio-state.edu!hpnmxx.sr.hp.com!darrylo
From: darr...@hpnmxx.sr.hp.com (Darryl Okahata)
Newsgroups: gnu.misc.discuss
Subject: MSDOS GNU Programs violate the GPL
Date: 8 Apr 1993 12:54:17 -0400
Organization: GNUs Not Usenet
Lines: 81
Sender: dae...@cis.ohio-state.edu
Distribution: gnu
Message-ID: <9304081649.AA22343@hpnmxx.sr.hp.com>
References: <9304080600.AA13497@mole.gnu.ai.mit.edu>

> I think your executable violates the GPL. As it stands, it is not
> free software--it is a black box which users can only execute.

It is not a black box. The sources to GNU Emacs are included, and
users need only a compiler with certain features (e.g., flat, 32-bit
linear address space). I know of two compilers that meet this criteria,
and there are probably others.

There is NOTHING in the SOURCE CODE that requires the use of a
proprietary library, etc.. The COMPILER-GENERATED BINARY, however, does
require a runtime program.

The key paragraph in the GPL (version 2) is:
------------------------------------------------------------------------------
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
-------------------------------------------------------------------------------

By the above paragraph, JUST ABOUT EVERY MSDOS PROGRAM VIOLATES THE GPL,
AND HAS DONE SO FOR YEARS. If you're worried about preserving the GPL,
you'd better stop the distribution of virtually all MSDOS executables
(with the probable exception of DJGCC-compiled executables).

Why? Because the word "accompany" (in the last sentence) is
somewhat vague. By "accompany", an argument can be made that, because
proprietary libraries are linked into a binary, the proprietary routines
*accompany* the executable, which means that the source code for the
proprietary routines must also be provided in order to preserve the GPL.
I can think of a number of MSDOS GNU programs (e.g., ghostscript) that
violate the GPL, and have done so for quite some time.

I'd say that proprietary libraries "go with" MSDOS executables:
-------------------------------------------------------------------------------
Word: accompany
ac.com.pa.ny \-(*-)ne_-\ vb
1: to go or occur along with : ESCORT, ATTEND
2: to play an accompaniment for
-- ac.com.pa.nist \-(*-)n*st\ n
-------------------------------------------------------------------------------

An argument can probably be made that, because the FSF has allowed
these MSDOS executables to be distributed for so long, the GPL may be
found null and void.

What is the reasoning behind the phrase "unless that component
itself accompanies the executable" in:
-------------------------------------------------------------------------------
However, as a special exception, the source code distributed need not
include anything that is normally distributed (in either source or
binary form) with the major components (compiler, kernel, and so on) of
the operating system on which the executable runs, unless that component
itself accompanies the executable.
-------------------------------------------------------------------------------

That last phrase is what's causing the problems. With MSDOS, compiled
programs may require "runtime components", which few users may already
have.

If you want to distribute "usable" software for MSDOS, you must
distribute binaries (in addition to the source code). If you don't,
only a small percentage of users will be able to use the program,
because only a small percentage of users have a compiler.

Is there any way that the GPL can be amended to handle the case
where a program DOES NOT REQUIRE a library/program to compile, but DOES
REQUIRE one to execute?

-- Darryl Okahata
Internet: darr...@sr.hp.com

DISCLAIMER: this message is the author's personal opinion and does not
constitute the support, opinion or policy of Hewlett-Packard or of the
little green men that have been following him all day.

Path: gmd.de!ira.uka.de!sol.ctr.columbia.edu!zaphod.mps.ohio-state.edu!
pacific.mps.ohio-state.edu!cis.ohio-state.edu!gnu.ai.mit.edu!rms
From: r...@gnu.ai.mit.edu (Richard Stallman)
Newsgroups: gnu.misc.discuss
Subject: Re: MSDOS GNU Programs violate the GPL
Date: 8 Apr 1993 16:23:24 -0400
Organization: GNUs Not Usenet
Lines: 46
Sender: dae...@cis.ohio-state.edu
Distribution: gnu
Message-ID: <9304082018.AA15154@mole.gnu.ai.mit.edu>
References: <9304081649.AA22343@hpnmxx.sr.hp.com>

There is NOTHING in the SOURCE CODE that requires the use of a
proprietary library, etc.. The COMPILER-GENERATED BINARY, however, does
require a runtime program.

Exactly. Thus, distributing the modified Emacs source code is
certainly legitimate; but distributing the executable raises a
problem, because the executable is (partly) a black box and users
cannot reconstruct it from the source.

I'd say that proprietary libraries "go with" MSDOS executables:

They do, but that question has nothing to do with what the GPL
permits.

The GPL exception is for proprietary libraries that accompany *the
components of the operating system*. Not for libraries that accompany
the executable.

There is no sense in which proprietary libraries that "go with" the
executable are on that account permitted for use in free executables.
Rather the reverse. The exception has an exception:

...operating system on which the executable runs, unless that component
itself accompanies the executable.

In longer words, this says: if the library comes with a component of
the operating system, but that component of the operating system comes
with the executable in question, then the library *may not* be used in
the executable (unless the library is free, of course).

This exception to the exception places an extra requirement on
operating system distributors, but not on anyone else. It blocks a
loophole that would permit various abuses if it were not blocked.


I suggest that people raise these issues with me in private if they
wish to do so constructively. In a private discussion, I can
entertain ideas tentatively, which is important for solving problems;
but it would be inadvisable for me to do this in public statements.

People who insist on posting rather than discussing the issue with me
should use gnu.misc.discuss. That's the mailing list/newsgroup which
is appropriate for such topics.

I urge all readers to take everything other people post about the
meaning of the GPL with a pound of salt.

Newsgroups: comp.emacs,comp.editors,comp.os.ms-windows.programmer.tools
Path: gmd.de!newsserver.jvnc.net!howland.reston.ans.net!usc!sdd.hp.com!
hpscit.sc.hp.com!news.dtc.hp.com!srgenprp!darrylo
From: darr...@srgenprp.sr.hp.com (Darryl Okahata)
Subject: Re: GNU Emacs for MS-Windows and MSDOS
Sender: n...@srgenprp.sr.hp.com (News Administrator)
Message-ID: <C56rIy.3Gu@srgenprp.sr.hp.com>
Date: Thu, 8 Apr 1993 22:23:21 GMT
Reply-To: darr...@sr.hp.com
References: <C4vIHC.1G9@srgenprp.sr.hp.com>
Organization: Hewlett-Packard / Center for Primal Scream Therapy
X-Newsreader: TIN [version 1.1 PL9.2]
Followup-To: comp.emacs,comp.editors,comp.os.ms-windows.programmer.tools
Lines: 18

Darryl Okahata (darr...@srgenprp.sr.hp.com) wrote:

> [ Here's yet another version of GNU Emacs that runs within Windows, but
>   within a Windows DOS box. ]

      I've had to temporarily (hopefully) withdraw this from public
distribution, as Richard Stallman has said that the current distribution
violates the GNU Public License, because it uses a proprietary DOS
extender (which is part of the compiler that is being used).  I'm
working with him to resolve this, and it will, hopefully, be resolved in
a couple of weeks.

     -- Darryl Okahata
	Internet: darr...@sr.hp.com

DISCLAIMER: this message is the author's personal opinion and does not
constitute the support, opinion or policy of Hewlett-Packard or of the
little green men that have been following him all day.

Path: gmd.de!newsserver.jvnc.net!howland.reston.ans.net!usc!
elroy.jpl.nasa.gov!decwrl!deccrl!news.crl.dec.com!random!
dialup.athena.lkg.dec.com!mills
From: mi...@athena.lkg.dec.com (George Mills)
Newsgroups: comp.emacs,comp.editors,comp.os.ms-windows.programmer.tools
Subject: Re: GNU Emacs for MS-Windows and MSDOS
Message-ID: <mills.734363106@dialup.athena.lkg.dec.com>
Date: 9 Apr 93 13:45:06 GMT
References: <C4vIHC.1G9@srgenprp.sr.hp.com> <C56rIy.3Gu@srgenprp.sr.hp.com>
Lines: 24

darr...@srgenprp.sr.hp.com (Darryl Okahata) writes:

>Darryl Okahata (darr...@srgenprp.sr.hp.com) wrote:

>> [ Here's yet another version of GNU Emacs that runs within Windows, but
>>   within a Windows DOS box. ]

>      I've had to temporarily (hopefully) withdraw this from public
>distribution, as Richard Stallman has said that the current distribution
>violates the GNU Public License, because it uses a proprietary DOS
>extender (which is part of the compiler that is being used).  I'm
>working with him to resolve this, and it will, hopefully, be resolved in
>a couple of weeks.

>     -- Darryl Okahata
>	Internet: darr...@sr.hp.com

>DISCLAIMER: this message is the author's personal opinion and does not
>constitute the support, opinion or policy of Hewlett-Packard or of the
>little green men that have been following him all day.

Regardless of the outcome and independent of this project. Can you
explain to us how you violated the GNU Public License. This may help
prevent anyone of us from making the same mistake.

Path: gmd.de!Germany.EU.net!mcsun!uunet!psinntp!crynwr!nelson
From: nel...@crynwr.com (Russell Nelson)
Newsgroups: gnu.misc.discuss
Subject: MSDOS GNU Programs violate the GPL 
Distribution: world
Message-ID: <734406663snx@crynwr.com>
References: <9304081649.AA22343@hpnmxx.sr.hp.com>
Date: Sat, 10 Apr 93 01:51:03 GMT
Organization: Crynwr Software
Lines: 42

In article <9304081649.AA22...@hpnmxx.sr.hp.com> darr...@hpnmxx.sr.hp.com writes:

The key paragraph in the GPL (version 2) is:
------------------------------------------------------------------------------
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
------------------------------------------------------------------------------- 
By the above paragraph, JUST ABOUT EVERY MSDOS PROGRAM VIOLATES THE GPL,
AND HAS DONE SO FOR YEARS. If you're worried about preserving the GPL,
you'd better stop the distribution of virtually all MSDOS executables
(with the probable exception of DJGCC-compiled executables).

This only applies to MSDOS programs that use a proprietary library.
For example, the Crynwr packet drivers are distributed with full source.

An argument can probably be made that, because the FSF has allowed
these MSDOS executables to be distributed for so long, the GPL may be
found null and void.

Probably not. A copyright is not like a trademark. A trademark can
be lost if it is not vigorously defended. That's why you see
"Band-Aid brand adhesive strips", and "Kleenex brand facial tissues".

The GPL would only be null and void if a precedent was set in court
that found the language unenforcable under copyright law. THAT would
be a problem.

What is the reasoning behind the phrase "unless that component
itself accompanies the executable" in:

You are correct. That is important to know. I believe the word
"component" refers to "compiler, kernel, and so on". In that case,
you are off the hook unless Waterloo C accompanies GNU Emacs for DOS.

-russ <nel...@crynwr.com> What canst *thou* say?
Crynwr Software Crynwr Software sells packet driver support.
11 Grant St. 315-268-1925 Voice | LPF member - ask me about
Potsdam, NY 13676 315-268-9201 FAX | the harm software patents do.

Newsgroups: gnu.misc.discuss
Path: gmd.de!newsserver.jvnc.net!howland.reston.ans.net!wupost!uunet!
news.cs.jhu.edu!jyusenkyou!arromdee
From: arrom...@jyusenkyou.cs.jhu.edu (Ken Arromdee)
Subject: Re: MSDOS GNU Programs violate the GPL 
Message-ID: <C5A62z.7Iu@blaze.cs.jhu.edu>
Sender: n...@blaze.cs.jhu.edu (Usenet news system)
Organization: Johns Hopkins University CS Dept.
References: <9304081649.AA22343@hpnmxx.sr.hp.com> <734406663snx@crynwr.com>
Date: Sat, 10 Apr 1993 18:30:34 GMT
Lines: 32

In article <734406663...@crynwr.com> nel...@crynwr.com (Russell Nelson) writes:
> The source code for a work means the preferred form of the work for
> making modifications to it. For an executable work, complete source
> code means all the source code for all modules it contains, plus any
> associated interface definition files, plus the scripts used to
> control compilation and installation of the executable. However, as a
> special exception, the source code distributed need not include
> anything that is normally distributed (in either source or binary
> form) with the major components (compiler, kernel, and so on) of the
> operating system on which the executable runs, unless that component
> itself accompanies the executable.
>This only applies to MSDOS programs that use a proprietary library.
>For example, the Crynwr packet drivers are distributed with full source.

You distributed them with source to the library too?

>You are correct. That is important to know. I believe the word
>"component" refers to "compiler, kernel, and so on". In that case,
>you are off the hook unless Waterloo C accompanies GNU Emacs for DOS.

On a Unix system, the compiler is a component of the OS. On an MSDOS
system, no compilers are components of the OS--you buy them all separately.
Not all compilers fall under the given category; only those compilers which are
components of the OS, and for MSDOS there is no such thing.
--
"On the first day after Christmas my truelove served to me... Leftover Turkey!
On the second day after Christmas my truelove served to me... Turkey Casserole
that she made from Leftover Turkey.
[days 3-4 deleted] ... Flaming Turkey Wings! ...
-- Pizza Hut commercial (and M*tlu/A*gic bait)

Ken Arromdee (arrom...@jyusenkyou.cs.jhu.edu)

Newsgroups: comp.emacs,comp.editors,comp.os.ms-windows.programmer.tools
Path: gmd.de!newsserver.jvnc.net!howland.reston.ans.net!usc!sdd.hp.com!
hpscit.sc.hp.com!news.dtc.hp.com!srgenprp!darrylo
From: darr...@srgenprp.sr.hp.com (Darryl Okahata)
Subject: Re: GNU Emacs for MS-Windows and MSDOS
Sender: n...@srgenprp.sr.hp.com (News Administrator)
Message-ID: <C5CG49.KIJ@srgenprp.sr.hp.com>
Date: Mon, 12 Apr 1993 00:02:32 GMT
Reply-To: darr...@sr.hp.com
References: <mills.734363106@dialup.athena.lkg.dec.com>
Organization: Hewlett-Packard / Center for Primal Scream Therapy
X-Newsreader: TIN [version 1.1 PL9.2]
Followup-To: comp.emacs,comp.editors,comp.os.ms-windows.programmer.tools
Lines: 30

George Mills (mi...@athena.lkg.dec.com) wrote:

> >      I've had to temporarily (hopefully) withdraw this from public
> >distribution, as Richard Stallman has said that the current distribution
> >violates the GNU Public License, because it uses a proprietary DOS
> >extender (which is part of the compiler that is being used).  I'm
> >working with him to resolve this, and it will, hopefully, be resolved in
> >a couple of weeks.
>
> Regardless of the outcome and independent of this project. Can you
> explain to us how you violated the GNU Public License. This may help
> prevent anyone of us from making the same mistake.

     The problem is that the compiled code uses a DOS extender, for
which sources are not supplied.

     Even though the sources to GNU Emacs are provided, which is enough
to recompile it, the DOS extender is causing problems.  Note that there
is nothing in the SOURCES that require that this DOS extender be used;
it is the code produced by the COMPILER that requires the DOS extender.
The DOS extender comes with the compiler, and so I don't have the
sources, and, even if I did have the sources, I couldn't redistribute
them because I would not be allowed to.

     -- Darryl Okahata
	Internet: darr...@sr.hp.com

DISCLAIMER: this message is the author's personal opinion and does not
constitute the support, opinion or policy of Hewlett-Packard or of the
little green men that have been following him all day.

Path: gmd.de!newsserver.jvnc.net!howland.reston.ans.net!usc!cs.utexas.edu!
uunet!pipex!uknet!uknet!cf-cm!cybaswan!iiitac
From: iii...@swan.pyr (Alan Cox)
Newsgroups: gnu.misc.discuss
Subject: Re: MSDOS GNU Programs violate the GPL
Message-ID: <1993Apr13.103303.4691@swan.pyr>
Date: 13 Apr 93 10:33:03 GMT
References: <9304081649.AA22343@hpnmxx.sr.hp.com> <734406663snx@crynwr.com> 
<C5A62z.7Iu@blaze.cs.jhu.edu>
Organization: Swansea University College
Lines: 38

In article <C5A62z....@blaze.cs.jhu.edu> arrom...@jyusenkyou.cs.jhu.edu 
(Ken Arromdee) writes:
>On a Unix system, the compiler is a component of the OS. On an MSDOS
>system, no compilers are components of the OS--you buy them all separately.
>Not all compilers fall under the given category; only those compilers which are
>components of the OS, and for MSDOS there is no such thing.

On a _FEW_ UNIX systems these days the compiler is a component of the OS.
Most no longer ship in that form, how about SCO (and don't suggest GCC because
gcc uses the SCO libraries only shipped with the SCO compiler and development
package - which isn't an OS component any more than Microsoft C is a DOS
component). What will happen about Univel and all the other systems. Lots of
people WANT to distribute GNU material in binary form and make sources 
available, but if each vendor has to sell the buyer a complete compiler
kit to compile the software from source because they can't supply the binaries
then the GNU project might as well just go bankrupt now rather than waiting
a year or two before its own thick headedness kills it off.

These issues need solving NOW, in fact not now but years ago. Once we get
into object based systems the current GPL becomes an unusable product
destined for /dev/null. When the OS is a few objects and everything is
built from groups of objects from assorted sources how can you even
define what constitutes a library needed by the application. This is
already true in some areas. A GPL'd graphic viewer using external 
libraries to proces .JPG .GIF etc is the classic example. How does it
know which external libraries it will be used with so that you can be
sure they are supplied with source. You can't distribute it without the
libraries because it need them, but you don't supply the libraries and
even if you gave source to some who knows who else might supply libraries
to these interfaces. 
You could argue that these components are not part of the program, in
which case I'll just define all my programs as needing a user 
supplied library to this spec .. where the spec is compatible with
XXX compiler suppliers C library.

>
>Ken Arromdee (arrom...@jyusenkyou.cs.jhu.edu)

Alan