TinyMUX 2.14.0.1 ALPHA

2 views
Skip to first unread message

Brazil

unread,
Mar 20, 2026, 8:36:44 AMMar 20
to tinymux
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512

Subject: [ANNOUNCE] TinyMUX 2.14.0.1 ALPHA released

This is the first ALPHA of TinyMUX 2.14 — the largest release in the
project's history. Everything below is new since 2.12.

Architecture
- ------------

The server has been split into three shared objects:

  - libmux.so  — core types and utilities
  - engine.so  — game engine, loaded as a COM module
  - netmux     — network driver

The engine communicates with the driver exclusively through 12 COM
interfaces. This is the foundation for future process isolation and
scaling.

The source tree has been restructured: headers in include/, library
sources in lib/, engine sources in modules/engine/, driver sources
in src/.

AST Evaluator
- -------------

The classic softcode parser has been replaced with an AST-based
evaluator. Expressions are tokenized by a Ragel-generated scanner,
parsed into an abstract syntax tree, and cached in an LRU cache
(1024 entries). All %-substitutions, ##/#@/#$ tokens, and NOEVAL
constructs (iter, switch, if/ifelse, cand/cor) are handled natively.
The classic parser has been deleted.

JIT Compiler (optional, --enable-jit)
- -------------------------------------

Softcode expressions can be compiled to native x86-64 machine code:

  softcode -> AST -> HIR -> SSA -> optimize -> RV64 codegen -> x86-64 DBT

A Tier 2 blob provides 50+ pre-compiled native intrinsics for common
string and math operations.

Lua 5.4 Embedding
- ------------------

Server-side Lua scripting with sandboxed execution, bytecode cache,
and mux.* bridge API. @lua command, lua() and luacall() softcode
functions. Lua bytecode can also be compiled through the JIT pipeline
(83 opcodes supported).

SQLite Storage Backend
- ----------------------

SQLite is the always-on storage backend. All object metadata,
attributes, comsys channels, and @mail are stored in a single SQLite
database with write-through on every mutation. @dump performs a WAL
checkpoint only — no flatfile serialization, no fork. Crash durability
is immediate.

@search for simple cases routes to indexed SQL queries — O(log n)
instead of linear scan.

Networking
- ----------

  - GANL event-driven networking is mandatory (epoll/kqueue/IOCP).
  - SSL is always enabled (OpenSSL on Unix, Schannel on Windows).
  - MSSP (telnet 70) for MU* directory crawlers.
  - GMCP (telnet 201) with full protocol negotiation, A_GMCP
    attribute, and gmcp() softcode function.
  - WebSocket support (RFC 6455) with same-port auto-detection.
  - Connection logging to SQLite connlog table.

Unicode
- -------

  - Updated from Unicode 10.0 to 16.0.
  - NFC normalization at storage time.
  - Grapheme cluster indexing (UAX #29).
  - UCA/DUCET collation as default sort order.
  - CJK width-aware string operations.
  - @listen %0 retains typographic quotes.

New Commands
- ------------

  - @protect — player name reservation system.
  - @cron/@crondel/@crontab — scheduled triggers (Vixie cron syntax).
  - @include — include attribute contents in command stream.
  - @lua — execute Lua scripts.
  - @chatformat — per-player channel message formatting.

New Functions (50+)
- -------------------

  Protocols:    gmcp(), connlog(), addrlog()
  Scripting:    lua(), luacall(), benchmark(), asteval(), sandbox()
  Math:         mean(), median(), stddev(), bound()
  Lists:        unique(), linsert(), lreplace(), delextract()
  Strings:      strdelete(), strinsert(), strreplace(), strdistance(),
                garble(), caplist(), wrapcolumns()
  Registers:    letq(), unsetq(), listq()
  Sort:         sortkey()
  Regex:        regrep(), regrepi(), reglattr(), reglattrp()
  Locks:        lockencode(), lockdecode()
  Help:         dynhelp()
  Mail:         mailsend(), malias()
  Web:          url_escape(), url_unescape(), printf()
  Crypto:       encode64(), decode64(), hmac()
  JSON:         isjson(), json(), json_query(), json_mod()
  Unicode:      isalpha(), isdigit(), isupper(), islower(), ispunct(),
                isspace(), isword()
  Nospoof:      nsemit(), nspemit(), nsoemit(), nsremit()
  Short-circuit: firstof(), strfirstof(), allof(), strallof()
  Channels:     cbuffer(), cdesc(), cflags(), cmsgs(), cowner(),
                crecall(), cstatus(), cusers(), cmogrifier()
  DB queries:   ncon(), nexits(), nplayers(), nthings(), lplayers(),
                lthings()
  Other:        prompt(), moon(), soundex(), soundlike(), while(),
                crc32obj(), subnetmatch(), mapsql(), between()

  #lambda anonymous inline attributes for filter/map operations.

Module Extraction (in progress)
- -------------------------------

  - Comsys: channel management as a loadable COM module.
  - Mail: @mail read/flag/purge/folder/malias as a loadable COM module.

Modernization
- -------------

  - C++17 standard throughout.
  - PCG random number generator (replaces Mersenne Twister).
  - PCRE2 regex engine with JIT.
  - std::unordered_map replaces all CHashTable instances.
  - constexpr replaces ~317 #defines.
  - Standard <cstdint> types replace custom INT8..UINT64.
  - Reproducible builds.
  - 537 smoke test cases.

Bug Fixes
- ---------

Too many to list individually — see CHANGES.md. Highlights include
GANL crash fixes, IPv6 subnet comparison, objeval() privilege leak,
Reality Levels corrections, and dozens of long-standing issues from
the bug tracker.

Download:

  Full source (tar.gz):
    mux-2.14.0.1.unix.tar.gz
    SHA256: f53ffc97c9d5e7e7311687eb4590c67ec64eb3bf9dca497e99f9e2034a2e04d7

  Full source (tar.bz2):
    mux-2.14.0.1.unix.tar.bz2
    SHA256: ddcd76f331f73433f5fb46370c72d810b862f27a276468b0943a9f0922baf622

  Windows binary and source distributions also available.

All files are GPG-signed (.asc).

This is ALPHA software. Make backups. Report bugs to
brazi...@gmail.com.

- -- Brazil

-----BEGIN PGP SIGNATURE-----

iQIzBAEBCgAdFiEE8GWFNwJrhRGk25uvF80K5PxQP7EFAmm9PXIACgkQF80K5PxQ
P7EHdw/+JtCMAsMwxuTrZF3qKy3HUQCFw/9dykZyzKg/xlkrRtBTImbg0krQeag4
5WeQr/cMHSEW7KtFUfwSWr5HU2bFxHz4ly93uSRVND7oanxNQsb1yz1XjnFctyLY
IVZAffie4MlVQzqaTOphckLRiSE7F88eZt3p2NMseL0XCaltZEH/Jf0+TkMTqEav
7KJNp4jBBtvTW6er1BwdWpKE00ax4HtgKktfmJGipMTyaCYc2XnSICEC9zJ+xy3I
KSoOWdMFq9gLPRAyosJ2BX3cGGAPXi/FnafE07GjGg3+RZvZzILs2sb5UyCrRPjN
fRC20BGP74AxvgLS8wazXnXxbmlj95epbxLMwT9kHeZ3cEcveXgQBBf0kyjRNpsq
crNrCgUf6EMVR9jZou4FzI1Rr8MzR05sT2SNtvcys1UfQ3nFbPULBtVJCEm4XSkj
BE65htXEJ9+BlPAIkBbREQ+VuWq75i1p6E0Xh/zTRw4vyN154u1bsTJ0CK33+xNb
lkg74AHn9B08IBS1JqFDhntZw7R3wL4J5vBc9DMeL4Txx6csVxPyCi7M2OH6zp0E
6ATN75OsFZwcHZ04eQm5kS1OIQbp4cv104bPM30jg7FbnBsFPL9Dmd5fMfwmQ8DH
6YLPJ2Qbyr+QVN+fwdCWyUcPMdIFPcDOT9BO0a4hJT0NDHptFqA=
=TSAg
-----END PGP SIGNATURE-----

Reply all
Reply to author
Forward
0 new messages