TCL is a scripting language created in the late 1980's, it never really caught on as a mainstream programming language as that's not what its original purpose was anyway, and these days, its uses are mostly in automation, similar to bash scripting. It does have a small but cultish like following among hobbyists, since it's so easy to learn and so well suited for small personal projects. TCLSH is the binary that will run TCL scripts, or TCLSH.exe in Windows.
TK is the graphical toolbox created to be used with TCL, but has also been adapted to be used with other interpreted languages as well, including, Ruby, Python, and Perl, among others. WISH is the binary that will run TCL scripts which include TK graphics, or WISH.exe in Windows.
Freewrap and FreewrapTCLSH are standalone binaries that will "wrap" TCL scripts into standalone executable binaries. Freewrap is for scripts which include TK graphics, and FreewrapTCLSH is for those that do not.
For instance, if I have a TCL script which has a graphical interface, i.e., I've used TK commands within the script, to wrap the script as a standalone executable, the command line would be:
freewrap script_name.tcl
If I wanted the resulting binary to be named something other than "script_name", the command would be:
freewrap script_name.tcl -o another_name
FreewrapTCLSH works exactly the same way, but for scripts which do not include any TK commands.
Additionally, if a user has a flawed or incompete TCL install on their computer, Freewrap is an easy and simple way around that problem. As shown above, it your run "freewrap filename.tcl", freewrap will produce a standalone binary. However, if you make a copy of freewrap and name it something other than freewrap, it will only run the script without creating a binary, i.e., copy freewrap and name the copy "tk_run", then use the command line"
tk_run script_name.tcl
It will just execute the script. This is desirable if you have a script that you'd like to modify or edit in any way but just don't want to make a standalone binary out of it.
The same thing can be done with freewrapTCLSH by renaming it to, say, tcl_run.
Freewrap is free and open source, and is availabe at Sourceforge:
https://sourceforge.net/projects/freewrap/
I've had an issue recently with folks not being able to run TCL scripts as they had an incomplete TCL installation, and the tcllilb wasn't available for whatever reason. Freewrap is a great alternative, it allows running scripts from a single binary without even having TCL installed at all.
FWIW, you can actually open freewrap, or any binary you create using freewrap, with 7-zip or PeaZip or other archive util, and you'll see that freewrap and the binaries that it creates are simply zip files that contain the entire TCL and TK library, which is why a 1k TCL script wrapped with freewrap becomes about 10mb or more.
Another interesting piece of useless trivia, the navy contractors that invented Sqlite were using TCL at the time, and in fact the Sqlite logo still carries on it the TCL feather 🙂