The Tk Toolkit

by John Ousterhout (and many others at Sun Microsystems and elsewhere)
john.ousterhout@eng.sun.com


1. Introduction
---------------

This directory and its descendants contain the sources and documentation
for Tk, an X11 toolkit implemented with the Tcl scripting language.  The
information here corresponds to Tk 4.1.  This release is designed to work
with Tcl 7.5 and may not work with any other version of Tcl.

The main new feature in this release is support for the Mac and PC
platforms.  Aside from the ports, the release consists mostly of bug
fixes.  There are no major new features.

2. Documentation
----------------

The best way to get started with Tk is to read one of the introductory
books on Tcl and Tk:

    Tcl and the Tk Toolkit, by John Ousterhout,
    Addison-Wesley, 1994, ISBN 0-201-63337-X

    Practical Programming in Tcl and Tk, by Brent Welch,
    Prentice-Hall, 1995, ISBN 0-13-182007-9

The "doc" subdirectory in this release contains a complete set of
reference manual entries for Tk.  Files with extension ".1" are for
programs such as wish; files with extension ".3" are for C library
procedures; and files with extension ".n" describe Tcl commands.  To
print any of the manual entries, cd to the "doc" directory and invoke
your favorite variant of troff using the normal -man macros, for example

		ditroff -man wish.1

to print wish.1.  If Tk has been installed correctly and your "man"
program supports it, you should be able to access the Tcl manual entries
using the normal "man" mechanisms, such as

		man wish

If you are porting Tk 3.6 scripts to Tk 4.0, you may find the Postscript
file doc/tk4.0.ps useful.  It is a porting guide that summarizes the
new features and discusses how to deal with the changes in Tk 4.0
that are not backwards compatible.

3. Compiling and installing Tk
------------------------------

This release contains everything you should need to compile and run
Tk under UNIX, Macintoshes, and PCs (either Windows NT, Windows 95,
or Win 3.1 with Win32s).

Before trying to compile Tk you should do the following things:

    (a) Check for a binary release.  Pre-compiled binary releases are
        available now for PCs and Macintoshes, and they may be available
	in the future for some flavors of UNIX.  Look in the FTP
	directory from which  you retrieved the base distribution to
	see if a suitable binary release is available.  If so, it will
	be much easier to install than the source release.

    (b) Check for patches.  Look in the FTP directory from which you
        retrieved the base distribution and see if there are files with
	names like tk4.1p1.patch, tk4.1p2patch, etc.  These files may
	also have .gz or .Z extensions to indicate compression.  If you find
	any patch files, apply them to the source directory in order
	from "p1" up.  To apply an uncompressed patch file such as
	tk4.1p1.patch, invoke a shell command like the following from
	the directory containing this file:
	    patch -p < tk4.1p1.patch
	If the patch file has a .gz extension, it was compressed with
	gzip.  To apply it, invoke a command like the following:
	    gunzip -c tk4.1p1.patch.gz | patch -p
	If the patch file has a .Z extension, it was compressed with
	compress.  To apply it, invoke a command like the following:
	    zcat tk4.1p1.patch.Z | patch -p

Once you've done this, change to the "unix" subdirectory if you're
compiling under UNIX, "win" if you're compiling under Windows, or
"mac" if you're compiling on a Macintosh.  Then follow the instructions
in the README file in that directory for compiling Tk, installing it,
and running the test suite.


4. Additional release information
---------------------------------

There is now an official home for Tcl and Tk on the Web at the following
URL:
	http://www.sunlabs.com/research/tcl
These Web pages include release updates, reports on bug fixes and
porting issues, and pointers to many other Tcl/Tk Web pages at other
sites.  Check them out!

5. Getting started
------------------

The best way to get started with Tk is by reading one of the introductory
books.

The subdirectory library/demos contains a number of pre-canned scripts
that demonstrate various features of Tk.  See the README file in the
directory for a description of what's available.  The file
library/demos/widget is a script that you can use to invoke many individual
demonstrations of Tk's facilities, see the code that produced the demos,
and modify the code to try out alternatives.

6. Summary of changes in Tk 4.1
-------------------------------

The main change for Tk 4.1 is that Tk now runs on Macintosh and
PC platforms as well as UNIX.  The PC port should support Windows 3.1
(with Win32s), Windows 95, and Windows NT.  This required a lot of
reorganization of the sources but it didn't require any changes to
Tk's externally visible interfaces.

Besides the ports, Tk 4.1 consists most of bug fixes.  There are only
a few new features and they are relatively minor:

    1. There is a new "notifier" mechanism, which was added as part of
       the ports.  This allows the basic mechanisms for reporting events
       to be implemented in different ways on different platforms.  It
       may also be useful for other purposes, such as merging the Tk and
       Xt event loops so that Tk and Xt widgets can coexist in a single
       application.  See the manual entry Notifier.3 for more information.

    2. There is a new command "after info" that allows you to find out about
       pending "after" handlers that haven't yet fired.

    3. Scrollbars and scales now have proper button 2 support as required
       by Motif.

    4. Menus have two new options, -transient and -tearoffcommand.

    5. When manual pages are installed, additional links are created for
       each of the procedures described in the manual page, so that it's
       easier to invoke the "man" command.

    6. Wish supports a new "--" option:  it will only process options
       up through the --;  anything after that will be passed through
       to the application in the argc and argv variables.

Two minor incompatibilities were introduced by the changes.  These will
only affect C code, not Tcl/Tk scripts, and they are obscure enough that
they probably won't affect any existing extensions.  If there are any
potential problems, they will be detected by an ANSI-compliant C compiler
such as gcc.

    1. Tk doesn't export any global C variables anymore, because this
       doesn't work with Windows DLLs.  The C variable tk_NumMainWindows
       has been replaced with the procedures Tk_GetNumMainWindows().

    2. The interface to Tk_RestrictProc has changed so that the restrict
       procedure can ask for an event to be discarded, as well as processed
       or deferred.

For a complete list of all the changes in this release, see the file
"changes" in this directory.

7. Summary of changes in Tk 4.0
-------------------------------

Tk 4.0 is a major new release that contains many new features and
several incompatible changes.  You will probably need to modify existing
scripts and C code in order for them to work with Tk 4.0.  Below is a
summary of the most significant improvements and a complete list of
incompatibilties.  There have also been countless bug fixes;  for
more information, see the file "changes".

There is also a porting document available in the Postscript file
"doc/tk4.0.ps".  It describes the changes and incompatibilities in
Tk 4.0 and gives advice on how to modify Tk 3.6 scripts to run under
Tk 4.0.  The porting document will be updated as new information
becomes available;  the latest version will be available via the
Tcl/Tk Web pages at Sun (see above).

Here is a summary of the new features:

    1. All of the widgets have been overhauled.  The most important
    change is better Motif compliance, including a completely new set of
    bindings to match Motif.  Text and entry widgets also have a set of
    Emacs-like bindings.  Some additional changes to widgets:
	- All widgets now have a "cget" widget command, which provides
	  a simpler way to retrieve the value of a configuration option.
	- All widgets have -highlightthickness and -highlightcolor options
	  for controlling the traversal highlight, and the traversal
	  highlight is displayed whenever the widget has the input focus.
	- Entries support justification and a "-show" option for (not)
	  displaying passwords.  They will autosize to fit their text
	  if "-width 0" is specified.
	- The label/button family of widgets now supports multi-line text
	  and justification.  The -selector option for check and radio
	  buttons has been replaced with -selectcolor and -indicatoron
	  options.
	- Listboxes support all of the Motif selection modes (e.g. single
	  and multiple selections, and disjoint selections);  the "selection"
	  widget command changed to support this.  Listboxes will auto-size
	  around their contents if "-width 0" or "-height 0" is specified,
	  and they have new "see", "bbox", and "activate" widget commands.
	- Scales support real values and a linked variable, and their
	  bindings are now defined in Tcl instead of being hard-wired
	  in C.  Several of the configuration options have been renamed.
	- Scrollbars have a new interface to the controlling widget, which
	  provides more flexibility than the old style (the old style is
	  still supported, for compatibility).  The behavior of scrollbars
	  is now defined with Tcl bindings rather than being hard-wired
	  in C, and there are several new widget commands for scrollbars.
	  Several of the configuration options have been renamed.
	- Menu entries support several new options such as -foreground and
	  -indicatoron, and tear-off menus have been reimplemented to be
	  more Motif-like.  The procedures "tk_menuBar" and
	  "tk_bindForTraversal" are no longer needed, but they exist as
	  empty stubs for compatibility.
	- Menu buttons have a -indicatoron option for displaying an option
	  menu indicator.  Also, there is built-in support for option menus
	  and popup menus:  see the manual entries for tk_optionMenu and
	  tk_popup.
	- The variable "tk_strictMotif" is used in more places to enforce
	  event more strict Motif compliance.

    2. Changes to the binding mechanism:
	- One binding triggers now for each binding tag (widget, class,
	  "all", etc.) instead of just one overall.
	- A new command, "bindtags", provides control over the number
	  and order of the binding tags for a widget.  The default is
	  class, widget, its toplevel, and "all".
	- "Break" and "continue" have meaning within binding scripts.
	- Extraneous modifiers are now ignored in bindings, as if every
	  binding had an implicit "Any" modifier.
	- The Meta and Alt modifiers are now computed from the modifier
	  map instead of being hard-wired to M1 and M2.

    3. Tk now contains a general-purpose image mechanism, including the
    following:
	- There is a new command "image" for creating images.
	- Many widgets provide a "-image" option.
	- Canvases contain a new "image" canvas item type.
	- There is built-in support for two kinds of images:  bitmaps and
	  photos.  The photo image type was provided by Paul Mackerras and is
	  based on his "photo" widget.  It currently supports PPM, PGM,
	  and GIF formats, but can easily be extended to handle other
	  image types (see the manual entry for Tk_CreatePhotoImageFormat).
	- There is an extension mechanism for defining new kinds of images.
	  See the manual entry for Tk_CreateImageType.

    4. Text widgets have undergone a major overhaul, including the following:
	- They now support embedded windows;  read about the "window"
	  widget command.
	- Many new tag configuration options have been added to support
	  tabs, justification, margins, line spacing, vertical offsets,
	  and overstrike.
	- Added horizontal scrolling.
	- Tags have been reimplemented so that they aren't sticky on
	  either side: a new character gets a tag only if the old
	  characters on both sides of it were tagged.  There is also
	  an optional "tagList" argument to the "insert" widget command
	  for specifying tags for new text.
	- Marks have "gravity" to control which way the mark moves when
	  text is inserted at its position;  see the "mark gravity"
	  widget command.
	- There are several new widget commands:  "search", "bbox,
	  "dlineinfo", and "see".
	- The "end" tag now refers to a position just after the final
	  newline, rather than just before it.  You can now tag the newline
	  and set marks after it.

    5. Event handling has been improved in several ways:
	- Mark Diekhan's "addinput" command has been incorporated under
	  the name "fileevent".
	- "After" bindings can be cancelled now, and there is an
	  "after idle" command to create idle handlers.
	- The event code has been repackaged so that it can be used without
	  the rest of Tk (see the manual entry for Tk_EventInit).
	- There is a new form of file event handler:  see the manual entry
	  for Tk_CreateFileHandler2.

    6. Changes in the focus mechanism:
	- Keyboard traversal of widgets is now built in.  See the manual
	  entry for "tk_focusNext".  Each widget has a "-takefocus"
	  option to control whether or not it gets the focus.
	- Multiple displays are supported via the -displayof option to "focus".
	- There is always a focus window now ("focus none" is no longer
	  allowable.  There is no "default" focus window;  instead, the
	  focus reverts to top-levels by default.
	- Tk keeps track of a separate focus window for each top-level
	  window and automatically moves the focus there whenever the
	  window manager gives the focus to a top-level.  The default is
	  to use click-to-focus within a top-level but focus-follows-mouse
	  between top-levels;  however, you can make the focus follow the
	  mouse within a top-level too;  see the manual entry for
	  "tk_focusFollowsMouse".
	- TkFocusIn and FocusOut events now follow the standard X mechanism
	  (they are delivered to all ancestors of the focus window, not just
	  the toplevel and the leaf).

    7. Changes in the "send" command:
	- "Winfo interps" no longer returns stale interpreter names.
	- Multiple displays are supported via the "-displayof" option.
	- Asynchronous sends are permitted with the "-async" switch.
	- Timeouts no longer occur, so sends can take as long as you like;
	  a send won't abort as long as the target application still exists.
	- You can change the application's name with "tk appname".
	- Window server security is checked on each send now.
	- More complete error information is propagated back to the caller
	  now ("errorInfo" and "errorCode" variables).

    8. Selection support has been improved to handle multiple displays
    and different kinds of selection (primary, secondary, etc.).
    There is special support for the clipboard in the form of a new
    "clipboard" command and procedure Tk_ClipboardClear and
    Tk_ClipboardAppend.

    9. Changes to canvases:
	- Polygon items now have -outline and -width options for drawing
	  outlines.
	- Arc items have a new -outlinestipple option and "-style arc"
	  uses -outline and -outlinestipple for drawing instead of
	  -fill and -outline.
	- The interface between generic canvas code and the various canvas
	  item types has been cleaned up, documented, and officially exported
	  so that you can define new item types.  See the manual entry for
	  Tk_CreateItemType.
	- Bitmap items are now transparent if the -background option is
	  specified as empty.
	- Several bugs relating to Postscript generation and arrowheads
	  have been fixed.
	- The simulated grabs during button presses work more like those
	  that occur for widgets.
	- Replace the -scrollincrement option with separate -xscrollincrement
	  and -yscrollincrement options.

    10. Changes to the Wish application:
	- The "-file" keyword is no longer required (but it is still
	  supported for compatibility):  if the first argument to wish
	  doesn't start with "-", it is assumed to be the name of a
	  script file, just as for sh.
	- It now uses a class name based on the application name, rather
	  than always using "Tk" as the class.
	- Also, the main program for Tk has been renamed "Tk_Main", and
	  the real "main" is now part of tkAppInit.c.
	- The -help option is no longer supported.

    11. Improvements in color handling:
	- There is now explicit support in Tk for colormaps and visuals,
	  including -colormap and -visual options for toplevels and frames,
	  new commands "winfo visualsavailable" and "wm colormapwindows",
          and procedures Tk_GetVisual, Tk_GetColormap, and Tk_FreeColormap.
	- If a colormap fills up, Tk picks the closest color and continues:
	  there are no more "no more colors" errors.
	- Shadow colors for borders are not allocated unless they are
	  actually needed for drawing;  if a colormap fills up, shadows
	  are drawn with stipples instead of colors.
	- The default color for Tk has changed from bisque to gray, to match
	  standard desktop usage.  There are two new procedures for managing
	  color:  tk_setPalette may be used to change colors on the fly,
	  and tk_bisque restores the light brown scheme used in Tk 3.6 and
	  earlier versions.

    12. Toplevel windows are now resizable by default, and "wm iconwindow"
    should work now (it never really worked before).  There is a new
    "wm resizable" command for making windows non-resizable.

    13. I've patched around the Xlib bug whereby long-lived applications
    used to crash because resource ids wrapped around.

    14. Geometry management has been improved in several ways:
	- The -in option should now work correctly in the placer and
	  packer (it was quirky before).
	- You can find out which manager controls a slave with the
	  "winfo manager" command.
	- The C interfaces to geometry management have been reworked:
	  see the manual entry for Tk_ManageGeometry.

    15. There is a new "bell" command that does what you would expect.

    16. There is very primitive support for input methods, just barely
    enough to handle the Compose key for European users.

Here is a list of incompatibilities that affect Tcl scripts:

    1. The default color of Tk applications has changed from bisque
    to gray.  Use the "tk_bisque" procedure to restore the old colors.

    2. Conflict resolution in bindings is different:  if you have
    bindings that augment or override class bindings, you'll probably
    have to rework them.  Also, the new binding tags mechanism means
    that top-level windows will also receive events that occur in
    all their descendants.  If you have bindings for top-level windows,
    you'll need to modify them to ignore the extra events.

    3. The -geometry option has been removed from toplevels, frames, and
    listboxes; use -width and -height instead.

    4. When new text is added to a text widget, it only receives tags
    present on *both* sides of the insertion point (it used to receive
    any tags present to the left of the character).

    5. The class of Tk applications is no longer "Tk";  it is the
    name of the script or program that embodies the application.

    6. The default padding for buttons and menubuttons has been changed
    to match normal Motif behavior.

    7. Listboxes now return the selection as a string with one line per
    entry, instead of a list.

    8. The procedure tk_listboxSingleSelect no longer exists;  use the
    -selectMode option on the listbox instead.

    9. The transport format used for "send" has changed, so Tk 4.0
    applications cannot communicate with Tk 3.6 applications.

    10. In entries, sel.last refers to the character just *after*
    the last selected one, and the second index to the "delete" widget
    command also refers to the character just after the last one to
    delete.

    11. Changes to the binding mechansim:
	- The "Any" modifier is now implicit in all bindings.
	- %D substitutions are no longer supported.
	- CirculateRequest, ConfigureRequest, MapRequest, and ResizeRequest
	  event types are no longer supported.
	- % sequences that print window identifiers, such as %a and %S,
	  produce hexadecimal results instead of decimal.
	- Enter, Leave, FocusIn, and FocusOut events with detail NotifyInferior
	  are now ignored (they can still be accessed from C, though).

    12. In scrollbars, the -background option has been renamed to
    -troughcolor, -foreground has been renamed to -background, and
    -activeforeground has been renamed to -foreground.

    13. In scales, the -sliderforeground option has been renamed to
    -background, -background has been renamed to -troughcolor, and
    -activeforeground has been renamed to -activebackground.  Scales
    no longer accept hex or octal numbers in the "set" command or
    the -from and -to options.

    14. For checkbuttons, radiobuttons, and the corresponding menu
    entries, the -selector option has been renamed to -selectcolor,
    and it can no longer be specified as empty;  instead, use the
    -indicatoron option to specify whether or not to draw the indicator.

    15. The "enable" and "disable" widget commands have been eliminated
    for menus:  use the -state configuration option instead.

    16. The "activate" and "deactivate" widget commands have been eliminated
    for buttons, checkbuttons, radiobuttons, and menubuttons;  use the
    -state configuration option instead.

    17. The obsolete variable "tkVersion" is no longer supported;  use
    tk_version instead.

    18. The syntax of the "scan" widget command for texts has changed.

    19. Wish no longer recognizes the -help option.

    20. Tk always prints real numbers, such as canvas coordinates, with
    a decimal point, so that they cannot get confused with integers.

    21. The command "pack newinfo" has been renamed to "pack info", and
    the old "pack info" command (which was obsolete) no longer exists.

    22. The -scrollcommand option for entries has been changed to
    -xscrollcommand, and the "view" widget command has been changed to
    "xview".

    23. "Winfo exists" no longer reports a window as existing if it is
    in the process of being destroyed.

    24. The -padx and -pady options for the button family of widgets
    are ignored if the button is displaying an image or bitmap;  padding
    is zero in these cases.

    25. In radiobuttons the -value option no longer defaults to the name
    of the widget:  an empty string is a valid value for it.

    26. The -menu option for menubuttons and cascade menu entries must
    refer to a child of the menubutton or menu.

    27. The interpretation of "@y" in menus has changed:  it no longer
    returns "none".  The "invoke" and "activate" commands no longer post
    submenus;  must use the new "postcascade" command instead.  The
    -command option for a cascade entry is only executed when the entry
    is invoked, and not when it is posted.  Most uses of the -command
    option should switch to using the -postcommand option on the submenu
    instead.

    28. When a canvas item is in "-style arc" mode, it draws itself
    using the -outline and -outlinestipple options rather than the
    -fill and -stipple options.

    29. The selection targets APPLICATION and WINDOW_NAME have been replaced
    with TK_APPLICATION and TK_WINDOW.

    30. There is no longer a default focus, and "focus none" is no longer
    supported.  The focus command now returns an empty string instead of
    "none" to signal that the application doesn't have the input focus.

    31. FocusIn and FocusOut events now use the standard X mechanism, so
    the number and types of these events is different now.

    32. "wm maxsize" and "wm minsize" no longer accept empty arguments.

    33. The -scrollincrement option for canvases has been replaced with
    separate -xscrollincrement and -yscrollincrement options.

    34. In the placer, if you specify both -x and -relx then they *add*
    instead of the most recently-specified one takin precedence.

    35. The "tk colormodel" command no longer exists.  To find out whether
    a screen is mono or color, use "winfo depth" instead.

Here are the incompatibilities that affect C code that uses the Tk
library:

    1. The arguments to Tk_ManageGeometry have changed.

    2. The "main" procedure is no longer provided by Tk;  it should now
    be in the same file as Tcl_AppInit (see tkAppInit.c for an example).

    3. "fill" justify mode is no longer supported by Tk_GetJustify, and
    the TK_CONFIG_JUSTIFY flat no longer exists (no widgets actually
    supported this mode anyway).

    4. The procedures Tk_GetSelection, Tk_CreateSeleHandler, and
    Tk_ClearSelection now take an additional "selection" argument.

    5. The obsolete procedure Tk_CreateFocusHandler has been removed.

    6. The procedure Tk_RegisterInterp no longer exists;  Tk_SetAppName
    now provides similar functionality.

    7. The "interp" argument to Tk_GetcolorByValue has been eliminated.

    8. The procedures Tk_GetColorModel and Tk_SetColorModel have been
    eliminated.

    9. The arguments to many of the Tk_3D procedures (e.g.,
    Tk_Draw3DRectangle) have been changed to take a Tk_Window argument
    instead of (Display *).

    10. Tk_GetColor, Tk_GetColorByValue, and Tk_Get3DBorder no longer
    take colormap arguments.

    11. Changed interfaces throughout Tk to use type "int" instead of
    "unsigned".

8. Tcl/Tk newsgroup
-------------------

There is a network news group "comp.lang.tcl" intended for the exchange
of information about Tcl, Tk, and related applications.  Feel free to use
this newsgroup both for general information questions and for bug reports.
We read the newsgroup and will attempt to fix bugs and problems reported
to it.

When using comp.lang.tcl, please be sure that your e-mail return address
is correctly set in your postings.  This allows people to respond directly
to you, rather than the entire newsgroup, for answers that are not of
general interest.  A bad e-mail return address may prevent you from
getting answers to your questions.  You may have to reconfigure your news
reading software to ensure that it is supplying valid e-mail addresses.

9. Tcl/Tk contributed archive
--------------------------

Many people have created exciting packages and applications based on Tcl
and/or Tk and made them freely available to the Tcl community.  An archive
of these contributions is kept on the machine ftp.aud.alcatel.com.  You
can access the archive using anonymous FTP;  the Tcl contributed archive is
in the directory "/tcl".  The archive also contains several FAQ ("frequently
asked questions") documents that provide solutions to problems that
are commonly encountered by TCL newcomers.

10. Support and bug fixes
------------------------

We're very interested in receiving bug reports and suggestions for
improvements.  We prefer that you send this information to the
comp.lang.tcl newsgroup rather than to any of us at Sun.  We'll see
anything on comp.lang.tcl, and in addition someone else who reads 
omp.lang.tcl may be able to offer a solution.  The normal turn-around
time for bugs is 2-4 weeks.  Enhancements may take longer and may not
happen at all unless there is widespread support for them (we're
trying to slow the rate at which Tk turns into a kitchen sink).  It's
very difficult to make incompatible changes to Tcl at this point, due
to the size of the installed base.

When reporting bugs, please provide a short wish script that we can
use to reproduce the bug.  Make sure that the script runs with a
bare-bones wish and doesn't depend on any extensions or other
programs, particularly those that exist only at your site.  Also,
please include three additional pieces of information with the
script:
    (a) how do we use the script to make the problem happen (e.g.
	what things do we click on, in what order)?
    (b) what happens when you do these things (presumably this is
        undesirable)?
    (c) what did you expect to happen instead?

The Tcl/Tk community is too large for us to provide much individual
support for users.  If you need help we suggest that you post questions
to comp.lang.tcl.  We read the newsgroup and will attempt to answer
esoteric questions for which no-one else is likely to know the answer.
In addition, Tcl/Tk support and training are available commercially from
NeoSoft (info@neosoft.com), Computerized Processes Unlimited
(gwl@cpu.com), and Data Kinetics (education@dkl.com).

11. Release organization
---------------------------

Each Tk release is identified by two numbers separated by a dot, e.g.
3.2 or 3.3.  If a new release contains changes that are likely to break
existing C code or Tcl scripts then the major release number increments
and the minor number resets to zero: 3.0, 4.0, etc.  If a new release
contains only bug fixes and compatible changes, then the minor number
increments without changing the major number, e.g. 3.1, 3.2, etc.  If
you have C code or Tcl scripts that work with release X.Y, then they
should also work with any release X.Z as long as Z > Y.

Alpha and beta releases have an additional suffix of the form a2 or b1.
For example, Tk 3.3b1 is the first beta release of Tk version 3.3,
Tk 3.3b2 is the second beta release, and so on.  A beta release is an
initial version of a new release, used to fix bugs and bad features
before declaring the release stable.  An alpha release is like a beta
release, except it's likely to need even more work before it's "ready
for prime time".  New releases are normally preceded by one or more
alpha and beta releases.  We hope that lots of people will try out
the alpha and beta releases and report problems.  We'll make new alpha/
beta releases to fix the problems, until eventually there is a beta
release that appears to be stable.  Once this occurs we'll make the
final release.

We can't promise to maintain compatibility among alpha and beta releases.
For example, release 4.1b2 may not be backward compatible with 4.1b1, even
though the final 4.1 release will be backward compatible with 4.0.  This
allows us to change new features as we find problems during beta testing.
We'll try to minimize incompatibilities between beta releases, but if a
major problem turns up then we'll fix it even if it introduces an
incompatibility.  Once the official release is made then there won't
be any more incompatibilities until the next release with a new major
version number.
