AT&T's Korn Shell Source Code Released
Henk Langeveld writes, "This announcement can be found at kornshell.com:
March 1, 2000: I am happy to annouce the the 'i' point release
of ksh93 is now available for download. For the first time, source
is available as well as binaries for several architectures. If
you build binaries for new architectures, and send them to us, we can add
them to the download site. The download
page has been completely revised in a manner that hopefully will be
easier to use. ksh93 is part of the ast-open package. tksh
(ksh with tk support) is also part of this package. -- David Korn
As a long-term fan I'm glad to see the korn shell now being released under a new license. The license is quite non-standard, and does include some restrictions (changes can only be distributed as patches), but as far as I can see it does allow anyone to bundle binaries with their products. The distribution format is quite non-standard. The research group at AT&T has their own packaging system, built around nmake. "
As a long-term fan I'm glad to see the korn shell now being released under a new license. The license is quite non-standard, and does include some restrictions (changes can only be distributed as patches), but as far as I can see it does allow anyone to bundle binaries with their products. The distribution format is quite non-standard. The research group at AT&T has their own packaging system, built around nmake. "
nmake is not Microsoft nmake, it is the AT&T Bell Labs next-generation make that is way better than standard UNIX make: parallel builds, include file scanning, coshell (instead of fork/exec for every shell command), distributed build support, compiled makefiles, state tracking from one build to the next, etc., etc., etc. When originally developed, it helped cut build times for the AT&T 5ESS switch from 3 days down to 1. http://www.bell-labs.com/project/nmake/
ksh is actually quite servicable in the absense of a better one, as long as you apply the right magic to your .shrc or whatnot. To get some decent command line editting do a 'set -o emacs', to get the arrow keys etc to work
alias __A=`/bin/echo "\020"` # Up
alias __B=`/bin/echo "\016"` # Down
alias __C=`/bin/echo "\006"` # Right
alias __D=`/bin/echo "\002"` # Left
alias __H=`/bin/echo "\001"` # Home
alias __p=`/bin/echo "\004"` # Delete
alias __q=`/bin/echo "\005"` # End
alias __z=`/bin/echo "\017"` # Clear
(The previous works on Solaris, it might need some tweaking for different forms of echo) Unfortunately, I don't know of an easy way to get TAB to do filename completion (the default is ESC ESC) Would I rather use ksh than bash? No. But, there are a lot of times when getting ksh to work nicely is easier than getting bash onto the machine in question.
Not that I don't like bash, but ksh is what I use at work and what I used for years prior to encountering using Linux for the first time. But perhaps my habits have become restricted to only the functions that the two hold in common. ;)
I've never really looked closely at the differences between bash and ksh but the question that occurs to me is this: has bash overtaken ksh in functionality to the point that this release is now too late to matter?
Geeky modern art T-shirts
This reminds me of the article posted a while ago on the original Unix source code being available. Something like "Open source in history"? Ah , here it is. Anyway, kind of sad that it took this long for one of the best shells to be released. I'm not blaming David Korn, it's a great shell and I'm sure he did what he thought was most responsible for AT&T to do with it. Heck, I'm completely willing to believe that it took this long to convince his bosses that it would be a good idea from a standpoint of actual improvement to the code. I don't see anything on the web site as to why they decided to release , although "free for non-commercial and educational use" is not exactly what I'd call "free source"...
Walt
Walt
I read all the comments related to AT&T's Korn Shell Source Code Released
y not)
/dev/tcp/hostname/portno with redirections.
posting and decided to provide some additional information that
should clear up so many misconceptions. I will also try to get a FAQ
on the kornshell.com site to clarify many other points as well.
First of all, I would like to thank they authors of bash, pdksh,
and zsh for their valuable contributions. I have tried to
provide information on changes to ksh so that these shells
could add these features in a compatabile way.
I will respond to some of the comments here:
1. Too little too late. This may or may not be true, but it
is irrelevant. At this point, it's too early to make such
a statement -- the user community will decide. I would have
prefered to make this OpenSource from the beginning but I did
not have this option. It has taken a lot of effort to get
this source released at all. Note that ksh93 is only a
part of this AT&T open source distribution and that there are
tools that have no other UNIX/LINUX equivalent.
2. bash is much better than ksh.
These comments have no information that would make them
meaningful without specific examples. What version of ksh
and what version of bash? I am interested in hearing which
features of bash are missing from ksh93 (see point #5).
3. zsh is better than ksh.
Although zsh has an impressive set of features,
it is not POSIX compatible making it difficult to write
portable scripts. I am interested in hearing from zsh
users what *language features* are missing in ksh93
(I am aware of most of the interactive enhancements).
4. tcsh is better than ksh.
Irrelevant. tcsh is based on csh, which is generally agreed
not to be a good scriping language. So why compare it?
See "csh programming considered harmful" by Tom Christiansen
(http://www.faqs.org/faqs/unix-faq/shell/csh-wh
5. There are some features in ksh93i that some users seem to be
unaware of. Several of these are not in bash, zsh, or pdksh.
a. File and command name completion (using tab in viraw mode).
b. Key binding (arrow keys work on most systems by default).
c. Process substitution, e.g. command1 ( command2 )
d. Ability to connect to tcp or udp connections using
e. Complete ANSI-C floating point arithmetic, including
math functions.
f. Complete ANSI-C printf formatting with several extensions
including date/time foratting using %T.
g. ANSI-C string input using $'...'. (I believe zsh has this).
h. Associative arrays.
i. Extended regular expression matching/replacement including
backreferences for shell variables.
j. Runtime loading of extensions including builtins.
There is an API for referencing ksh93 internals.
k. Active variables. The ability to associate processing
functions with shell variables (similar to traces in tcl).
l. Compound objects, useful for implementing data structures.
m. Reference variables for passing variables by name.
n. The shell is written as a library that can be reused
in other commands. For example, dtksh which combines
ksh93 with X11 and Motif, and tksh which combines
ksh93 with tcl/tk.
5. Confusion about the licensing terms.
The kornshell.com home page hasn't been updated yet so it still
contains outdated references to commercial and educational
uses. There is no such distinction. The license does
allow for commercial distribution of binaries and/or source.
We do not have OSF certification as of yet, but I do think
that the license satisfies all of the OpenSource principles.
The license does not have the GNU GPL restrictions.
6. nmake is not Microsoft nmake.
It certainly is not. It is simply the best make program
that I have every seen. The Makefiles are consice and
protable. No makefile or dependency generators are needed.
It can generate both UNIX makefiles and Microsoft nmake
files for systems that do not have AT&T nmake.
What's really funny is that I've been to USENIX conferences with Dave and he's worn "Korn" T-shirts. I about died the first time I saw him doing this.
Actually, even more funny was when I was at the USENIX Windows NT symposium a few years ago. The Microsofties were up on stage talking about their Unix toolkit for Windows NT. This includes several common Unix commands (ls, cp, ps, etc.) along with a version of ksh. Dave stood up and went to the microphone and mentioned a few areas of incompatibility with the version of ksh used in the Unix toolkit for Windows NT. The Microsofties, not realizing who they were talking to, kept going back and forth with him, insisting that their version of ksh actually did comply with the AT&T ksh, and sort of implying that Dave (who they still didn't recognize) didn't know what he was talking about. Nearly everybody in the audience was laughing out loud, and eventually somebody let the Microsofties in on who exactly they were talking to.
But for scripting, I always use ksh (on Solaris). Why? The ksh syntax is a superset of the original Bourne Shell, and therefore pretty much a superset of the Bourne Again Shell.
bash primarily adds readline support which makes it super-easy to use interactively. readline doesn't do much for non-interactive scripts.
In the Korn shell, the typeset comand provides a number of extra features for things such as presenting non-decimal numbers, and converting from upper case text to lower case and vice versa.
Another way cool feature of ksh is `|&` which is a way of getting a pipe to a background process. I guess they call it co-processes, but it really make a client/server process. I guess you can also call it a bi-directional pipe. You can then use `read` and `print` to send and receive stuff from the "server" started with `|&`. For example, if I need to do floating point math, I can start `bc` in the background with `|&`.
I think what we need is a ksh with readline support added. Bourne Again Korn Shell! (Maybe spell "Bourne" as "Born)
I discussed the ksh source release with David Korn a while back, including the point that it was probably too late. He seemed to think that the original still had some features not available in pdksh or elsewhere.
Thanks
Bruce
Bruce Perens.
- a "you must monitor our web site" clause
- a "you are responsible for ensuring that people you distribute the software to comply with this license" clause
- a "you must contact us if you distribute patches" clause
- an unilateral-termination clause
- a "you must adhere to U.S. law" clause
The 'ensure that others comply' and the 'Termination clause' seem very non-free, the others are only very annoying (especialy if you don't have easy internet access and live outside the US).AT&T shares fell in early trading after the popular band "Korn" announced a lawsuit for trademark infringement. "It's obvious they're using our name. Who would have thought of spelling corn with a "K" except us?" commented a lawyer for the band. AT&T declined to comment on the suit.
I'm trying to teach myself to set people on fire with my mind... Is it hot in here?