You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
mitogen/docs/history.rst

65 lines
2.9 KiB
ReStructuredText

History And Future
==================
History
#######
The first version of econtext was written in late 2006 for use in an
infrastructure management program, however at the time I lacked the pragmatism
necessary for pushing my little design from concept to a working
implementation. I tired of it when I couldn't find a way to combine every
communication style (*blocking execute function, asynchronous execute function,
proxy slave-of-slave context*) into one neat abstraction. That unification
still has not happened, but I'm no longer as burdened by the problem.
Every few years I would pick through the source code, especially after periods
of working commercially with some contemporary management systems, none of
which in the meantime had anything close to as neat an approach to running
Python code on remote machines, and suffered from shockingly beginner-level
bugs such as failing to report SSH diagnostic messages.
And every few years I'd put that code down again, especially since moving to an
OS X laptop where :py:func:`select.poll` was not available, the struggle to get
back on top of the project seemed more hassle than it was worth.
That changed in 2016 during a quiet evening at home with a clear head and
nothing better to do, after a full day of exposure to Ansible's intensely
unbearable tendency to make running a 50 line Python script across a 1Gbit/sec
LAN feel like I were configuring a host on Mars. Poking through what Ansible
was doing, I was shocked to discover it writing temporary files everywhere, and
uploading a 56KiB zip file apparently for every playbook step.
.. figure:: _static/wtf.gif
All contemporary Devops tooling
Searching around for something to play with, I came across my forgotten
``src/econtext`` directory and somehow in a few hours managed to squash most of
the race conditions and logic bugs that were preventing reliable operation,
write the IO and log forwarders, rewrite the module importer, move from
:py:func:`select.poll` to :py:func:`select.select`, and even refactor the
special cases out of the main loop.
So there you have it. As of writing :py:mod:`econtext.core` consists of 550
source lines, and those 550 lines have taken me almost a decade to write. I
have long had a preference for avoiding infrastructure work commercially, not
least for the inescapable depression induced by considering the wasted effort
across the world caused by universally horrific tooling. This is my small
contribution to a solution, I hope you find it useful.
Future
######
* Connect back using TCP and SSL.
* Python 3 support.
* Windows support via psexec or similar.
* Investigate cPickle safety and potentially replace it.
* Predictive import: reduce roundtrips by pipelining modules observed to
probably be requested in future.
* Provide a means for waiting on multiple
:py:class:`Channels <econtext.core.Channel>`.
* Comprehensive integration tests.