Many have called it the “best-kept secret in the software industry”. Whether in large companies, small companies, academia or the wild world of open source, you’ll be surprised at many of the places Tcl can be found …
I have plenty of development hardware. I have laptops, tablets, and desktops a plenty. But I am still chasing the notion of a technology pandemic. While I started thinking that “systems” would be thrown back to the stonage of DOS or maybe some other custom RTOS… we kinda have no idea. The challenge we face is that the software we depend on is based on many years of layered development.
consider how long it took for the Sun developoment team to get java to build java… and golang to build golang.
It’s impossible to know what software would be around in order to bootstrap the world’s software industry… So my theory of operation is to define the rules in a simple language like tcl… expand the language as needed… and build it on some other simple syntax so that the base could be rebuilt preserving the model.
think practical literate model that could be easily created
I’ve tried a number of syntax' like lua and lisp, but tcl seems to be holding string. Although there is one strong use-case for lisp in that it’s recursive enough that all one might need is the shim to the OS. Consider back in the day what it took to build emacs with the limited hardware and software available. They did it.
picol 500 lines was a good start and there is a lisp version out there too.
However, lisp is a challenge to learn. It’s not natural. All those freaking parens. And so I started looking at tcl again. My dsl is not 100% compat but I’m not tring to be. What is interesting is that I have been able to take the tcl source, all in c, and build it with clang or gcc. I’ve been able to add SQLite and I have even tested a connection to an ODBC database. tcl from the source is an unfortunate challenge because there are several source distributions with hidden documentation. It’s a mixed blessing from Active State.
And there is one more thing… Most operating systems provide their toolchain as they see it. They decide where the include files are stored, the libs are stored, the dependencies, and so on. For example the current verion of sqlite is 3.33.0. However, the all-in-one tcl source only supports 3.31.0. This is the opposite of what I’m refering too but it’s something I can upgrade… and it’s all over the OS.
So in the following notes… I’m going to install MY version of tcl on a ChromeOS device in the linux container. The general rules should work from anywhere on anywhere. One other side effect is that the OS version is shimmed away from the application tools. This is a big deal. It reminds me of a book I read about Microsoft in the early days. Moving on…
trying to do everything in userspace
sudo apt install clang tdsodbc/stable sudo apt install unixodbc unixodbc-dev tdsodbc odbcinst wget https://www.sqlite.org/2020/sqlite-autoconf-3330000.tar.gz wget https://fossil-scm.org/home/uv/fossil-linux-x64-2.12.1.tar.gz mkdir -p $HOME/tools/bin tar zxvf fossil-linux-x64-2.12.1.tar.gz mv fossil $HOME/tools/bin/. mkdir -p $HOME/fossils fossil clone https://core.tcl-lang.org/tcllib $HOME/fossils/tcllib.fossil cd $HOME/Download mkdir tcllib cd tcllib fossil open $HOME/fossils/tcllib.fossil tar zxvf sqlite-autoconf-3330000.tar.gz cd sqlite-autoconf-3330000/ CC=cc ./configure --prefix=$HOME/tools make make install fossil clone http://o2o001.bucker.local:8080/vctools $HOME/fossils/vctools.fossil mkdir -p $HOME/src/vctools mkdir -p $HOME/.config/vctools cd $HOME/src/vctools fossil open $HOME/fossils/vctools.fossil mkdir -p $HOME/BIN ./install.tcl
tar zxvf tcl8.6.10-src.tar.gz
cd $HOME/Download/tcl8.6.10/unix && CC=cc ./configure --prefix=$HOME/tools --with-threads
make && make install
cd $HOME/Download/tcl8.6.10/pkgs && cp -r ~/Download/tcllib tcllib1.2.0
FreeTDS /etc/freetds/freetds.conf unixODBC 2.3.6 DRIVERS............: /etc/odbcinst.ini SYSTEM DATA SOURCES: /etc/odbc.ini FILE DATA SOURCES..: /etc/ODBCDataSources USER DATA SOURCES..: /home/richard/.odbc.ini
some remote database connectivity
some sqlite connecivity
And to upgrade to SQLite 3.33.0 if not already by the time I get here.
I hate being ROOT
wget fossil... wget sqlite3... apt install clang make CC=cc ./configure --prefix=$HOME/tools # sadly there are a few compiler warnings... :( make && make install add $HOME/tools/bin to the PATH wget tcllib mv the tcllib to the pkgs folder and repeat the configure make install process. The reason for the second step is because tcllib's configure/make depends on tcl...
This project is being undertaken on my Google pixel in portait mode with a Lenovo Thinkpad USB keyboard with the dimple. The processor is an i7 with 16GB ram and I think 64GB of SSD. Part of me wants to continue this experiment with an android tablet and a ESXi server with applicable guest OS. That will clearly work too.
We are constantly being tested as to whether we need big iron or if smaller machines are sufficient. Programmers seem to have a hoarder mentality and it has taken me years to get rid of. There is a part of me that does not want to repeat the past and I’m looking for waster ways to move to the future. One thing for sure is that scale is not a problem most projects suffer from.
So really the next place to try this project is on a raspberry pi.