Author: Harald Oehlmann <[email protected]>
Author: Ashok P. Nadkarni <[email protected]>
State: Draft
Type: Informational
Vote: Done
Created: 2025-03-13
Abstract
This TIP defines the platforms and build environments for Tcl/Tk 9.1. This includes
- Support levels
- Operating systems
- Architectures
- Compilers and build tool chains
This is a living document and may be modified at any time. Vote is expected with the release of TCL/Tk 9.1.0.
Support levels
The following support levels are defined and may be used for release notes, documentation, source code comments and TIPs. They may apply to items like platforms, or build tools. In this subchapter, the word item is used as a generic concept which may stand for the upper mentioned items.
tested
Before any public release, at least one individual commits to test on this item. The committed individual is called maintainer for that item and should also be ready to answer specific questions for this item. In a reasonable manner, tickets about failures on this item should be monitored by the maintainer.
An automated test for this item is encourraged but not sufficient for this category, as there is no maintainer.
The list of items and maintainers are on the wiki page "item maintainers" (not existing jet).
untested
Items in this category may just work but do not have maintainers committed. However, reported failures will not be disregarded and an attempt to fix them will be made to the extent possible.
This is the default level which applies when an item is not listed in another level.
obsolete
Obsolete items are explicitly listed as such. No effort is made to maintain Tcl for these and any reported failures are ignored. Generally speaking, these are older versions that no longer meet requirements listed below.
Requirements
Where applicable, Tcl 9.1 requires
- C compiler supporting the mandatory features of the C11 standard,
- glibc >= 2.34 if using gcc
- POSIX.1-2008 API on non-Windows platforms
- SDK 10.0.20348.0 (version 2104) or later on Windows (needed for updated C11 support in UCRT). MSVCRT is not supported due to C11 requirements.
- X11 >= R6 in X Windows environments (Tk only)
- autoconf >= 2.72 when using autoconf based builds
Platforms
Tested platforms
Windows
Tested platforms are latest versions of Windows 11 on i686, x86_64 and aarch64/arm64 with one of the following compilers:
- Visual Studio 2022
- Msys/MingW64 with gcc version 10.1 or higher and UCRT
- Msys/MingW64 with clang version 10.0.0 and UCRT
Linux
Tested distributions are latest two versions of Ubuntu and Debian on x86_64.
macOS
The minimum macOS versions supported by Tcl differ for the x86_64 and arm64 architectures because macOS 11 was the first OS version that supported arm64.
- x86_64: macOS 10.13 High Sierra (released September 25, 2017)
- arm64: macOS 11 Big Sur (released November 12, 2020)
Untested platforms
- FreeBSD, NetBSD, OpenBSD on x86_64
- Debian or its "Raspberry Pi OS" derivative on armv7l, aarch64 (ARM 32-bit, 64-bit)
- Solaris on x86_64, sparc64
- Any non-vintage Linux, BSD, or UNIX distribution on any non-vintage hardware
Obsolete platforms
The following platforms are explicitly marked as obsolete.
- Windows: versions prior to Windows 10 / Windows Server 2016.
- macOS: 32-bit architectures and versions prior to macOS 10.13
- Linux: 32-bit kernel versions prior to 5.6, released March 29, 2020.
Considerations on future versions
Year 2038 issue
In 2038, a 32bit time_t will not by able to represent the current time. This is an issue on some Linux systems. The following policy is proposed to be in place 5 years before this date. It will be applicable to a future version of TCL, as TCL 9.1 will probably be out of support at this date.
After 2033-01-01, the current Tcl version must write a warning to the system log and to stderr whenever Tcl starts, and also if commands such as [clock], [file mtime] are called with arguments corresponding to negative time_t or return a result with this property, in the following circumstances:
On a host that has no system calls for 64-bit time (e.g. 32-bit Linux kernels earlier than 5.6)
On a system on which the length of time_t has been tested and found to be 32-bit (N.B. even a libc that is nominally compliant may have been built with a compatibility option to use 32-bit time_t).
On a system on which a 64-bit time operation has been tested at startup and has failed (e.g. creating a file and changing its mtime to a date in 2040).
Copyright
This document has been placed in the public domain.