% language=us

\startcomponent mk-iitoiv

\environment mk-environment

\chapter{From \MKII\ to \MKIV}

Sometime in 2005 the development of \LUATEX\ started, a further
development of \PDFTEX\ and a precursor to \PDFTEX\ version~2. This
\TEX\ variant will provide:

\startitemize[packed]
\item 21--32 bit internals plus a code cleanup
\item flexible support for \OPENTYPE\ fonts
\item an internal \UTF\ data flow
\item the bidirectional typesetting of \ALEPH
\item \LUA\ callbacks to the most relevant \TEX\ internals
\item some extensions to \TEX\ (for instance math)
\item an efficient way to communicate with \METAPOST
\stopitemize

In the tradition of \TEX\ this successor will be downward
compatible in most essential parts and in the end, there is
still \PDFTEX\ version~1 as fall back.

In the mean time we have seen another unicode variant show up,
\XETEX\ which is under active development, uses external
libraries, provides access to the fonts on the operating system,
etc.

From the beginning, \CONTEXT\ always worked with all engines. This
was achieved by conditional code blocks: depending on what engine
was used, different code was put in the format and|/|or used at
runtime. Users normally were unaware of this. Examples of engines
are \ETEX, \ALEPH, and \XETEX. Because nowadays all engines
provide the \ETEX\ features, in August 2006 we decided to consider
those features to be present and drop providing the standard \TEX\
compatible variants. This is a small effort because all code that
is sensitive for optimization already has \ETEX\ code branches for
many years.

However, with the arrival of \LUATEX, we need a more drastic approach.
Quite some existing code can go away and will be replaced by different
solutions. Where \TEX\ code ends up in the format file, along with
its state, \LUA\ code will be initiated at run time, after a \LUA\
instance is started. \CONTEXT\ reserves its own instance of \LUA.

Most of this will go unnoticed for the users because the user
interface will not change. For developers however, we need to
provide a mechanism to deal with these issues. This is why, for the
first time in \CONTEXT's history we will officially use a kind of
version tag. When we changed the low level interface from Dutch to
English we jokingly talked of version~2. So, it makes sense to
follow this lead.

\startitemize[packed]

\item \notabene {\CONTEXT\ \MKI}\quad At that moment we still had a
low level Dutch interface, invisible for users but not for developers.

\item \notabene {\CONTEXT\ \MKII}\quad We now have a low level English
interface, which (as we indeed saw happen) triggers more development by
users.

\item \notabene {\CONTEXT\ \MKIV}\quad This is the next generation of
\CONTEXT, with parts re||implemented. It's an at some points drastic
system overhaul.

\stopitemize

Keep in mind that the functionality does not change, although in
some places, for instance fonts, \MKIV\ may provide additional
functionality. The reason why most users will not notice the
difference (maybe apart from performance and convenience) is that at
the user interface level nothing changes (most of it deals with
typesetting, not with low level details).

The hole in the numbering permits us to provide a \MKIII\ version
as well. Once \XETEX\ is stable, we may use that slot for \XETEX\
specific implementations.

As per August 2006 the banner is adapted to this distinction:

\starttyping
...  ver: 2006.09.06 22:46 MK II  fmt: 2006.9.6  ...
...  ver: 2006.09.06 22:47 MK IV  fmt: 2006.9.6  ...
\stoptyping

This numbering system is reflected at the file level in such a way
that we can keep developing the way we do, i.e.\ no files all over
the place, in subdirectories, etc.

Most of the system's core files are not affected, but some may be, like
those dealing with fonts, input- and output encodings, file handling,
etc. Those files may come with different suffixes:

\startitemize

\item \type {somefile.tex}: the main file, implementing the interface
and common code

\item \type {somefile.mkii}: mostly existing code, suitable for good
old \TEX\ (\ETEX, \PDFTEX, \ALEPH).

\item \type {somefile.mkiv}: code optimized for use with \LUATEX, which
could follow completely different approaches

\item \type {somefile.lua}: \LUA\ code, loaded at format generation time
and|/|or runtime

\stopitemize

As said, some day \type {somefile.mkiii} code may show up. Which
variant is loaded is determined automatically at format generation
time as well as at run time.

\stopcomponent
