C-Kermit 7.0

Communications Software for UNIX, VMS, VOS, AOS/VS, QNX, Plan 9, Amiga, . . .

This page last updated: 1 Jan 2000


As of 1 January 2000, C-Kermit 7.0 is in release. The web pages are being updated; at present they should be considered under constructions. The links in this file, even they they seem to point to test versions or areas are actually to the final release, although some text files might change. The remainder of this page is left over from the Beta test period. Hopefully all will be sorted out in a day or two.

C-Kermit is a combined serial and network communication software package offering a consistent, medium-independent, cross-platform approach to connection establishment, terminal sessions, file transfer, character-set translation, numeric and alphanumeric paging, and automation of communication tasks.

The current version of C-Kermit is 6.0, released in September 1996:

C-Kermit 7.0 entered public Beta testing January 30, 1999, as Beta.04. Beta.11 was released on 5 December 1999:

C-Kermit is:



We are working on a new, less restrictive license for C-Kermit 7.0.

CLICK HERE To read the current draft license.

Here's a brief summary:

Personal or Internal Use:

C-Kermit is freely downloadable by individuals for their own use and by organizations (companies, universities, government agencies, hospitals, etc) for internal use. (As always.)


We also ask (but do not require) those who download C-Kermit from the net or receive it as part of another package to also purchase the user manual to (a) let you get the most out of the software; (b) reduce the load on our help desk; and (c) contribute some revenue to the nonprofit and entirely self-supporting Kermit Project.

NOTE: Beta-test versions are only for testing, not for licensing, redistribution, or production use. The new license is subject to revision, and will apply to C-Kermit 7.0 when it is released.

In response to those who wonder why C-Kermit itself is not totally free of restrictions on redistribution, it is simply because commercial C-Kermit licenses are a major component of the revenue that pays for the Kermit Project; without this revenue, we wouldn't be here.



Although C-Kermit and Kermit 95 share much of the same code base, they are not the same product. Each has features not found in the other; for example, Kermit 95 has built-in terminal emulation and integrated XYZMODEM protocol, whereas in C-Kermit these functions are accomplished externally. C-Kermit supports X.25 connections on certain platforms but K-95 does not support X.25. And so on. Each Kermit 95 release incorporates the Kermit file-transfer, command parsing, scripting, and certain other features of the current C-Kermit program (and thus the syntax of scripts is identical). Obviously, the platform-specific aspects are different; CLICK HERE for details on scripting.



Features that show up as links are described in greater detail below. The others (and many more) are described in the text file, ckermit2.txt. Items marked New are new to the latest Beta edit.



Making and Using Connections

New Built-In Modem Types

File Transfer and Management


Character Sets


Script Programming

Bug fixes

New platforms

This is just a brief list; the complete story runs to more than 200 printed pages, and can be found in the ckermit2.txt file, which is a supplement to Using C-Kermit, 2nd Edition.

For even more detail, you can read the day-by-day edit history in the ckc196.txt file, as well as all the Alpha and Beta test announcements in the ck61*.txt and ck70*.txt files in the kermit/test/text/ directory.

The following sections present an overview of several of C-Kermit 7.0's new features. After these come links to the software itself.



In UNIX and Windows 9x/NT, C-Kermit 7.0 can be set up as an Internet daemon under inetd, similar to an FTP server, using a TCP port and Telnet options assigned for this purpose by the Internet Assigned Number Authority (IANA) and described in Internet Drafts currently under review:


The Internet Kermit Service Daemon (IKSD) can be accessed in client/server mode from any Kermit client (similar to how FTP works), but can also be accessed directly at its prompt, which opens up a whole new world of automation possibilities. Other advantages over FTP include:

(*) Some FTP servers also support this. Kerberos and SRP available only in the USA and Canada.

Note that timestamps, permissions, text/binary mode switching, and directory tree transfer are not restricted to UNIX-to-UNIX connections, but also work with Kermit clients on other platforms including Windows 95/98/NT, OS/2, and VMS (as appropriate -- e.g. permissions don't apply to Windows).

A prototype IKSD is available for public access at:

  kermit.columbia.edu 1649

Anonymous logins are welcome: give a user ID of "anonymous" or "ftp", and supply your email address as the password. You may log in interactively on a Telnet connection:

  telnet kermit.columbia.edu 1649
  Username: anonymous
  Password: abc@xyz.com

Or you can make a client/server connection as follows:

  set host kermit.columbia.edu 1649  
  remote login anonymous abc@xyz.com

When you use C-Kermit 7.0 itself as the client, you will have a new "tight coupling" between client and server, in which each partner tracks the "mode" of the other (prompt, connect, server, etc). When you make an anonymous connection to this server, you will find yourself in the /pub/ftp tree, and can access any directories or files you could access with anonymous FTP to same server.




The UNIX version of C-Kermit 7.0 can now be used through any other communications program whose user interface goes through standard input and standard output. In addition, most of the UNIX versions can also control external programs via pseudoterminals, like 'expect'.

This allows you (for example) to use all the scripting and file transfer features of C-Kermit through clients of various services that C-Kermit might not support directly like an ssh client, tn3270 (for connecting to IBM mainframes), tn5250 (for AS/400 connections), various SOCKS Telnet clients, a cu or tip program that has access to a dialout device that Kermit does not, rlogin connections without being root. The commands are PIPE (for standard i/o redirection) and PTY (for pseudoterminals). Examples:

  pipe cu -l tty04
  pipe rlogin xyzcorp.com
  pipe srp-telnet xenon.stanford.edu
  pty ssh abccorp.com
  pty tn3270 cics.bigiron.com

PIPE is more portable but won't work with applications that don't use standard i/o, and it bypasses the terminal driver, which can result in CR/LF/CRLF confusion, inappropriate keyboard handing or echoing, etc. PTY is less widely available, but it allows you to control any text-mode application at all, and it does so through the terminal driver, thus bypassing the problems with PIPE.

In fact, the PTY interace lets you script interactions with any local text-mode program: your shell, lpc, Lynx, IRC, various text editors, and so on. This feature is available (as of Beta.11) in FreeBSD, NetBSD, OpenBSD, BSDI, Mac OS X, AIX 4.1 and later, DG/UX 5.4R4.11, Digital UNIX 3.2 and 4.0, HP-UX 9.00 and later, IRIX 6.0 and later, Linux, NeXTSTEP 3.x, QNX 4.25, SCO OSR5.0.5, SCO Unixware 7, SINIX 5.42, Solaris 2.x and 7, and SunOS 4.1.3.



UNIX C-Kermit can be built with support for MIT's Kerberos IV or Kerberos V, Stanford University's Secure Remote Password (SRP) protocol, or SSL/TLS security.

These protocols allow for mutually authenticated Telnet connections without sending passwords over the network, and optionally also for fully encrypted sessions. The encryption modules are not part of the regular C-Kermit package due to USA export law. If you are in the USA or Canada and you are interested in testing Kerberos, SRP, or SSL/TLS, CLICK HERE to download the security modules, or send us e-mail.

SSL/TLS is the IETF-approved form of public-key security, an alternative to SSH that is free of patent restrictions and that addresses the key-management and revocation issues that SSH presents. C-Kermit 7.0 Beta.11 supports the OpenSSL implementation of SSL/TLS, which allows pure SSL or TLS based connections with Tim Hudson's Telnet AUTH SSL and the IETF's Telnet START_TLS protocols, including verification of certificate chains for both client and server, and support for certificate revocation lists. A Unix telnet server that supports Telnet START_TLS is available from:


SSL/TLS connections may also be used to connect to Secure Web Servers for use with the new HTTP commands:

  SET HOST host https /SSL
  SET HOST host https /TLS

or between two C-Kermits to establish a private connection:

  SET HOST * port /SSL             <--- Server
  SET HOST host port /SSL          <--- Client

Why not SSH?

There are two incompatible SSH protocols, v1 and v2. We don't support SSH version 1.x for a combination of legal and security reasons:

SSH version 2.x is not supported because:

[Top][Download][Documentation of security features]


A new suite of HTTP commands lets you manage Web servers with C-Kermit using HTTP 1.0 protocol. You can get and put files, obtain information about them, and so on, even when you could not ordinarily do so with FTP or Kermit (for example, because no FTP or IKSD server is installed on the Web server), and when you have the SSL/TLS option installed, you can do so securely.



C-Kermit 7.0 includes a new Telnet protocol engine incorporating:




The new EXEC command (Unix only) lets Kermit overlay itself in memory with an external program, starting this program with the given command-line options. EXEC /REDIRECT takes this one step further, redirecting the external program's standard i/o to Kermit's communications connection. You can use this feature to turn Kermit into your PPP dialer, which gives you all the advantages of C-Kermit's knowledge of modems, phone numbers, area and country codes, etc, and its dialing-directory and redialing capabilities. Example:

  ask \%u { User: }
  askq \%p { Password: }
  set modem type usr          ; Specify the kind of modem you have
  set line /dev/ttyS1         ; Specify the device it's connected to
  set speed 57600             ; and the speed
  set flow rts/cts            ; and flow control.
  set dial retries 100        ; Try the dial sequence up to 100 times.
  dial {{9-212-555-1212}{9-212-555-1213}{9-212-555-1214}{9-212-555-1215}}
  if fail exit 1
  for \%i 1 16 1 {            ; Try up to 16 times to get login prompt
      input 10 Login:         ; Wait 10 sec for it to appear
      if success break        ; Got it - proceed...
      output \13              ; Send a carriage return and try again
  if ( > \%i 16 ) stop 1 NO LOGIN PROMPT
  lineout \%u                 ; Send user ID
  input 30 assword:           ; Wait for Password prompt
  if fail stop 1 NO PASSWORD PROMPT
  lineout \%p                 ; Send the password.
  exec /redirect pppd         ; Replace ourselves with pppd.
Notice the advantages over the well-known PPP "chat script":



As of version 6.1, C-Kermit allows for optional command modifiers called switches.

A switch is a keyword beginning with a slash (/). Some switches accept values as operands. Switches affect only the command with which they are included; thus their affect is local, not global like SET commands. Here are some examples:

  send oofa.txt                              ; No switches
  send /binary oofa.zip                      ; A switch without a value
  send /protocol:zmodem oofa.zip             ; A switch with a value
  send /text /delete /as-name:x.x oofa.txt   ; Several switches
Switches bring a new level of flexibility to Kermit's command language. For example, they can be used for file selection in file-transfer commands:
  send /after:8-Feb-1998_10:28:01 /larger-than:10000 /except:*.log *.*
or for disposition of the source file after transfer:
  send /binary /delete *.zip
or for mailing or printing:
  send /mail /subject:{Here is the recipe you wanted} lasagna.txt 
  send /print:{-PLaserWriter2 -#3} lasagna.ps
or whether to pass the file through a filter, or to descend directories recursively, or to recover an interrupted transfer from the point of failure, and so on, in any sensible combination.

Switches have been added not only to the SEND command, but also to most other file-transfer commands, as well as to the CONNECT, SET LINE, SET HOST, DIRECTORY, DELETE, PURGE, TYPE, RENAME, COPY, STATISTICS, and others. Certain commands including DIRECTORY, DELETE, PURGE, and TYPE let you set default switches to match your preferences so you don't have to type them each time.



A pattern is a string that includes special notation for matching classes or sequences of characters. C-Kermit 7.0 / K95 1.1.18 supports patterns in several places:

Patterns are also called wildcards, especially when used for filename matching, as they are in the UNIX version and in K-95 1.1.18. C-Kermit 7.0 supports the following notation:

Matches any sequence of zero or more characters. For example: "ck*.c" matches all files whose names start with "ck" and end with ".c", including "ck.c".

Matches any single character. For example, "ck?.c" matches all files whose names are exactly 5 characters long and start with "ck" and end with ".c". When typing commands at the prompt, you must precede any question mark to be used for matching by a backslash (\) to override the normal function of question mark, which is providing menus and file lists.

Square brackets enclosing a list of characters matches any single character in the list. Example: ckuusr.[ch] matches ckuusr.c and ckuusr.h.

Square brackets enclosing a range of characters; the hyphen separates the low and high elements of the range. For example, [a-z] matches any character from a to z.

Braces enclose a list of strings to be matched. For example: ck{ufio,vcon,cmai}.c matches ckufio.c, ckvcon.c, or ckcmai.c. The strings may themselves contain metacharacters, bracket lists, or indeed, other lists of strings.



C-Kermit 7.0 and its derivatives (including Kermit 95 1.1.18 and later) go to extraordinary lengths to transfer every file in the most appropriate mode, text or binary, automatically. Only in a few rare cases will the automatic methods fail to determine the appropriate mode for a particular file. When they do, however, it is almost always better to use binary mode, since this leaves the file intact and unchanged, rather than changing its characters or record format, and allows for recovery in case of broken transmissions. For this reason, the default file type (that is, the one that is used in the absence of any other information or instructions) in C-Kermit 7.0 has been changed from text to binary.

Of course you can change the default back to text simply by giving a SET FILE TYPE TEXT command (or putting it in your C-Kermit customization file) and you can also override the default and/or the automatic methods on a per-transfer basis (by using the new /BINARY and /TEXT switches on the SEND and GET commands) or even a per-file basis (by creating a SEND-LIST).

Also with this change comes the new SET FILE INCOMPLETE AUTO command, also the new default, which causes incompletely received files to be kept for binary-mode transfers and discarded for text-mode ones, since the main reason to keep incompletely received files is to allow recovery, which is possible only for binary-mode transfers.



C-Kermit 6.1 and later (and Kermit 95 1.1.16 and later) automatically choose the appropriate transfer mode, text or binary, for each file they send by following a rather complex procedure, which includes end-to-end "like system" recognition, whether character-set translation has been requested, and other factors. When the two ends recognize each other as "alike" (e.g. both are some form of UNIX) and character-set translation has not been requested, all files are transferred in binary mode. This improves performance, removes any possibility of "corruption" by inappropriate character-set or record-format conversions, and allows for recovery of interrupted transfers.

When the two systems do not recognize each other as alike, or character-set translation has been requested, the file sender chooses text and binary mode on a per-file basis by matching each file's name with a list of patterns. For example, if a file's name matches the pattern "*.txt" it is sent in text mode, whereas if it matches "*.zip" it is sent in binary mode. A comprehensive list of patterns is preconfigured, and commands are provided for you to edit the list, as well as to disable or re-enable this feature.

Filename pattern matching allows a file group to be sent between unlike systems (e.g. from UNIX to VMS) without having to separate the text and binary files, with full record-format and character-set conversion performed on text files, and binary files transferred without conversion, automatically. (NOTE: The filename pattern-matching feature is not used in VMS C-Kermit, which has a different method of accomplishing the same thing.)



The UNIX and VMS versions of C-Kermit 7.0 now include each file's permissions (protection code) among the transmitted file attributes. This is useful mainly in UNIX, so avoid loss of "execute" permission for programs or shell scripts during transfer. However, the mechanism also works across platforms so, for example, a UNIX file with execute permission will also have execute permission after being transferred to VMS (and vice-versa).



C-Kermit 7.0, when used in conjunction with Kermit 95 1.1.16 or later, MS-DOS Kermit 3.16 or later, or C-Kermit 7.0 itself, can perform "recursive" file transfers, in which all the (selected) files in the given directory are sent, plus all the files in all the subdirectories of the given directory, and all the files in their subdirectories, and so on.

Such transfers can take place not only between computers with similar file systems (such as Solaris and AIX), but also between dissimilar systems (like Windows 95 and HP-UX or VMS). Directories are created as needed during the transfer process.

Furthermore, any mixture of text and binary files can be accommodated via filename-pattern matching, as described in the previous section. This allows, for the first time anywhere (as far as we know) transfer of entire directory trees (entire file systems if you start at the root) between dissimilar computers in a single operation without the use of intermediate archives such as tar or ZIP.



In some versions of C-Kermit 7.0 (notably the UNIX version) it is now possible to pass outbound or incoming files through a "filter" as part of the transfer process. Similarly, it is now possible to send the output of an arbitrary command or program, or to receive into the standard input of a command or program. For example, you may now tell C-Kermit to send the output of a pipeline composed of tar and gzip, and another C-Kermit on the other end to receive to a pipeline composed of gunzip and tar. Or in case you have a text file written in a character set that C-Kermit doesn't know about, you can pass it through a translation filter. You can even use this feature to accomplish encrypted file transfers on connections that are not already encrypted otherwise.



File-transfer performance has been improved in several ways:

Streaming protocol may be used in conjunction with Kermit 95 1.1.16, MS-DOS Kermit 3.16, or C-Kermit 7.0 itself.

When full unprefixing and streaming are used with a large packet length, C-Kermit's file-transfer throughput is comparable with FTP; here are some typical text and binary file transfers between two UNIX workstations with the new C-Kermit over a local 10Mbps Ethernet (note the new brief file-transfer display option, the automatic switching between binary and text mode, and the new more-accurate statistics):

 SENDING wart     (binary)   (23985 bytes): OK (0.040 sec, 599625 cps)
 SENDING wermit   (binary) (1323517 bytes): OK (4.490 sec, 294769 cps)
 SENDING ckcnet.c (text)    (269168 bytes): OK (0.790 sec, 340718 cps)
 SENDING ckwart.o (binary)   (25332 bytes): OK (0.040 sec, 633299 cps)
 SENDING ckufio.c (text)    (112341 bytes): OK (0.290 sec, 387382 cps)
 SENDING ckuusr.o (binary)  (132340 bytes): OK (0.180 sec, 735222 cps)
 SENDING ckuus2.o (binary)  (183168 bytes): OK (0.300 sec, 610559 cps)
 SENDING ckuus3.o (binary)  (154492 bytes): OK (0.200 sec, 772459 cps)
 SENDING ckuus6.o (binary)  (133128 bytes): OK (0.180 sec, 739599 cps)

C-Kermit 7.0 also responds much more quickly to connection loss and external interruptions during file transfer.



C-Kermit has included performance features like long packets for more over a decade, with others (sliding windows, control-character unprefixing, and now streaming) added over the years. Nevertheless, the popular perception is still that "Kermit is slow". This is due in part to the many third-party implementations that, indeed, are slow, as well to the persistence of fifteen-year-old Kermit programs from the Kermit project itself.

Of course modern Kermit protocol and software (since about 1990) can go as fast as you care to make it go, but its default tuning has always been for robustness rather than speed. It turns out, unfortunately, that first impressions matter most. If it's slow out of the box, few will make the effort to learn how to make it go fast, or to understand why it is delivered with slow tuning.

Therefore C-Kermit 7.0 is delivered with fast tuning:

Let's hope the new default tuning helps to get the word out.



Kermit software, a pioneer in international text transfer since the 1980s, now adds Unicode (ISO 10646) -- the Universal Character Set (UCS) -- to its already large repertoire of character sets. Unlike traditional character sets, the UCS encodes all of the world's major scripts, and therefore allows true multilingual text.

Kermit protocol and software has included character-set translation capabilities for more than a decade, allowing conversion of text among the many "traditional" standard and proprietary character sets like the ISO 8859 Latin Alphabets, PC code pages, IBM mainframe EBCDIC code pages, ISO 646 national character sets, JIS, DEC, HP, DG, Macintosh, NeXT, etc.

With growing acceptance of Unicode, there is increasing need for importation of text in "traditional" encodings into Unicode platforms and applications, and also for export of Unicode text to non-Unicode environments. C-Kermit now offers these services over a wide range of platforms and communication methods.

Obviously when translating from Unicode to a smaller set, Unicode characters that are not in the smaller set are lost.



You can obtain the current C-Kermit 7.0 Beta test in any of several archive formats via anonymous ftp by clicking on the following links:

Source code and text files for UNIX and VMS, UNIX tar archive, compress format.
Source code and text files for UNIX and VMS, UNIX tar archive, gzip format.
Source code and text files for UNIX and VMS, ZIP archive (text files in DOS format). NOTE: In VMS, use "unzip -aa" = "treat ALL files as text files".
Source code and text files for VMS, ZIP archive (text files in DOS format).
Source code and text files for Stratus VOS, ZIP archive (text files in DOS format).
Source code and text files for OS-9, ZIP archive (text files in DOS format).

These archives contain complete UNIX and VMS source code as well as documentation updates, installation instructions, hints and tips files, initialization files, scripts, demos, etc.

Those who wish to follow developments on a daily basis can access the current working source code, updated (usually) each day:

Beta-test versions of Kermit 95 1.1.18 (based on C-Kermit 7.0) are available upon request to registered users of K-95. Send requests by email to kermit-support@columbia.edu with a subject of "K95 IKS BETA REQUEST". Include your K-95 serial number and current version number in the body of the letter.

Trouble with FTP?
o CLICK HERE for FTP hints and tips; or:
o Forget FTP -- Use Kermit!
UNIX instructions:
Download the desired zip or compressed tar archive from the list above. Then:
  1. Download into an empty directory;
  2. uncompress (uncompress, gunzip, unzip, etc, as appropriate)
  3. if it's a tar file, untar ("tar xvf cku196.tar");
  4. "make xxx", where xxx is the appropriate target from the makefile for your platform (read the comments at the top of the makefile).
See the ckuins.txt file for greater detail (for example, instructions on how to install the binary so it can access your dialout devices and UUCP lockfiles). See the ckccfg.txt file for information about compile-time options for customizing the feature set.

You can also download individual UNIX binaries from the list below, but in case of library or other version mismatches, it is better to build from source if you can.

VMS instructions:
First fetch the most appropriate VMS binary from the list below; pick a VAX binary for a VAX or an Alpha binary for an Alpha. The VMS version number for the binary must be less than or equal to your VMS version. If you want to make TCP/IP connections, pick the binary for the appropriate TCP/IP product (TGV Multinet, DEC UCX, etc), again with a version number less than or equal to yours; if none can be found, then try the "nonet" version. After downloading the chosen binary, read the ckvins.txt file.

If you want to build from source code, fetch one of the archives above if you have VMS-based unpacking tools, otherwise get the source files individually as described just below.

You can also retrieve the text files only (without the source code) in the following archives:

Text files for UNIX and VMS, UNIX tar archive, compress format.
Text files for UNIX and VMS, UNIX tar archive, gzip format.
Text files for UNIX and VMS, ZIP archive (with text files in DOS format)

Source code and text files are also available separately in the kermit/test/text/ directory. These include files for platforms other than UNIX and VMS, such as Stratus VOS, Data General AOS/VS, OS-9, etc. See the ckaaaa.txt file for details.

NOTE: The UNIX, VMS, and AOS/VS source files are all at 7.0 level. The others (except, to some extent, OS-9) have not yet been upgraded to 7.0. Those that have NOT been upgraded yet include: Stratus VOS, Commodore Amiga, Plan 9, Macintosh, BeBox, Atari ST. Volunteers welcome.



The C-Kermit 7.0 binaries are being rearranged and consolidated with the C-Kermit binaries from earlier releases.

CLICK HERE for direct FTP access to the kermit/bin directory.

Questions? Comments? -- Send e-mail.


C-Kermit 7.0 / Columbia University / kermit@columbia.edu / 1 Jan 2000