Tcl portability is good, overall, but varies sharply by project
complexity. The Tk toolkit for cross-platform GUI programming is
native to Tcl. As with Python, evolution of the core language has
been relatively smooth, with few version-skew problems.
Unfortunately, Tcl relies even more heavily than Perl on extension
facilities that are not guaranteed to ship with every implementation
— and there is no equivalent of CPAN to centrally distribute
them.
For smaller projects not reliant on extensions, therefore, Tcl
portability is excellent. But larger projects tend to depend heavily
on both extensions and (as with shell programming) calling external
commands that may or may not be present on the target machine; their
portability tends to be poor.
Tcl may have suffered, ironically, from
the ease of adding extensions to it. By the time a particular extension
started to look interesting as part of the standard distribution, there
typically were several different versions of it in existence. At the
1995 Tcl/Tk Workshop, John Ousterhout explained why there was no OO
support in the standard Tcl distribution:
Think of five mullahs sitting around in a circle, all saying
“Kill him, he's a heathen”. If I put a specific OO
scheme into the core, then one of them will say “Bless you, my
son, you may kiss my ring”, and the other four will say
“Kill him, he's a heathen”.
The lot of a language designer is not necessarily a happy one.