% language=us runpath=texruns:manuals/followingup \startcomponent followingup-retrospect \environment followingup-style \startchapter[title={Retrospect}] % \startsection[title={Introduction}] % \stopsection At some point in a new development, and \LUAMETATEX\ feels like that, there comes a moment when you need to make a decision. In this case the question is if we need to make hybrid \MKIV\ and \LMTX\ files or do the same as with the transition from \MKII\ to \MKIV: use two variants. For \TEX\ files a conditional section has only overhead in the format generation as skipped code doesn't end up in the format. With conditional \LUA\ code it's different: the ignored section is still present in byte code. But even for \TEX\ code a conditional section is not entirely invisible: encountered control sequences are still creating (bogus) hash entries. So the question is: do we go lean and mean and do we omit historic non|-|\LMTX\ code? A comparison with the transition from \MKII\ is actually relevant. For instance right from the start \CONTEXT\ had an abstract backend layer, and support for engines and output formats was loaded on demand. There was never any specific code in the core. With \MKIV\ we changed the model but there is still some abstraction. In \MKII\ we also had to deal with encodings and that has consequences for font handling, language support and input encodings. In \MKIV\ all that changed: internal all is \UTF, as is normally the input (but we can still use encodings), and fonts are always mapped to \UNICODE. Anyhow, much that made sense for \MKII\ was no longer relevant for \MKIV: code could be dropped. But some mechanisms were reimplemented using \LUA: code was added. The user interface stayed the same but in \MKIV\ uses a conceptually different approach deep down. Therefore the code base was split in \MKII\ and \MKIV\ files but this transition was made stepwise. So should the same happen with \LMTX ? There is not that much that needs to be added to \MKIV\ in terms of functionality. In the end, for the \TEX\ code the differences are not that substantial, so there we can consider loading different files. The files involved are rather stable so there is not much danger of functionality between \MKIV\ and \LMTX\ getting out of sync. The same is true for the \LUA\ files, although synchronization is probably more an issue there. Another option is to always assume that \LUAMETATEX\ is used. For testing regular \LUATEX\ (patches) we can just use a 2019 stable \CONTEXT. But in order for users to benefit from developments we then expect them all to move on to \LMTX. Using a frozen 2019 version with upcoming \LUATEX\ is no big deal as we've done the same with \MKII\ and that worked out okay. When we started with \CONTEXT\ development in the previous century we were doing pretty weird things. I remember getting comments that what we did made no sense because it was not what \TEX\ was meant for and some even suggested that it disrupted the picture. Highly structured input, a clear separation (and abstraction) of front and backend, inheritance and user defined styling, integrated support for \XML, embedded \METAPOST, advanced interactive documents, handling of fonts en encodings, the list is long. Occasionally some of the things that came with \CONTEXT\ were ridiculed, like the fact that a script was used to manage the (multiple) run(s), but in the end, look at how many script are around now. Some even wondered why we used \TEX\ at all because \TEX\ was meant for typesetting math. And who needs \XML\ let alone \MATHML ? Or interactive \PDF\ features? Much in \CONTEXT\ and its management got smoother over time and the \LUAMETATEX\ engine fits nicely into this evolution. It's hard to keep the cutting edge but at least we have the instruments. During \BACHOTEX\ 2019 (end of April, beginning of May) this project was presented the first time outside the \CONTEXT\ community. During that meeting Mojca Miklavec, one of the driving forces behind \CONTEXT, upgraded the compile farm that already was used to compile (intermediate versions of) \LUATEX\ and \TEXLIVE\ to also compile \type {pplib} (handy for development) and \LUAMETATEX. This permits us to fine|-|tune the \type {cmake} setup which is still work in progress. And, also further improvements take place in the code base itself. One of the properties of open source is that one can build upon an existing code base, so when at \BACHOTEX\ Arthur announced that he was going to make a merge of \XETEX\ (which he maintains) and \LUATEX\ no one was surprised. But it could be a strong argument for a rather strict code freeze: spin|-|offs need stability. I've been told that there are now several projects where more libraries (like Harfbuzz) get integrated. Those cases don't influence the parent but here stability of the original also is expected, unless of course additional features go in these engines, which itself creates instability, but that's another matter. One could actually argue that the arrival of variants defeats the argument that stability is important: if a macro package uses new features, it needs to adapt, and naturally (temporary) issues might show up. Such are the dynamics of todays software development. History in general shows that not that much is persistent (or even accumulative) and programs are probably the least, so maybe the whole stability aspect has lost its relevance. \footnote {In a similar way as that the argument \quotation {Publishers want this or that, so we as \TEX\ community need to provide it.} is no longer that relevant because publishing is now more a business model than vocation.} Of course \LUAMETATEX\ is also a follow up, but one of the ideas behind it was that I could use it as platform for (independent) experiments that could result in code being put into \LUATEX. Also, the changes have a limited impact: only \CONTEXT\ will be affected. \footnote {So maybe, in the end, stability boils down to \quotation {The engine behaves the same and the \CONTEXT\ that comes with it exploits its features as good as possible}.} It is not feasible to make \CONTEXT\ work with all kind of engines that in practice are not used by its users. For instance, after \XETEX\ showed up it went through several iterations or font rendering, so we never really spent time on the low level features that it provided (there was no demand anyway). One cannot simply claim that one method is better than another that replaces it and expect constant adaptation (probably for the sake of a few potential users). There simply is no \quote {best} engine and no \quote {perfect} solution. Another aspect is that when we would adapt \CONTEXT\ to \LUATEX\ variants the dependencies on specific functionality that itself depends on the outside world is kind of unavoidable. Especially languages and fonts are fluid and for the average user there is not that much difference in that department. Should we really complicate matters for a few (potential) users? In \CONTEXT\ support like that is added on demand, driven by specific needs of users who use \TEX\ for a reason and are willing to test. There's enough huge and complex software around that demonstrates what happens when programs are extended, keep growing, their code base becoming more complex. Such a process doesn't really fit in my ideas about for \TEX. We positioned 1.10 as long term stable, with the option to add a few handy things in the long run. For sure there are niches to fill and it is a fact that the \TEX\ community can deal with variants of engines: just look at the different \CJK\ engines around, with prefixes like \type {p}, \type {up}, \type {ep}, etc. But the question is, where does that put further \LUATEX\ development? And, more important, what consequences does it have for the \CONTEXT\ code base? The reason I mention this is that I had in mind to eventually backport features that work out well in \LUAMETATEX. I also mentioned that in order to support stock \LUATEX\ it made no sense to split the \CONTEXT\ code base. After all, a few conditional sections could deal with the difference between \LUATEX\ and \LUAMETATEX: some differences could be temporary anyway. But, given recent developments it actually made sense to split the code base: why spent time on backporting when the engine user base is spread over different spinoffs. I can better just assume \CONTEXT\ to exclusively use \LUAMETATEX\ and that other macro packages use (one or more) \LUATEX\ variants. I can then keep the generic code up to date and maybe occasionally add some proven stable features. It is also no big deal to keep the minimum subset needed for (plain) font handling compatible, assuming \LUATEX\ compatibility, as in the end that engine is the benchmark, especially when I strip it a bit from features not needed outside \CONTEXT. Thoughts like this show how fragile plans and predictions are: within a year one has to adapt ideas and assumptions. But it also proves that \LUAMETATEX\ was a good choice for \CONTEXT, especially because it is bound to \CONTEXT\ development, which keep the users independent and isolated from developments that don't mind that much the (side) effects on \CONTEXT. % \footnote {I mentioned stability a few times, but this aspect is somewhat vague: % often I see complaints about \LUATEX, or comparisons with other engines, that % have nothing to do with the engine per se, but more with misunderstanding and|/| % assumptions, strange usage, maybe or even likely bad user code, comparing apples % and pears, etc. The term \type {bug} is very popular and often a preferred % qualifications, and it sounds even more impressive when it's qualified as a bug % one. I guess that a more tight coupling between specific engines and macro % packages at least that aspect becomes cleaner.} Around the \CONTEXT\ meeting (or maybe a bit later) we hope to have the new installation infrastructure stable too (currently it is also experimental). By that time it will also be clear how we will proceed with the \LMTX\ project. In the meantime I have decided so put \LUAMETATEX\ specific files alongside the \MKIV\ files, simply because I always need to be able run stock \LUATEX. In order to show the close relationship these files are flagged as \MKXL, so we bump from \quote {Mark Four} to \quote {Mark Fourty}. The suffixes \type {mkiv}, \type {mkvi} and \type {mpiv} get company from \type {mkxl}, \type {mklx} and \type {mpxl}. Depending on backporting features, files can come and go. I'm not yet sure about the \LUA\ files but the \type {lmt} suffix is already reserved for future use. \footnote {This is because \LUA\ 5.4 introduces some new syntax elements and where we can get away with the difference between 5.2 (\LUAJITTEX) and 5.3 (\LUATEX) such a syntax change is more drastic.} All this is also driven by (user) demand. Consider this (and these thoughts) a snapshot. There will be the usual reports on experiments and developments. And in due time there will also be a manual for \LUAMETATEX. \footnote {In fact it already lives on my machine but I'm not in ready yet for the usual complaints about manuals, so I'm not in that much of a hurry.} And yes, at some point I have to make up my mind with respect to backporting features that have proven to be useful. % \footnote {Actually, it seems to come with the Internet: folks wining on whatever % platform about lack of documentation (most of the \CONTEXT\ distribution actually % is documentation and quite some articles are, have been, and will be written) or % possible bug (always huge, even if no bug at all) without exposing much actual % research or knowledge about these matters. Write, post and shout before thinking % it through, increase the number hits on your profile. It's for sure a way to make % something end up at the bottom of my to do list, if at all. A valid response % could be: whatever did you contribute to the community that I myself (or % \CONTEXT\ users) can benefit from. Quite likely: nothing (or little)! It looks % like even the normally friendly \TEX\ community sometimes gets infected by this.} \stopchapter \stopcomponent