eyes black and white

Anarchist Restoration

Last night I had this dream of what might make an interesting novel of political fiction. In this timeline, the Republic of China (Taiwan) alone in the world has kept a delegation for the Republic of (South) Vietnam. The RVN embassy is still occupied by an official Vietnamese delegation, reduced to three people living off a small stipend from the Republic of China, that hasn't increased since 1975, with a Chinese guard on duty during the day. One night, a group of Vietnamese revolutionaries break in and take over the delegation, led by a notorious anarchist, a martial artist, and an international lawyer. They carry with them an old drunkard who happens to have a claim as heir to the ancient throne through a previous Emperor's affair, and declare the Restoration of his Dynasty. They somehow convince the old delegates to join their cause. Of course, Taiwan will be taken aback by this revolution, and immediately revoke what stipend and guard they were granting to the delegation; but the RoC will not dare violate the sovereignty of the entity they tried to prop up so long — at least not until and unless it itself violates international law. And so Taiwan will follow a wait and see policy.

The anarchist takes the new Emperor in his Imperial Suite, a reserved suite on the top floor of the building. He leads the other men upstairs with the drunk man on tow. However, an astronomical society has taken over all floors of the building but the ground floor and entresol; the rent they pay is how the delegate made his comfortable living despite the low stipend from RoC. Trying to keep going to the top floor, the men discover that it is only accessible by a ladder leading to the higher levels of the telescope, which is impractical for men carrying a drunkard. However, a late-staying astronomy student explains that they already reached the original top floor, the observatory having been added later. Part of the Imperial Suite was kept, but as an impeccably preserved museum room inside the offices, not really usable as an actual room. The revolutionaries still use it symbolically that night, but in the morning, the Emperor will "decide" that from now on he shall occupy a simple maid's room in the entresol.

When the drunkard wakes up with a major hangover, the anarchist talks to him with deference due to the Emperor, yet explains in no uncertain terms that he is in control as the new Regent. The Regent has one goal for the Emperor: make Him become a dignified figure (no more alcohol) who will become relevant as an assassination target. There only three ways out of the embassy: installed on his rightful throne in Hue, dead, or abdicated in favor of another heir approved by the Regent. His fortune will follow that of the Restoration: ascetic for now; but princesses and concubines, fast cars and private jets if they are wildly successful. And a lot of it will depend on the Emperor's ability to project dignity indeed.

The first appointments of the day are for the new Emperor and his Regency to receive the CEOs of various international companies of mercenaries. The Empire offers that it will setup its Court in Exile; companies can file actions; the Court will decide whether there is a Casus Belli, and then declare war on the enemy and grant the mercenary a letter of marque in exchange for titles in the loot and/or conquest. The mercenaries will however then have to follow the strictures of an official army and be subject to Court Martial for transgressions. Of course most governments won't recognize the Empire and its letters of marque. At least in the beginning. But that's where a mutually profitable relation is born: by respecting international law better than existing governments, the Companies and the Empire can lend Credence and Legitimacy to each other.

Selling flags of convenience, setting up Court, delivering passports, negotiating mutual recognition with odd States, maintaining good relationships with Taiwan, making statements to the press, teaching the Emperor how to be sovereignly (and preparing an online course on Natural Law based on those teachings), preparing a secret contingency plan for when Taiwan turns inimical or falls, plotting against the Vietnamese communist regime, dealing with spooks from various countries and non government entities, improving internal security, drawing an internet fan base as well as government backed opposition from SJW groups, etc., are daily activities of the Regency. All of that until... well, next episode, if any

eyes black and white

A tale of many nests

This short essay will tell you about my favorite macro, nest, discuss the modularity of syntax extension, and use the implementation of that macro as an illustration for how to use defmacro, syntax-rules and syntax-case, providing along the way a comparison between these respective macro definition systems.

Using the nest macro

When I started using Scheme as my main Lisp, the first macro I wrote was the nest macro. What macro? The nest macro. The one that in Common Lisp helps my code avoid drifting hopelessly to the right as I nest binding form inside binding form... by doing the nesting for me. To illustrate the kind of issues that I'm concerned with, consider the Common Lisp code snippet below:

Collapse )
eyes black and white

Bohemian Rhapsody as the Grief of Coming Out Gay

In this series where I decrypt art for you, here is Bohemian Rhapsody, by Queen. Unlike my previous contributions, about Lovecraft and Picasso, I did not figure this one by myself; rather it was clearly suggested by some biography of Freddie Mercury that I once watched. I still think it deserves to be better known.

Freddie Mercury was sexually attracted to men. But his conservative Parsi mom had taught him all his life that homosexuality was of the devil. So, putting aside some transgressive experiences, he had taken a girlfriend. But eventually he started a homosexual affair in earnest, and after a year or two came out to himself, to his girlfriend and to his friends. One day, in the middle of these events, he came excited to his friends and partners of Queen, with this great song that he had been working on for years, even decades (some witnesses told of hearing him dabbling with the "just killed a man" line in the 1960s), that finally had come to fruition, and they spent three weeks recording it, singing it over and over, overdubbing themselves on analog tape tracks that got overwritten many times.

So, what is the meaning of the song? It's about coming out as gay to his mother. "Mama, just killed a man / Put a gun against his head, pulled my trigger, now he's dead" is about receiving fellatio from a man; no man dies except metaphorically. The "monstruosity" that the character is being damned for, is homosexuality. The song confronts the conflicted emotions of shame and fear of rejection, and goes through the "five stages of grief", from denial ("Is this the real life? Is this just fantasy") to final acceptance ("Nothing really matters to me"), through anger ("Thunderbolt and lightning"), bargaining ("Easy come, easy go, will you let me go?") and depression ("Beelzebub has a devil put aside for me, for me, for me!"). His mother cries ("Mama, ooh, didn't mean to make you cry"), she tries to convince him to abandon his ways ("Just got to out / Just got to get right out of here"), she gets angry ("Oh, baby, can't do this to me, baby!"), and though she has only reached the second stage of grief by the end of the song, Freddie already has completed his cycle, and some day so will she complete hers — or maybe not. Probably for the sake of not losing her, Freddie never publicly came out.

So there. The meaning of "Bohemian Rhapsody". It is beautiful because it comes from the deepest of the heart, the greatest emotional conflict that Freddie had had to face, that shook him for decades, and to which he finally found a resolution. Though this conflict was his own, the emotions are universal, for each of everyone's emotional conflict — and they here find their aggrandized operatic expression, in maybe the most beautiful song of all times.

eyes black and white

Taking private commerce seriously

With many authoritarian governments cracking down on peaceful exchange and commerce, including via electronic means, there is clearly a need for discussion and e-commerce software with good privacy and security — hence a market opportunity to provide the technical means to achieve such peaceful human interaction. Of course I am only discussing the means of avoiding oppression by illegitimate governments, and not at all about escaping the just surveillance of what legitimate governments there may be. You're each big enough to distinguish oppression from justice by yourself, and to know when to surrender even to oppressive governments.

To seize this opportunity, a group of technically advanced software developers could write general-purpose secure discussion and e-commerce software. To demonstrate their technology, these developers would maintain a discussion and commerce site beyond any legal reproach: that site would defensively follow every applicable regulation in every single country it is allowed to operate: this includes restricting speech and commerce to what is uncontroversially legal, paying all relevant taxes, and tracking users no less (though no more) than legally required. Of course, the software being open source, anyone can trivially customize and deploy it with minimal configuration, making their own responsible choices as to which oppressive laws to flaunt in which oppressed countries. But official maintainers of the software are barred from ever operating or having operated such a site. A clean separation is essential to avoid any legal trouble, and to keep the project running, accepting funds and attracting academic contributions. Thus, the open source project may accept anonymous donations (within legal limits) and people can post bounties on its bug tracker. No open source developer will ever touch anything illegal — they just help build basic secure internet infrastructure.

There are many technical challenges, with two main themes, distinct but related: raising the state-of-the-art in secure software, and rejecting those mainstream technologies that are insufficiently secure.

The first theme, raising the state-of-the-art in secure software, is because every government crackdown on private networks thereby demonstrates that security is currently insufficient. Now, it's not just a matter of "currently": security is a race. You don't have to be perfect, you only have to be better than the other guy; but it's also not enough to be perfect, you still have to be better than the other guy. And as the other guy improves, you must improve ahead of him if you want to stay ahead; and you want to stay ahead if you don't want to spend the rest of your life in prison. Offense has a permanent team to improve its position in the race. Defense also needs a permanent team if it wants to compete. And that is why a dedicated team is needed.

Also, "technology" must be understood broadly: it is not just a matter of the software, or its development process, but also of the people running it. Operational security requires operators to follow a strict discipline, jumping through sufficient hoops, every single the time, to cover their tracks. Software can help with it, by automating what can be automated, by providing checklists for recurrent human actions, by offering tutorials and training and documentation, etc. Some of the actions shall remain secret and/or context-specific, and each operator of a private site will have to extend the software in ways that make sense.

Obviously technology is also a matter of software, and of software development process. On the pure software technology front, "raise the security level" means that privacy developers should use languages, libraries and protocols that will minimize the attack surface of their systems, while maintaining sufficient (and as high as affordable) productivity, within their development budget. Otherwise, they are likely to lose the race to their competitors, and hence to their enemies: as the joke goes, you don't always have to run faster than the tiger, only faster than the other preys that the tiger is just as interested in. In particular, the privacy developers should invest in programming languages and operating system infrastructure with formal semantics, limits on side-effects, verified compilers, verified protocols, full abstraction for domain-specific languages, etc.

As regards the software development process, rigorous design, extensive documentation, precise specification, comprehensive testing, including fuzz testing, stringent review, are all necessary, but not sufficient, to promote quality. Reviews can be facilitated using automated linting and code formatting, that remove syntactic concerns from the reviewers so they can focus on the essential; but even with this burden removed, review is still error prone, the reviewers of a change may be missing context, and unobvious bugs or underhanded backdoors can pass through. Therefore regular code walkthroughs of the entire codebase, especially before release, are a good idea. And that includes any software dependencies. To make these walkthroughs possible, an emphasis on simplicity is essential — in the style of Alan Kay whose ViewPoints Research Institute (VPRI) built a complete software system in twenty thousand lines of code, including compiler, network stack and graphical interface, though excluding device drivers, backward compatibility modules, and various extensions.

And this brings us to the second main theme: rejecting those mainstream technologies that are insufficiently secure. Most mainstream technology is not optimized for security at all; security comes as an afterthought. Typical software environments involve huge codebases with gaping security holes and gigantic attack surfaces, in which it's OK for security to be breached, because there isn't too much money at stake, operators will be there to clean up the mess and restore from backup, and if needed government agents will use supreme force to go after the attackers, not the defenders. But these common standards of security that are good enough for mainstream use are just not good enough when developing software meant to resist attack by oppressive government agencies themselves. And this means much of the existing body of software must necessarily be excluded from the trusted code base used to conduct private commerce. In particular, if the choice of protocols necessitate the use of the giant gas factories that modern web browsers have become, it's game over. These beasts are not likely to be made (much less kept) secure any time soon.

Insecure by construction includes a lot of current technologies: HTML, CSS, Javascript, SSL, HTTPS, HTTP, maybe even long-running end-to-end TCP connections, they all have to go. Programming languages such as C++, C, Perl, Python, PHP, Ruby, Java, will also have to be wholly avoided. Safe replacements of some of these technologies may have to be developed where these technologies possess unrivaled features, and these features are not completely wrongheaded with respect to security. In developing these replacements, the lessons of these existing technologies can be preserved, and even large parts of the code base for these technologies can be ported. Yet when a safer technology replaces an unsafe one, it is important to not try to "look alike" the previous popular but unsafe technology, because willful confusion between similar technologies is itself a surface of attack by malicious actors. The safe choice is to be explicitly incompatible with any unsafe standard (or worse insufficiently specified semi-standard), and to fail fast and loud when the attempted use of unsafe technologies is detected. Trying to provide "best effort" compatibility is doomed, as it will open confused users to security issues.

Authentication by centralized authorities, whether through SSL certificates or secure DNS, is antithetical to the purpose of private commerce. They may not be used beyond bootstrapping the installation of basic secure software. This disqualifies HTTPS as a valid protocol, even if some "extension" to it ever were to one day support decentralized certificates as well as centralized ones: its very support for centralized authorities makes it a liability by which users may be confused into connecting using the wrong authorities. Instead, a private commerce protocol must exclusively rely on decentralized identities; the simplest naming scheme might be to read (digests of) cryptographic public keys as sequences of words using (some variant of) diceware (a bit in the style of Urbit having pronounceable names) — and always insisting that users check the full sentence before they complete their first connection. When users use stateful clients, these should remember connection keys and accept aliases (a bit in the style of SSH), and they should warn loudly against partial matches or near-matches.

Network connections may have to be avoided for private commerce, because long-running TCP connections can help identify participants. To keep communications private against a spy router at your ISP, at other ISPs nationwide and maybe even worldwide, and at anonymizing network nodes, might involve partaking in a mix relay network into which you'd inject traffic at a constant rate through many intermediate nodes. Doing it might might both add a lot of latency and considerably restrict bandwidth. Whatever the means to achieve privacy, they have a price that is likely incompatible with using the latest and greatest web browsing technologies en vogue on the non-private Internet. Private commerce operators must accept that their sites must intrinsically function with much lower latency and throughput than non-private sites. Goodbye, Web 2.0, AJAX, HTML5, rich interfaces and bloated pages; no cookies, no personalization, no language or format negotiation. Private commerce technologies should revert to Web 1.0 and earlier: asynchronous store-and-forward mailboxes, where marketplaces transmit catalogs of data, or search engines return hundreds of results, that users browse locally before to mail in order forms.

Bandwidth and security limitations mean that private commerce may be made mainly a lot of text, which may be "rich", but not too rich: there will never be any code in it (no Javascript), and no style engine capable of expressing "weird machines" (like CSS); only a well-specified, precisely-versioned, and strictly-validated, variant of markdown (all protocols should be well-specified, precisely-versioned, and strictly-validated). The only style parameters will be screen size and font size, and they will be under the exclusive control of the client, not at all of the server. There will be few pictures and sounds, at a premium; video will be a rare luxury; interactivity will be extremely limited. Private commerce will be austere compared to the public web. But it will be private, and, secure.

How much will the development of such private commerce infrastructure cost? Probably millions of dollars over several years. But many existing pieces of software can be leveraged: Peer-to-peer protocols, mix networks, cryptographic libraries, distributed hash-tables, cryptocurrencies, decentralized naming protocols, etc. Yet, probably few of those pieces can be used as is, and even though that can will require integration into a coherent system that securely ties all these technologies together. The development team must publish a set of protocols and a reference implementation of clients and servers. This trusted code base should not include anything like a modern web browser, or any other untrustable blob of software bloat. (This disqualifies OpenBazaar, anything to do with the Tor Browser, etc.) Others may feel free to fork and extend, or reimplement, the code base; they may even add or remove a backdoor or two, improve the interface or its implementation, contribute features — the code is opensource. The core development team will focus on providing the core functionality, making sure that it's tightly secure where it should, and extensible where it could.

What's the point of a super-secure cryptocurrency if the weakest link in using it is a terribly insecure client?

PS: Of course a secure client also requires a secure operating system and a secure computer below it, but that's another issue. See my speech Who Controls Your Computer? For the moment, I'd recommend to run secure client software on a dedicated computer that doesn't run any other application (say, a cheap ARM board with its own display and keyboard), and assume some general Linux distribution wasn't specifically hacked to target you (and doesn't have such gaping holes that everything is lost for everyone).

eyes black and white

Design at the confluence of programming languages and build systems

This short article discusses upcoming changes and future challenges for ASDF, the Common Lisp build system. It also draws lessons for a hypothetical successor to ASDF, for build systems in general, languages in which to write them, and languages that would have an internal build system that could rival with modern build systems.

ASDF, "Another System Definition Facility", is the de facto standard build system for Common Lisp (CL). It is relatively lightweight (13 kloc, over half of which for the portability layer UIOP, the "Utilities for Implementation- and OS- Portability"), quite portable (17 supported implementations), configurable (though importantly it "just works" by default), well-featured (it can create standalone executables), extensible (e.g. with support for linking C code, or for compiling FORTRAN through Lisp, etc.). But it lacks many features of modern build systems like e.g. Bazel: it does not support determinism and reproducibility, distribution and caching, cross-compilation to other platforms, building software written in languages other than CL, integration with non-CL build systems, management of multiple versions of the same software, or scaling to millions of files, etc. Historically, these limitations are due to ASDF being at heart an in-image build system in direct line of the original Lisp Machine DEFSYSTEM: it is designed to build and load software into the current Lisp image. But the challenges in possibly transforming ASDF into a modern build system touch limitations of Common Lisp itself and tell us something about language design in general.

I have essentially two development branches more or less ready for merge in the upcoming ASDF 3.3: the "plan" branch that provides proper phase separation (briefly discussed in my ELS 2017 demo), and the "syntax-control" branch that binding for syntax variables around ASDF evaluation (briefly discussed in my ELS 2014 extended article, section 3.5 "Safety before Ubiquity").

Phase Separation

The first branch solves the problem of phase separation. The branch is called "plan" because I started with the belief that most of the changes would be centered around how ASDF computes its plan. But the changes run deeper than that: 970 lines were added or modified all over the source code, not counting hundreds more were moved around as the code got reorganized. That's double the number of lines of the original ASDF, and it took me several months (part time, off hours) to get just right. Still, it is up-to-date, passes all tests, and works fine for me.

To understand what this is about, consider that a basic design point in ASDF 1.0 to 3.2 is that it first plans your entire build, then it performs the plan. The plan is a list of actions (pair of OPERATION and COMPONENT), obtained by walking the action dependency graph implicitly defined by the COMPONENT-DEPENDS-ON methods. Performing the plan is achieved by calling the PERFORM generic function on each action, which in turn will call INPUT-FILES and OUTPUT-FILES to locate its inputs and outputs.

This plan-then-perform strategy works perfectly fine as long as you don't need ASDF extensions (such as, e.g. cffi-grovel, or f2l). However, if you need extensions, there is a problem: how do you load it? Well, it's written in Lisp, so you could use a Lisp build system to load it, for instance, ASDF! And so people either use load-system (or an older equivalent) from their .asd files, or more declaratively use :defsystem-depends-on in their (defsystem ...) form, which in practice is about the same. Now, since ASDF up until 3.2 has no notion of multiple loading phases, what happens is that a brand new separate plan is computed then performed every time you use this feature. This works well enough in simple cases: some actions may be planned then performed in multiple phases, but performing should be idempotent (or else you deserve to lose), therefore ASDF wastes some time rebuilding a few actions that were planned before an extension was loaded that also depended on them. However, the real problems arise when something causes an extension to be invalidated: then the behavior of the extension may change (even subtly) due to its modified dependency, and the extension and all the systems that directly or indirectly depend on should be invalidated and recomputed. But ASDF up until 3.2 fail to do so, and the resulting build can thus be incorrect.

The bug is quite subtle: to experience it, you must be attempting an incremental build, while meaningful changes were made that affect the behavior of an ASDF extension. This kind of situation is rare enough in the small. And it is easily remedied by manually building from scratch. In the small, you can afford to always build from scratch the few systems that you modify, anyway. But when programming in the large, the bug may become very serious. What is more, it is a hurdle on the road to making a future ASDF a robust system with deterministic builds.

Addressing the issue was not a simple fix, but required deep and subtle changes that introduce notions neglected in the previous simpler build models: having a session that spans multiple plan-then-perform phases and caches the proper information not too little not too much; having a notion that loading a .asd file is itself an action that must be taken into account in the plan; having a notion of dynamically detecting the dependencies of loading a .asd file; being able to check cross-phase dependencies before to keep or invalidate a previously loaded version of a .asd file without causing anything to be loaded in the doing; expanding the state space associated to actions as they are traversed potentially many times while building the now multi-phase dependency graph. And all these things interfere with each other and have to be gotten just right.

Now, while my implemented solution is obviously very specific to ASDF, the issue of properly staging build extensions is a common user need; and addressing the issue would require the introduction of similar notions in any build system. Yet, most build systems, like ASDF up until 3.2, fail to offer proper dependency tracking when extensions change: e.g. with GNU Make you can include the result of a target into the Makefile, but there is no attempt to invalidate targets if recipes have changed or the Makefile or some included file was modified. Those build systems that do implement proper phase separation to track these dependencies are usually language-specific build systems (like ASDF); but most of them (unlike ASDF) only deal with staging macros or extensions inside the language (e.g. Racket), not with building arbitrary code outside the language. An interesting case is Bazel, which does maintain a strict plan-then-perform model yet allows user-provided extensions (e.g. to support Lisp). However, its extensions, written in a safe restricted DSL (that runs into plan phase only, with two subphases, "load" and "analysis") are not themselves subject to extension using the build system (yet the DSL being a universal language, you could implement extensibility the hard way).

Fixing the build model in ASDF 3.3 led to subtle backward-incompatible changes. Libraries available on Quicklisp were inspected, and their authors contacted if they depended on modified functionality or abandoned internals. Those libraries that are still maintained were fixed. Still, I'd just like to see how compatible it is with next month's Quicklisp before I can recommend releasing these changes upon the masses.

Syntax Control

The current ASDF has no notion of syntax, and uses whatever *readtable*, *print-pprint-dispatch*, *read-default-float-format* or many other syntax variables are ambient at the time ASDF is called. This means that if you ever side-effect those variables and/or the tables that underlie the first two, (e.g. to enable fare-quasiquote for the sake of matching with optima or trivia), then call ASDF, the code will be compiled with those modified tables, which will make fasl that are unloadable unless the same side-effects are present. If systems are modified and compiled that do not have explicit dependencies on those side-effects, or worse, that those side-effects depend on (e.g. fare-utils, that fare-quasiquote depends on), then your fasl cache will be polluted and the only way out will be to rm -rf the contaminated parts of the fasl cache and/or to build with :force :all until all parts are overwritten. Which is surprising and painful. In practice, this means that using ASDF is not compatible with making non-additive modifications to the syntax.

Back in the 3.1 days, I wrote a branch whereby each system has its own bindings for the syntax variables, whereas the default tables be read-only (if possible, which it is in many implementations). With that branch, the convention is each system can do modify the syntax in whatever way it wants, and that will only affect that system; however, changes to syntax tables must be done after explicitly creating new tables, and any attempt to side-effect the default global tables will result in an error.

This was the cleanest solution, but alas it is not compatible with a few legacy systems that explicitly depend on modifying the syntax tables (and/or variables?) for the next system to use, as ugly as that is. My initial opinion was that this should be forbidden, and that these legacy systems should be fixed; however, these were legacy systems at a notable Lisp company, with no one willing to fix them; also, I had resigned from maintainership and the new maintainer is more conservative than I am, so in the end the branch was delayed until after said Lisp company would investigate, which never happened, and the branch was never merged.

A simpler and more backward-compatible change to ASDF would have been to have global settings for the variables that are bound around any ASDF session. Then, the convention would be that you are not allowed to use ASDF again to load regular CL systems after you modify these variables in a non-additive way; and the only additive changes you can make are to add new entries to the shared *readtable* and *print-pprint-dispatch* tables that do not conflict with any default entry or earlier entry (and that includes default entries on any implementation that you may want to support, so e.g. no getting #_ or #/ if you want to support CCL). Even additive changes, if made, must somehow not clash with each other, or they become non-additive; but there is no way to automatically check that this is the case and issue a warning. After you make non-additive changes (if you do), then ASDF can't be used anymore to build normal systems that may conflict with those changes, and if they are modified and you call ASDF on a system that depends on them, you lose (or you must first make all those systems immutable).

Note that because ASDF would already break in those cases, most of these constraints de facto exist, are enforced, and are respected by all ASDF users. There remains the question of binding the variables around the build, which allows normal systems to be built even if a user changes the variables, or to not bind them, which puts the onus on most users of keeping these variables bound to reasonable values around calls to ASDF for the benefit of a few users would want their own breaking changes to persist after the build. I believe the first option (bind the variables) is cleaner, though the second (basically, do nothing) is more backward-compatible.

In all cases, you can always make non-additive changes to a readtable (such as enabling fare-quasiquote) by locally binding *readtable* to a different value, e.g. using named-readtables:in-readtable. A local binding won't adversely affect the ASDF build; but unless ASDF is changed to enforce its own bindings, you'll have to make sure to manually undo your local bindings before you call ASDF again.

The problem with not adding any syntax-control to ASDF is that it forces Lispers to always be conservative about modifying the readtable and calling ASDF (or having it called indirectly by any function whatsoever that they call, which they can't always predict). In practice this makes hacking CL code hostile to interactive development with non-additive syntax modification; which defeats in social conventions a technical feature of the language often touted as cool by its zealots. If syntax-control is added to ASDF, then you can freely do your syntax modifications and be confident that building code won't be adversely affected.

The current branch implements the simpler option of binding variables around ASDF sessions, and using a mutable shared readtable that should only be modified additively. It has probably bitrotten, and should be updated or rewritten. The current maintainer, Robert Goldman, should probably opine on which change to adopt with what schedule (3.3.0? 3.2.2? 3.3.1? 3.4.0?) and sign off the API.

Vanquishing Language Limitations

These two modifications are ((now)low)-hanging fruits in making ASDF a more robust build tool, one that supports working with non-trivial extension to the build system or the Lisp syntax. And in both cases, the limit reached by ASDF is ultimately that CL is a hippie language that allows unrestricted global side-effects and disallows disallowing. Therefore extensions necessarily introduce potential conflict with each other that have to be solved in wetware via convention, whereby all users are to be trusted not go wild with side-effects. The system cannot even detect violations and warn users of a potential mistake; users will have to experience subtle or catastrophic failure and figure out what went wrong.

A better language for a build system should be purer: inasmuch as it has "global" side-effects, it should allow to "fork" the "global" state in an efficient incremental way. Or even better, it should make it easy to catch side-effects and write this forking support in userland. At the very least, it would make it possible to detect violations and warn the user. Bazel is an example build system with an extension language that has local side-effects, but globally has pure forked environments. A successor to ASDF could similarly provide a suitably pure dialect of Lisp for extensions.

Happily, adding better syntax control to ASDF suggests an obvious solution: ASDF extensions could be written in an enforceable subset of a suitable extension of Common Lisp. Thus, ASDF extensions, if not random Common Lisp programs, can be made to follow a discipline compatible with a deterministic, reproducible build.

What would be an ideal language in which to write a extensible build system? Well, I tackled that question in another article, the Chapter 9: "Build Systems" of my blog "Ngnghm". That's probably too far from CL to be in the future of ASDF as such, though: the CL extension would be too large to fit ASDF's requirement of minimalism. On the other hand, if such a language and build system is ever written, interest for CL and ASDF might wane in favor of said latter build system.

In any case, in addition to not being a blub language, features that will make for a great programming language for an integrated build system include the following: making it possible to directly express functional reactive programming, determinism as well as system I/O, laziness as well as strictness, reflection to map variables to filesystem and/or version control as well as to stage computations in general including dynamic build plans, hygiene in syntax extension and file reference, modularity in the large as well as in the small, programmable namespace management, the ability to virtualize computations at all sizes and levels of abstractions, to instrument code, etc.

Towards cross-compilation

Now, before we get reproducible builds, we also need to enable cross-compilation for ASDF systems, so the necessarily unrestricted side-effects of compiling Common Lisp code cannot interfere with the rest of the build. Cross-compilation also allows building on a different platform, which would be important to properly support MOCL, but would probably also mesh well with support for building software in arbitrary other languages.

Importantly, instead of the (perform operation component) protocol that specifies how to build software in the current image, a (perform-form target operation component) protocol (or maybe one where the target information has been made part of the operation object) would return forms specifying how to build software, which could then happen in separate Lisp or non-Lisp process, on the same machine or on another worker of a distributed build farm.

Note however, that one essential constraint of ASDF is that it should keep working in-image in the small and not depend on external processes or additional libraries. Any serious effort towards a "deterministic build" should therefore remain an extension indeed (though one users would load early).

Still, if this extension is to remain compatible with ASDF and its .asd files, providing a backward-compatible path forward, then modifications and cleanups may have to be done to ASDF itself so it behaves well. Even keeping that hypothetical deterministic build separate, I expect non-trivial changes to the ASDF API to enable it, such as the perform-form protocol mentioned above. But backward-compatibility and smooth transition paths have always been the name of the game for ASDF; they are what make possible an ecosystem with thousands of packages.

There is a precedent to an ASDF extension leading to (most positive) changes in ASDF: POIU, the "Parallel Operators on Independent Units", Andreas Fuchs' extension to compile files in forks (but still load them in-image). Making sure that POIU can be expressed as an extension of ASDF without redefining or breaking the provided abstractions, was instrumental in the evolution of ASDF: it led to many cleanups in ASDF 2, it inspired several of the breakthroughs that informed what became ASDF 3, and it kept influencing ASDF 3.3.

Thus, even though ASDF will stay forever an in-image build system, and even though a deterministic build extension (let's call it FDSA, the Federated Deterministic System Assembler) may ultimately remain as little used as POIU (i.e. because it lacks sufficient benefits to justify the transition costs), I expect the design of the base ASDF to be deeply influenced by the development of such a tool (if it happens).

Looking for new developers

Robert Goldman and I are not getting younger, not getting more interested in ASDF, and we're not getting paid to hack on it. We are looking for young Common Lisp hackers to join us as developers, and maybe some day become maintainers, while we're still there to guide them through the code base. Even without the ambition (and resources) to actually work towards a hypothetical FDSA, our TODO file is full of items of all sizes and difficulties that could use some love. So, whatever your level of proficiency, if you feel like hacking on a build system both quite practical and full of potentiality, there are plenty of opportunities for you to work on ASDF (or a successor?) and do great, impactful work.

eyes black and white



Under threat of genocide and annexation by China!

A machiavellian plan by China for the annexation of Vietnam is being implemented with the complicity of the communist power in Hanoi to general indifference!

In 1979, China invaded Vietnam in retaliation for Vietnam's intervention in Cambodia. The resulting Sino-Vietnamese border war, lasted not only a few months as per the official version, but ten years, until 1989. It was marked by unheard of atrocities from a 620,000 strong Chinese army that razed everything in its wake: they destroyed four entire cities and villages, massacred all their inhabitants including children after gang raping the women. Yet, when their ally and sponsor the Soviet Empire fell in 1990, the dictators in Hanoi, rather than lose their power by reconverting themselves as democrats as in Eastern Europe, preferred to pledge allegiance to China and offered their country in exchange for Beijing's support. The secret treaty signed in Chengdu had its brief content only disclosed in April 2013: documents stolen from the Vietnamese Secret Service of Defense were handed over to Foreign Policy Magazine by General Hà Thanh Châu, after he applied for asylum in the United States. According to this treaty, the dictators in Hanoi commit themselves to the gradual transformation of Vietnam into a Chinese province like Tibet. The evolution will take place in three stages of twenty years each:

2000-2020: Vietnam becomes an autonomous province,

2020-2040: Vietnam becomes a dependent province,

2040-2060: Vietnam trades its name for Âu Lạc (named after two ancient ethnic groups living between the two countries) and will be subject to the administration of the governor of GuangZhou.

The 1990 surrender was merely the explicit execution of what Hồ Chí Minh pledged in return for the military aid granted by Mao ZeDong during the First Indochina War. By the "Vietnam-China Cooperation Agreement" signed on 12/6/1953 in GuangXi, Hồ promised to thereafter "merge the Vietnamese workers' party with the Chinese Communist Party" and to make "the Vietnamese democratic republic an element of the People's Republic of China".

Under the pretense of active cooperation with the Big Brother from the North, the process of tibetization of Vietnam took place as follows:

Political Bringing to Heel:

- In 1999, a land border treaty stipulated the transfer of 900 km² (equivalent to 60% of the area of the ​​Thái Bình province), including half of the Bản Giốc waterfall and the Nam Quan border crossing, two historical sites dear to the heart of the Vietnamese.

- In 2000 by a treaty on the Gulf of Tonkin the dictators in Hanoi ceded to China nearly half (44% or 16000 km²) of the territorial waters in the gulf as well as the beach of Tục Lãm. The Chinese were also granted the right to exploit economically the riches of the gulf in the Vietnamese zone, under guise of cooperation. These two treatises are actually but the application texts of three treaties signed by Hồ Chí Minh with Beijing in 1957, 1961, 1963.

- In 2013 ten resolutions on cooperation allow Beijing to control the entire policy-making of Vietnam. Chinese people from China or formerly from Vietnam (those who left in 1978) were specially trained and placed by the Chinese government in various leadership positions at all levels within all Vietnamese institutions, especially in the police and the army, up to the highest state positions: At present, President of the Republic Trần Đại Quang, Deputy Prime Minister Hoang Trung Hải considered Beijing's right-hand man, Deputy Speaker Tô Huy Rứa and Minister of Police Tô Lâm are Chinese or from Chinese origin. Thus, executives and dignitaries who are rebellious to sinicization are quickly spotted and neutralized: Some twenty high-ranking officers known for their hostility to China, including General Staff Đào Trung Lịch and the Commander-in-Chief of the 2nd Military Zone Trần Tất Thanh, disappeared in an "aircraft accident due to fog" in May 1998; more recently, in July 2016, just three months after his appointment, General Lê Xuân Duy, another commander-in-chief of the same zone (very important because of its neighborhood with China and Laos), war hero of the Sino-Vietnamese War of 1979, experienced a rather "sudden death". The same kind of death struck in December 2016 minister of defense Phùng Quang Thanh, long pro-Chinese, when he displayed patriotic inclinations.

- In 2014, the treaty on a "project for two strategic corridors" grants China the right to economically exploit the six border provinces (that is, actually, the destruction of the country's magnificent primary forests) and the Điện Biên region, as well as the establishment of two strategic corridors, Lào Cai - Hà Nội - Hải Phòng and Móng Cái - Hà Nội.

- In January 2017, Nguyễn Phú Trọng, the current secretary-general of the party, went to Beijing to sign 15 conventions promoting closer cooperation between the two countries, in particular in the fields of the military, the police and culture. This cooperation should be understood as a greater subjection, with the eventual incorporation of the Vietnamese army and police into the Chinese army and police, that is, the end of Vietnam.

- As for the occupation of the Paracel and Spratly islands by China, the dictators in Hanoi endorse it in a way for they repress any public demonstration against it, and they do not protest much or with much vigor against the Chinese building and drilling there.

All these treaties were followed by economic agreements enabling Beijing to send en masse its nationals to the most strategic places of Vietnam, under cover of being employees and workers:

- Agreement for two joint ventures (actually Chinese ventures since the majority of the capital comes from China) to exploit bauxite. These companies are installed on the "roof" of the Highlands of the Center region, from where one can dominate all Indochina.

- Agreement for the exploitation by the Chinese of the primary forests, which amounts to letting China destroy the most beautiful natural resources of Vietnam while giving it control on the most crucial points of the north of the country.

- Permission for Chinese companies to settle on all the Vietnamese coast, from Móng Cái to Cà Mau.

- Possibility for the Chinese to found Chinese cities throughout the country as in Bình Dương, where the only language used is Chinese and where trade is made in Chinese yuan.

- Permission for Chinese nationals to come to Vietnam without a visa, to move and settle freely in Vietnam where they can marry Vietnamese women whose children will become systematically Chinese. On the other hand, a visa is still required for Vietnamese people going to China, and many Chinese districts in Vietnam are prohibited to Vietnamese people, and even to Vietnamese public authorities.

The tacit recognition of Vietnam's belonging to China is shows up in the adoption of a 6-star Chinese flag: a large star surrounded by five instead of the four small official stars. There the Vietnamese people are symbolically represented as one new conquered people, on an equal footing with the peoples of Manchuria, Inner Mongolia, Tibet and the Uighur country. This Chinese flag appeared for the first time in 2011 in the background behind a speaker of the VTV official television; it aroused such an indignant interrogation that it was quickly withdrawn; yet it was seen again in thousand copies agitated by the Vietnamese schoolchildren for the welcome of the Chinese vice president Xi Jinping in 2012. Faced with the general outcry, the government bald-facedly blamed the fact on a technical mistake by the flag manufacturers (sic!). This did not prevent said flag from appearing in a meeting room of Vietnamese and Chinese high-ranking officers in Lào Cai in 2015 and currently in many police stations.

Moreover, the red flag with a yellow star in the middle which officially represents communist Vietnam, as imposed by Hồ Chí Minh to Vietnam, is but the emblem of the young Chinese communist pioneers (and not that of the Fujian province as the rumor claims). This adds up with the strong probability that the famous Hồ Chí Minh, identified with the Vietnamese revolutionary Nguyễn Tất Thành alias Nguyễn Ái Quốc, was in fact a Chinese imposter, his look-alike Hồ Tập Chương alias Hồ Quang: he had been commissioned by the Communist International to personify the Vietnamese Soviet spy after his death in 1932 in the jails of Hong Kong. This identification was revealed in 1946 by a Taiwanese author, Ngô Trọc Lưu, in a book titled "Hồ Chí Minh" written in Japanese; it was confirmed in 1949 by a local CCP newspaper, Cương Sơn; and it was clearly reaffirmed in a controversial biography on "Hồ Chí Minh's half-life" published by another Taiwanese scholar, Hấ Tuấn Hùng in 2008. This trait speaks volumes about the annexationist machination of Chinese leaders and the depth and duration of their determination to conquer Vietnam.

There is no surprise after this that the Chinese behave as arrogant masters. Some high dignitaries in Beijing do not deprive themselves of publicly calling Vietnamese leaders "ungrateful bastards" when Hanoi dares shyly protest against one of their abuses.

Vietnam's submission to China means the violent repression of all anti-Chinese demonstrations: demonstrations against the occupation of land on the northern border; against the occupation of the traditionally Vietnamese Paracel and Spratly Islands coveted by most countries in the region for its rich oil reserves amounting to 25% of the world's reserves, that China took from Vietnam in 1974 and 1988; or against the establishment of bauxite plants in an environmentally sensitive region in 2009-2011; etc. Hundreds of patriotic activists were arrested, beaten and sent to prison where many of them died as a result of ill-treatment. Repression, moreover, is still the norm, as for instance in recent months towards protestors against the Formosa company (Taiwanese by its name, with its seat in Formosa, but it is Chinese by its capital and therefore its management).

Cultural subjection:

Political expansion is hardly conceivable without cultural influence. For Beijing this influence can only be understood by the sinicization of the conquered people. Since the Vietnamese are destined to merge into the great Chinese melting pot, it is necessary to erase the traces of hereditary antagonism in them and to deprive them at the same time from the pride of their historical past. Thus, Beijing imposed various measures on Hanoi:

- Obliviate the valiant resistance to the Chinese army in the war of 1979-1989: To the helpless indignation of the veterans, Hanoi had to desecrate the graves of Vietnamese soldiers who died on the northern border. Anything about that war and their heroism was erased from their graves. On the other hand, cemeteries and monuments were erected in honor of the Chinese soldiers who fell in Vietnam. Anti-Chinese publications, abundant during the war, went missing entirely; and henceforth the rare mentions of this war in official history textbooks fit in eleven lines, such that the young Vietnamese ignore its very existence. On the annexations of frontier lands as well as of the Paracel and Spratly Islands, a radio silence is strictly observed, and also on the frequent abuses by the Chinese army such as the strafing of fishing boats or the shooting down of Vietnamese aircraft off the territorial waters of Vietnam, half of which was appropriated by China.

- Avoid the glorification of the great heroes of history honored for their victorious struggle against the Chinese invader. There were discussions about removing their statues from public places, but the overly sensitive subject was put aside and the authorities were content to remove those in private houses (a recent case being the statue of General Trần Hưng Đạo, a great victor against the Mongols, erected in the house of a resident of the province of Lâm Đồng).

- No assimilation can take place without language adoption. Unlike English, a language that is very flexible and easy to learn, unfortunately for China's hegemonic ambitions, the Chinese language with its ideographic writing lends itself poorly to spreading internationally and does not appeal to the Vietnamese. If you do not want to learn it voluntarily, you will learn it by force: decrees were therefore issued at the end of 2016 to impose Chinese as a compulsory first language in secondary school and to introduce Chinese as a second language in primary school. At the moment programs entirely in Chinese are broadcast by the Vietnamese radio and television; and even in the Vietnamese programs, Chinese songs are interspersed among national music.

Destruction of the economy:

Hanoi and Beijing both had to keep secret the contents of the 1990 treaty for fear of the unanimous revolt of the Vietnamese people—who as a result of the lessons of the history are animated by a visceral hostility towards the predatory neighbor. On the one hand, Beijing wanted to avoid having to face 90 million resistance fighters when the officially proclaim the annexation; on the other hand, they coveted Vietnam mostly for its mineral wealth (especially bauxite and oil) and its favorable strategic situation in South-East Asia; thus, they verily connived an enterprise of genocide against the Vietnamese people, with a view to a repopulation by Chinese people; and this entreprise began immediately after they signed the treaty. Faced with the methodical destruction of the economy and the parallel poisoning of all their sources of life, young able Vietnamese have been and will be driven to emigrate; those who remain will be reduced over the years to the sick and impotent, while coming children are destined to be weak or deformed.

Destruction of agriculture:

Vietnam derives its main resources from its thriving agriculture that still occupies more than half of its population, from its fisheries, its tourism, and also its oil (since 2000). The rice food crop for which Vietnam is still the second largest producer in the world and the third largest exporter, was therefore Beijing's first target:

The vast Mekong Delta, Vietnam's rice granary, depends on the annual alluvial floods that ensure its fertility. But China established a series of 6 dams in Yunnan upstream of the Mekong (4 more are planned, besides the project of two canals that will divert the water of the river in the surroundings), in particular the gigantic dams of Xiaowan (Capacity: 15 billion m³, 2010) and Nuozhadu (capacity: 23 billion m³, 2012); and now the other countries that live on the Mekong are helpless before the decline of their river economy. They cannot hold accountable the powerful Chinese; and so the Chinese manipulate the flows of the river at their whim, without even warning the residents; they ignore the warnings the Mekong Regional Commission in which they refuse to belong; and so these countries prefer to participate in the scramble by building their own dams with Beijing's blessing and financial contribution (11 planned in Laos who dream of being a major supplier of electricity to the region, including the enormous Xayaburi on the main river, already being build; 2 projects in Cambodia and 2 more in Thailand).

Vietnam, downstream in the delta, can only take notice of the damage: facing prolonged droughts and devastating floods, soils are depleted due to lack of sediments, compounded by salinization due to the increase in temperature and the rise of seawater; fresh water levels are declining dangerously, leading to shortages and to the fall of fish stocks; with the change of temperature, insects and fungi multiply, spreading diseases (notably the dengue fever) and destroying the crops. To the action of dams, add the destruction of the mangroves, especially in the extreme south, in order to raise shrimps for export, at the instigation of seafood freezing companies, most of which are run by the Chinese. Without the trees to fix the land, the coasts erode and each year 500 ha (1200 acres) disappear in Cà Mau which will soon no longer have the shape of a point.

As a result, the area of ​​rice fields is decreasing and their yield has dropped by 15% over the last decade; the situation is deteriorating so rapidly that there may be a risk of famine in the years to come. For paradoxically, whereas Vietnam is a large exporter of rice, its residents are often forced to eat imported rice; this is due to the fact that the major part (60%) of the crops is pre-empted by the State which buys it at very low prices from the producers (3000 đ/kg instead of 4500 đ/kg on the market), for export. Where to? mostly (40%) to China (at the price of 6000 đ/kg), which in exchange for good Vietnamese rice sells to the Vietnamese population its own poor quality rice, sometimes mixed with plastic beans called "faux rice", at a price double or triple (up to 30000 đ/kg). Exploited and discouraged by poor working conditions, driven from a land that has become arid, a growing number of peasants abandon the profession, emigrate to the city or to neighboring countries, abandoning land to the Chinese who are eager to acquire it.

Determined to grab as much land as possible for their colonization, the Chinese find a thousand tricks each more diabolical than the others to ruin the reluctant peasants and push them to abandon their homes. Their subtle cruelty finds an easy prey in the little peasantry, that is poor hence greedy, ignorant and credulous :

- Chinese traders traveling all over the country locate peasants in difficulty and offer to buy the four clogs of their buffalo at the price of the animal; the poor things accept, thinking they can earn double since the animal killed for its hooves can thereafter be sold as meat. Since the buffalo is the working tool for the peasant, once it has disappeared, the peasant will have no choice left but to acquiesce to any suggestion from the Chinese: to fill his rice field to plant subsistence crops or shrubs, using toxic Chinese fertilizers and pesticides (which do not comply with any international standards) sold to him on credit by the merchant, who promises in return to buy him the product of his harvest at a good price. The promise is often held at least the first year; then, under any pretense (e.g. the product in question is no longer required) the merchant or another of his accomplices refuses the purchase of the product at the expected price. The peasant must content himself with selling his perishable goods at a low price. The peasant finally over-indebted is obliged to cede his land to the Chinese or one of his accomplices to emigrate elsewhere.

- Alternatively, in areas where certain crops prosper, the trader offers to buy all the leaves of the tuber (e.g. cassava) or the plant, or also all the roots of the plant, at a much higher price than the harvest itself. As a result, the tuber can not grow, the plant dies and the farmer is deprived of seed or seedling for the next season. Again the trader offers fertilizers and pesticides for the planting of a fruit, a flower, etc., with very good yield, etc. The trick of buying the roots was used for the destruction of pepper crops, one of the riches of Central Vietnam.

- A hundred-year-old cultivation on the border with Cambodia, the sugar palm, is being eradicated "thanks" to the Chinese who come to propose to the peasants to buy at high prices the trunks of this palm tree. Cut in half the palm tree can only die and there is no question of replanting because the tree produces only after twenty years.

The Chinese will to destroy has no bounds: For somewhat smarter farmers, Chinese "experts" come to advise an increase in income by the breeding of a variety of whelk (pomacea), freshwater lobster (Procambarus), or red turtle, the flesh of which is indeed prized. However, these three species, imported from America, are terribly invasive; they soon invade rice fields, rivers and lakes, canals... killing local flora and fauna, especially young rice plants, to a degree that the FAO is alarmed.

Better or worse, strangers were surprised throwing babies crocodiles in the Mekong. Maybe it was only a rumor. However last month, a buddhist monk, who was even "elected" to the house of representatives, - and who is known for publicly criticizing Lý Thường Kiệt, the Great general who in 1075 won against the Chinese Song dynasty, in a war for the first time offensive and not defensive, for his "insolence" towards the Empire - certainly a Chinese agent, before a public of hundreds of people, threw into the Red River under cover of a rite of deliverance of souls, ten tons of piranhas, enough to infest the entire river and prohibit any activity there. Can you imagine such an act? Facing the general indignation, the authorities have tried to minimize the fact by declaring that those piranhas belonged to an inoffensive variety!

The coffee plantations, for which Vietnam is the world's second largest producer (and the first for the robusta variety), do not undergo a routine destruction by the Chinese, first because it is rather a product for export (only 5% is used for domestic consumption), not indispensable to the life of the population, and secondly because they want to control it: always on the lookout for the slightest opportunity to purchase at a discount, they already count on the sharp fluctuation in the price of coffee, which is causing ruin to planters who are unable to absorb a sharp fall in prices (for example in 2012).

Destruction of forests, Vietnam's lung:

Thirty years of war with massive bombardment destroyed only 16 per cent (not 60 per cent, as claimed by official propaganda) of Vietnamese forests, based on mutually conflicting figures given in various articles, which show that in 1943 Vietnam was forested at 43% (i.e. 140,000 km² out of a total area of 330,000 km²), and from 1943 to 1973, 22,000 km² of forests were destroyed. But 17 years after the war, in 1990, the official forest coverage was only 92,000 km², which means that in peace time 26,000 km² of forests were destroyed, a greater area and faster than during the war. Deforestation is ongoing, despite a massive effort towards reforestation. In 2013, forests covered 39% of the territory, but 25% of these forests are made out of reforestation using low-shade and low-diversity species such as pine and eucalyptus. What more, with deforestation comes the erosion and degradation of bare soils of which 40% becomes unfit for cultivation.

Among the causes of deforestation, the main one is population growth, with its consequent need for space, construction, firewood (for cooking) and for agricultural and industrial development. But the most disastrous factor is organized looting of forests by Chinese operators to whom the Vietnamese government granted the concession to thousands of square kilometers near the northern border and on the highlands of the Center region. This is compounded by the plunder organized by traffickers whose chiefs are usually Chinese, in collusion with local authorities, who derive from this illegal trade, accounting for half of the timber trade, a profit of 2.5 billion USD per year. The deforestation of Vietnam is all the more deplorable since its ravages include beautiful rainforests, especially primary forests that are rare and valuable for their biodiversity (they shelter or used to shelter more than a thousand different species, of which 8.2% are endemic and 3.4% are protected by the United Nations): out of 10% of the area in 1996, there only remained 0.6%, i.e. 80,000 ha in 2012. In a mere 20 years, the communist regime in Hanoi managed to squander the fabulous ancestral inheritance of the golden forests (rừng vàng).

Environmental pollution :

Facing the pollution that poisons their own country, Beijing had the idea of ​​using chemical poisoning to get rid of the Vietnamese. Through political as well as financial pressures, they made Hanoi accept the installation throughout Vietnam of its most polluting industries. Already in 1990, after the end of the Sino-Vietnamese War, many Chinese people who came to or returned to Vietnam went back to trading and opening small businesses, by taking Vietnamese individuals first as front men, then as a partners in a joint venture. Even after 100% foreigner-owned companies were accepted starting in 2005, knowing the Vietnamese distrust of China, many 100% Chinese companies prefer to claim to be a joint venture by allying themselves with corrupt executives, and one can say that today the vast majority of companies in Vietnam have Chinese owners.

Taking advantage of the population's ignorance of the lack of Vietnamese laws, small Chinese production units, like those of the Vietnamese themselves, we must admit, were rejecting their wastes in rivers without restraint, to the dismay of the residents. But for Beijing that was not enough, and the Chinese authorities decided to switch to a higher gear. Whereas China itself closed all its bauxite plants due to environmental damage, after repeated pressures starting in 2001, Beijing eventually obtained in 2007 the signing by Prime Minister Nguyễn Tấn Dũng of the agreement for a project of 6 bauxite plants on a ​​1800 km² concession, to be exploited jointly by the two countries on the Highlands of the Central region, where the third richest deposits of bauxite in the world are located. The location of the first two sites chosen, in DakNong and Lâm Đồng, once known, raised for the first time in Communist Vietnam a protest by scientists, intellectuals and various personalities (petition with 2,600 signatures), who mentioned considerable dangers for the environment and, consequently, for the men and for the cultivation of tea-trees and coffee-trees in the neighborhoods, not to mention the danger of installing thousands of Chinese alleged workers on the "Roof of Indochina". The government ignored these concerns and arrested the leaders of the revolt. Construction of the factories therefore started in 2009. And the people are forbidden to circulate into the area as has become the rule for any large Chinese corporation. What is the result? To install the plants, thousands of acres of primary forest and crop land have been sacrificed, causing impoverishment of the inhabitants (defenseless mountain people); there is now a shortage of fresh water, much of which is captured for the manufacture of alumina; and in the event of heavy rain there are risks of spillage of red sludge out of the two pits where it is stored in the open. An unknown number of Chinese alleged workers are present in the restricted areas, who may or may not actually be factory workers. As for the two factories supposed to bring back a lot of foreign currency to Vietnam, they have not stopped making losses to the point that in 2016 the Ministry of Industry and Commerce had to ask for government assistance to replace obsolete and inefficient Chinese equipments by machines with more advanced technology from other countries.

The ultimate in Chinese duplicity and inhumanity (until now at least) as well as of Vietnamese governmental complicity, was reached with the company Formosa. In 2008, Beijing pressured Hanoi to grant Formosa Plastics group, a Taiwanese company infamous for lawsuits against it for environmental damages, permission to establish a steel plant in the province of Hà Tĩnh in the Center region of Vietnam. For this project, the group formed a subsidiary, the Hung Nghiep Formosa Ha Tinh Company, known simply as Formosa in Vietnam, whose shares were soon bought back by Chinese companies, which in fact made it a Chinese company and no longer a Taiwanese company as many still believe. In 2010, as always through corruption and intimidation, Formosa obtained a 70-year concession for 3300 hectares in Vũng Áng in Kỳ Anh district, just in front of a deep-water port with great military importance, since 500-ton ships and submarines can shelter there. This was already an enormous privilege, since according to Vietnamese laws in force, land ownership is not recognized, only land use, and no individual or group in Vietnam can be issued a land use license for more than 45 years. Yet in addition, Formosa also benefited from a rebate on its property taxes and on its importation taxes, which did not prevent it from practicing fraud in their payment (discovered in 2016) for nearly $ 300 million. It also was granted the right to develop infrastructure at its leisure!

Despite the protests of the expropriated inhabitants, the factory was put under construction in 2012, and in 2015 a huge complex was created on its site, which can be seen on Google maps.

On April 6th 2016, right after the factory was completed, the inhabitants of Vũng Áng found a frightening number of dead fish on their beaches. The following days, till the 18th of April, the phenomenon spread on the coasts of the Center region, affording the spectacle of miles of dead fish estimated to number several millions. The death of the sea, which will prove to be the greatest ecological catastrophe ever seen so far, did not at first provoke any reaction from the authorities. Looking for the cause of the disaster, fishermen-divers detected pipes from Formosa that were spitting out continual jets of a strange red liquid. Then began protests throughout the country against the Chinese company. The Vietnamese authorities did not wake up until 6 weeks after the massacre to speak of a catastrophe and to induce Formosa to accept its responsibility. But instead of immediately shutting down the factory and ordering an investigation into the effects of the pollution, the government was content with a $500 million payment. This was a paltry sum with regards to the damages caused, and none of the victims saw any of it, which leads to wondering whether it was actually paid and if so who pocketed it. Yet, according to the few scientists who came to take stock of the damage, it will take decades or even centuries for the sea to heal from millions of m³ of liquid filled with heavy metals and toxic chemicals (lead, mercury, cadmium, manganese, phenol, cyanide, etc., according to a laboratory independent from the Vietnamese authorities) that Formosa rejected and keeps rejecting in its waters. Today it is no longer the two provinces neighboring Formosa but all four central provinces (Hà Tĩnh, Quảng Bình, Quảng Trị, Thừa Thiên - Huế) that are affected and the body of red waters continues to expand and begins to reach the southern coasts. In order to survive, fishermen try to get fish from the open sea where they risk being slaughtered by armed Chinese fishermen and the Chinese navy, who have seized the eastern sea.

As if Formosa were not enough, in the same region, taking advantage of the rainy season, about twenty Chinese-owned hydroelectric plants discharge the water from their basin without warning into the surrounding countryside, destroying crops and killing several hundreds of people. This kind of flooding caused knowingly and often without notice by the hydroelectric factories has finally aroused in the population a feeling of detestation towards the 7000 dams that produce 40% of the national electricity, that Hanoi is spreading throughout the country, in imitation of the Chinese in China.

More importantly, in the midst of the Formosa scandal, the Chinese, in contempt of the entire world, and using the Vietnamese company Hoa Sen as a front, were granted the license for the installation of another steelworks plant of equal size in Cà Ná, Province of Ninh Thuận, in the south of the country. If this plant comes into existence and starts to dump its waste into the sea like that of the Center region, there is no doubt that all the coastal provinces of Vietnam will become uninhabitable for its natives and that the maritime economy will collapse completely.

To perfect the destruction of the South, in 2008 the Chinese, through the company Lee & Man, were granted the construction of a gigantic paper mill to produce 420,000 tons of paper per year on the Sông Hậu, the great river feeding the delta, in the face of unanimous protests. This plant, which is supposed to be in operation this year, will certainly kill the river with its enormous quantities of toxic waste including hydroxide, and will ruin rice crops as well as aquaculture in the West.

Unlike other foreign companies, that are not harmful, Chinese companies located all over Vietnam are all very polluting by the nature of their products and blithely dump their waste into the atmosphere, the soil and the waters. Vietnamese lakes and rivers are already blackish or reddish depending on the substances that are spilled there. The soil is impregnated with fertilizers and pesticides that contaminate crops. China is even suspected of exporting its own toxic waste to Vietnam, with or without a license from Hanoi, and of burying it in various parts of the country, based on the testimony of a few repentant accomplices. Besides, where does Formosa get so much toxic waste from, when, according to their own declaration, their stoves will not quite be ready until some time in 2017?

Consequences of pollution:

The Vietnamese population is extremely scared now for its health. Besides the air that they breathe, the water they use for their ablutions and their washing, all their food is now likely to poison them. Fruits and vegetables are not only stuffed with highly harmful Chinese pesticides but also dangerous Chinese chemicals that either magnify them or prolong their apparent freshness. Moreover, since the Sino-Vietnamese treaties, food products imported from China invade the Vietnamese markets and they are even worse: there is no week without the newspapers reporting cases of intoxication caused by one of these products, or without revealing cases of fake rice, fake eggs, fake noodles, fake meats, fake coffee, and so on, all faked with industrial chemicals. How can you protect yourself since you must eat to live? How to know if the fruit or vegetable you eat is not contaminated, if the meat you are enjoying is not tampered with, if the fish you buy is not packed with toxic metals, if the nước mắm you are consuming is not made from these intoxicated fish and if the salt that is used does not come from a polluted coastline? Vietnam has become a country with a high rate of cancer patients; the death toll from cancer, estimated by WHO in 2015 based on reports from Vietnamese hospitals, is 350 per day; there are 130,000 new cases every year, and these figures are expected to increase sharply after the Formosa disaster.

However, the government, complicit of the polluters, refuses to take sanitary measures. It rejects any request for analysis of the water. After the Formosa scandal, it even forbids doctors to examine the blood of the inhabitants of the Central provinces, for fear of exploitation by "enemy forces" (a term that refers to groups of opponents of the regime). The "genociders" of Beijing can rub their hands. The Southwest Vietnam and Central Vietnam are gradually being emptied of their population, driven by the misery to emigrate abroad on the incentive of the government. And most of these uneducated emigrants have no other resource than to join the lumpenproletariat of the host country which receives them badly and despises them. Ironically, following the example of Donald Trump, the Cambodian prime minister recently spelled out plans to build a wall on the Vietnamese border to prevent the paperless Vietnamese from entering Cambodia! Meanwhile, thousands if not millions of Chinese people have been settled in Vietnam, where the authorities have reserved the best places for them, wherein the Vietnamese who have been living there for generations have been expropriated for an insignificant indemnity, thus creating groups of "dân oan" (victims of injustice) that can be seen gathered around the capital or prefectures to claim a reparation that will never be made.

Military threats:

Unlike free countries that host foreign companies only with a view to procuring work for their citizens, the Vietnamese government suffers without objection that Chinese companies import all their personnel to the tens of thousands or even more, and refuse any control on the part of its administration. Also part of this behavior of servility/arrogance is a concern to conceal a much more worrying reality. The immense areas conceded to China for their factories that do not require as much, moreover located in the most strategic locations of the country, protected by barbed wire and prohibited to all Vietnamese, even to representatives of public authority, may house only military complexes whose staff consists of alleged factory employees. Arms of all sizes passed through the open border can be easily camouflaged, especially if tunnels are dug. Moreover, if we are to believe the rumor, the Chinese are in the process of (or have finished) constructing in secret two tunnels large enough for the use of tanks and lorries, to connect the region of the Highlands and The Mekong Delta.

At present, in the event of an armed invasion, China can move regiments at any time through North Vietnam, whose border region and Tonkin Bay are already under its control; in the Center region it has bases on the Highlands as well as on the coast with the port of Vũng Áng where its submarines and large ships can enter. Farther away, the south will be reached by troops descended from the Center region, and also by aircraft from the recently built airports on the Paracel and Spratly Islands stolen from Vietnam. If current intrigues succeed, China will soon become the owner of several regional airports on the brink of bankrupcy, that it can transform into military airfields.

In order to complete the encirclement of Vietnam and to control all its supply lines by either land or sea, China has established a solid alliance with Laos and Cambodia; the latter has even leased a naval base for 90 years in the port of Sihanoukville from where China can monitor the South Sea. In case of necessity, for example of American intervention, it deployed a row of ground-to-air missiles on the Paracel Islands. Where are these missiles pointed at, if not towards Vietnam, barely thirty kilometers away.

All these military preparations merely materialize China's warlike ambition. This is an ambition China never concealed: on the website of the Chinese army sina.com, the authors of articles published on 5/9/2008 and then on 20/12/2014 explain how China can quickly conquer Vietnam! But, as good followers of Sun Tzu and lovers of the game of go, especially after the failed invasion of 1979, the Chinese prefer to use force only as a last resort after stifling the opponent. Thus, for decades China has patiently applied to its little neighbor the "strategy of the silkworm", a small animal that is able to overcome a large pile of mulberry leaves by nibbling it bit by bit.

The Vietnamese population, caught between the Chinese hammer and the government anvil, prefers for the most part to live in denial or in fatalism. But the deniers of the Chinese threat can not dispute the omnipresence of the Chinese in the country; and since the leaks on the 1990 treaty, especially since the development of the "livestream" technique on Facebook that allows the direct exchange of information, they become aware of the imminent danger that the communist power wants to hide from them. For their part, the traitors of the State apparatus, who have been in the know for a long time, seek only to build up a substantial personal fortune through racketeering and corruption, and then to transfer this fortune abroad by means licit or illicit. Vietnam is in danger of bankruptcy with a current debt of USD 117 billion equivalent to 64% of GDP, that it cannot pay (on the deadline of July 2017, servicing the debt will amount to 24% of the national budget), at a time that country's coffers are empty (in many places, civil servants and employees of government companies haven't been paid for months). Meanwhile, it is estimated that more than USD 600 billion of money stolen from the Vietnamese people by the apparatchiks was deposited in the United States, and more than 200 billion USD in Swiss banks. All these Communist felons continue to assuage the people with lies, to praise the sweetness of living in a Vietnam moving towards modernity; but they themselves take the precaution of sending their wives and children in advance to capitalist countries, preferably in the most "detested", the United States. The "spoilsports" who oppose this travesty of justice, those who assist victims, the "democrats", the citizens who are openly hostile to the Party or to China, are tolerated for a certain time in order to convince international opinion that they live in a free country. Then on a beautiful day or rather on a beautiful night (as is the custom in dictatorships) they are arrested, beaten, imprisoned, sometimes killed. A few days ago, the political police thus kidnapped the most notorious democrats, and detained them in places unknown, so as to discourage those who are tempted to participate in the general demonstration of 5/3/2017. In Saigon, those who had the courage to demonstrate were harshly repressed, and on this occasion they discovered that the most brutal police officers who beat them cruelly are in fact Chinese.

Apart from the minority of the watchdogs of the regime, the Vietnamese people refuse the idea of ​​any Anschluss with China. But, betrayed by their own leaders who have become the "domestic enemy," how can they oppose the powerful "foreign enemy" when the fateful hour comes? The only hope for Vietnam to remain independent is a general uprising large enough to overthrow the power of Hanoi and install in its place a democratic government that will take national interests to heart and establish military alliances with free countries. And that before a Chinese military deployment. Yet, one of the most cruel political regimes in existence has submitted the South of Vietnam for half a century and the North of Vietnam for a century. And the Vietnamese have lost their energy and confidence in themselves. To revolt, they must overcome the paralyzing fear of the ire of the regime, a fear that is inculcated in them from childhood.

Meanwhile, time is short and we cannot watch without reacting the slow death of a once proud and courageous people. To you all men and women of good will, who love justice and freedom, I beseech you to look into the drama of Vietnam! Alert international public opinion to counter Beijing's annexationist machinations! Especially those among you, who by your vociferations against the Vietnam War in the 1960s, helped push America to abandon the republic of South Vietnam to bring it into the hands of the sinister clique of assassins from Hanoi, take your responsibilities and redeem yourself by denouncing the Chinese political crimes as strongly you former denounced the US! Show the Vietnamese that they are actively supported, and by the warmth of your sympathy communicate to them the flame they lack to overcome their fear! Help them to take back their right to live free in a free country!

Paris, 2017-03-09, revised version 2017-04-19
Đặng Phương Nghi
Em: dpnghi@gmail.com
eyes black and white

Why I haven't jumped ship from Common Lisp to Racket (just yet)

Matthias Felleisen jested "Why are you still using CL when Scrbl/Racket is so much better :-)" ? My response was as follows:

Dear Matthias,

you are right Racket is so much better in so many dimensions. I use Lisp because I just can't bear programming in a language without proper syntactic abstraction, and that is a dimension where Racket is far ahead of Common Lisp (CL), which sadly also remains far ahead of the rest of the competition. Racket also has managed to grow a remarkable way to mix typed and untyped program fragments, which sets it ahead of most. But I am under the impression that there are still many dimensions in which Racket lags behind other languages in general and Common Lisp (CL) in particular.

  1. The Common Lisp Object System (CLOS) has multiple-inheritance, multi-methods, method combinations, introspection and extensibility via the MOP, generic functions that work on builtin classes, support for dynamic instance class change (change-class, update-instance-for-changed-class) and class redefinition (defclass, update-instance-for-redefined-class), a semi-decent story for combining parametric polymorphism and ad hoc polymorphism (my own lisp-interface-library), etc. Racket seems to still be playing catch-up with respect to ad hoc polymorphism, and is lacking a set of good data structure libraries that take advantage of both functional and object-oriented programming (a good target is Scala's scalaz or its rival cats).
  2. While the ubiquity of global side-effects in CL is very bad, the facts that all objects that matter are addressable by a path from some global namespace and that live redefinition is actively supported makes debugging and maintaining long-lived systems with in-image persistent data more doable (see again CLOS's update-instance-for-redefined-class). This is in contrast with the Racket IDE which (at least by default) drops live data when you recompile the code, which is fine for student exercises, but probably wrong for live systems. CL is one of the few languages that takes long-term data seriously (though not quite as seriously as Erlang).
  3. Libraries. CL seems to have much more libraries than Racket, and though the quality varies, these libraries seem to often have more feature coverage and more focus on production quality. From a cursory look, Racket libraries seem to be more ambitious in their concepts, but to often stop at "good enough for demo" in their practice. An effort on curating libraries, homogenizing namespaces, etc., could also help Racket (I consider CL rather bad in this respect, yet Racket seems worse). My recent experience with acmart, my first maintained Racket library, makes me think that writing libraries is even higher overhead in Racket than in CL, which is already mediocre.
  4. Speedwise, SBCL still produces code that runs noticeably faster than Racket (as long as you don't need full delimited control, which would requires a much slower CL-to-CL compiler like hu.dwim.delico). This difference may be reduced (or even reversed) as Racket adopts the notoriously fast Chez Scheme as a backend (or then again not). Actually, the announcement of the new Racket backend really makes me eager to jump ship.
  5. As for startup latency, Common Lisp is also pretty good with its saved images (they start in tens of milliseconds on my laptop), making it practical to write trivial utilities for interactive use from the shell command-line with an "instantaneous" feel. Racket takes hundreds of milliseconds at startup which puts it (barely) in the "noticeable delay" category (though nowhere near as bad as anything JVM-based).

All these reasons, in addition to inertia (and a non-negligible code-base and mind-base), have made me stick to CL — for now. I think Racket is the future of Lisp (at least for me), I just haven't jumped ship right yet. If and when I do, I'll probably be working on some of these issues.

PS (still 2017-03): Here are ways that Racket is indeed vastly superior to CL, that make me believe it's the future of Lisp:

  • First and foremost, Racket keeps evolving, and not just "above" the base language, but importantly below. This alone makes it vastly superior to CL (that has evolved tremendously "above" its base abstractions, but hasn't evolved "below", except for FFI purpose, in the last 20 years), which itself remains superior to most languages (that tend to not evolve much "above", and not at all "below" their base abstractions).
  • Racket is by far ahead of the pack in terms of Syntactic abstraction. It is the best language in which to define other languages and experiment with them, bar none.
  • Racket has a decent module system, including build and phase separation (even separate phases for testing, cross-compilation or whatever you want), and symbol selection and renaming.
  • Racket has typed modules, and a good interface between typed and untyped modules. While types in Racket do not compete with those of say Haskell, just yet, they are still evolving, fast, and that contract interface between typed and untyped is far ahead of anything the competition has.
  • Racket has lots of great teaching material.
  • Racket has a one-stop-shop for documentation, though it isn't always easy to navigate and often lack examples. That still puts it far ahead of CL and a lot of languages.
  • Racket provides purity by default, with a decent set of pure as well as stateful data structures.
  • Racket has many primitives for concurrency, virtualization, sandboxing.
  • Racket has standard primitives for laziness, pattern-matching, etc.
  • Racket has a standard, portable, gui.
  • Racket has a lively, healthy, user and developer community.

I probably forget more.

PS (2017-08-23): A few months onward, I've mostly jumped ship from Common Lisp... but not to Racket, and instead to Gerbil Scheme.

As ASDF 3.3.0 gets released (imminently), I don't intend to code much more in Common Lisp, except to minimally maintain my existing code base until it gets replaced by Gerbil programs (if ever). (There's also a syntax-control branch of ASDF I'd like to update and merge someday, but it's been sitting for 3 years already and can wait longer.)

What is Gerbil? Gerbil Scheme started as an actor system that vyzo wrote over 10 years ago at MIT, that once ran on top of PLT Scheme. vyzo was dissatisfied with some aspects of PLT Scheme (now Racket), notably regarding performance for low-level system code and concurrency (at the time at least), but loved the module system (for good reasons), so when he eventually jumped ship to Gambit (that had great performance and was good for system programming, with its C backend), he of course first reimplemented the PLT module system on top of Gambit, or at least the essential features of it. (The two module systems were never fully compatible, and have diverged since, but they remain conceptually close, and I suppose if and when the need arise, Gerbil could be made to converge towards PLT in terms of features and/or semantics.)

Why did I choose Gerbil instead of Racket, like I intended?

  1. A big reason why I did is that I have a great rapport with the author, vyzo, a like mind whom I befriended back in those days. A lot of our concerns and sense of aesthetics are very much in synch, and that matters both for what there is and what may come to be. Conversely, the bigger features that Racket has that Gerbil is lacking (e.g. a GUI) are those that matter less to me at this point.
  2. What there is, the module system, the actor system, the object system, the libraries, is far from as complete as I could wish, but it is all in good taste, and with the promise that they can be molded to what we both want in the future.
  3. While the code base is smaller than in PLT, it is also more consistent and with a coherent sense of aesthetics, being implemented by one man (so far). It also happens to cover the kind of domains for which I'm most in need of libraries, and it also has a bias towards industrial applicability that you can't expect from PLT and its legion of academics and interns (see my discussion of PLT above).
  4. Sitting on top of Gambit does not just mean relatively efficient code (as far as Scheme is concerned), but it also means enjoying the portability of its GVM, and some of these properties are especially interesting to me: its observability.

Observability is the property (whose name I coined in my PhD thesis) whereby you can interrupt the execution of the program and observe it at the level of abstraction of your language (in this case, the GVM). This already allows Gambit to migrate processes from one machine to the other, even though the machines may be using completely different backends (C on ia32, C on AA64, JS, PHP, Java, etc.) For my thesis, I want to generalize observability from the GVM to arbitrary virtual machines written on top of it for arbitrary languages, with plenty of cool implications (including e.g. Erlang-style robustness; see said thesis). Working on the GVM will save me having to care about plenty of CPU- or VM- dependent backends that I would have to deal with if I wanted to write a compiler from scratch or reuse an existing one. I notably tried to read the source of Chez Scheme, that PLT Racket is adopting as a new backend (moving from its own horribly complex yet ultimately slow C codebase); but it is largely inscrutable, and with its tens of backends would require much more work before a prototype is achieved.

I therefore have a lot of personal reasons to adopt Gerbil. I understand that Gerbil in its current state, is no rival to either Racket or Common Lisp (or Haskell or OCaml, or even blub languages), for most people in most situations. Yet there are probably other people for whom it is a better fit, as it is for me; and I invite these people to come join forces and enjoy writing in Gerbil. It's still barebones in many ways, yet already quite a pleasure to work with, at least for me.

eyes black and white

Reading Greek Mythology

As I read "d'Aulaires Book of Greek Myths" to Véra, I am reminded of Paul Rosenberg's "Production vs Plunder", and how it interprets the history of religion and state; and it becomes painfully obvious to me, which was never mentioned when I was a kid, that the stories of Gods violently defeating other Gods by allying with other Gods — were the oral tradition remnants of stories of inter-ethnic strife, whereby one ethno-cultural group violently imposes it supremacy through wars and alliances, only to be eventually toppled by another group.

Greek mythology, like other less-documented polytheistic mythologies, is often retrospectively presented as some kind of structured view of the world, some sort of single coherent static religion where every God has a well defined role in the Universe. But nothing could be further from the Truth. Complex structures like established religions do not arise out of the divagations of some mad poet inventing random gods in drunken stupor. No, established religions they are the fruit of cultural, economical and political confrontations among and between many people rivaling for dominance, whether peacefully or violently. And this confrontation does not follow an orderly plan, but is a mess, a market, a war, an enterprise, and much more; a dynamic reality where gods are memes backed by money as well as swords, by farmers as well as intellectuals, by the inertia of large ethnic groups as well as the catastrophic action of charismatic leaders.

In the Greek Theogony, first comes Gaïa, a primitive cult to Mother Earth, not an active cult, but a memory of the very first religion of the first agriculturists. Then, her son, lover and husband Ouranos takes over; he is a Sky-God, a rain God — one old variant of so many conquering or domineering sky gods in so many mythologies. That again is the memory of a first conquest of the agriculturists by invading herdsmen and their Sky-Gods; you can tell who did the violent conquest by who ends up on top despite not being there first. Though in the very first conquest, the conquered were so probably so incompetent at fighting that they just surrendered without too much blood; balance of power is the fruit of long interactions.

There are other gods, the Titans, and some many-headed or one-eyed monsters, but they are "sons" to Ouranos and Gaïa, and Ouranos cast them into Tartarus. Historically, this sounds like this religion managed to eliminate two or more different families of religions, and violently repress or destroy their cults, maybe genociding or enslaving their followers. The many-headed monsters and the cyclops could have been animists, or people once led by a one-eyed leader or two, or a tribe of herdsmen known for their one-eyed sheep. The details are long lost. But once you understand myths as history compressed to stable memes by centuries of oral transmission by the victors (and to a lesser degree by other survivors), they are no longer arbitrary just so stories, they are the last witnesses of wars and invasions, alliances and natural catastrophes, from a time before history was written (at least by those who transmitted those myths).

That story when Kronos defeats his father Ouranos? One religion that was formerly repressed or subsidiary took over the dominant status from the previous Sky God. Kronos was the youngest of the Titans — a recent religion from a new set of migrants. He castrates his father Ouranos and throws his testicles to the sea (a detail omitted from d'Aulaire's expurgated retelling). There might have been an actual event where some King or High-Priest embodying the power of Ouranos was thus overpowered and castrated by another embodying the power of Kronos; or there have been a mass castration of enemies; or just killing of males; or just the descendants of the vanquished king (his notional seed) fleeing by sea; or some combination of the above, or something else. Oral history doesn't well distinguish between Gods and their cults, between the people and their leaders, between successive generations of leaders, between people with the same name, between prominent mountains and rivers of one people who tell a story, and prominent mountains and rivers of other people who appropriate and retell the story, or who tell it after having migrated.

Then, Kronos eats his children — maybe his priests try to claim for him the attributes of other gods, declare them but facets of that one god, and build a syncretic monotheism out of the many religions around; but that doesn't hold, and eventually he is toppled by Zeus, his "son in hiding", i.e. a newer secondary Sky God, worshipped in clandestinity — or maybe the very same Sky God as Ouranos, and also the same as Thor or Indra, just reimported from latter waves of migrants, distant cousins of the former, invading a few centuries later. Zeus, allied with his "siblings" once eaten by Kronos, i.e. with reestablished cults previously repressed, wins over Kronos; then most of the Titans refuse his reign, but Zeus and his allies prevails after a long war. Zeus even allies with some of the older gods (of animism?), but in the end casts them back to Tartarus, to "guard" the Titans; this episode might possibly correspond to the allies fomenting a rebellion by some people enslaved by their enemies, only to enslave most of them again after the victory. Indeed, animism survives in Greek Mythology, with nymphs and river Gods, spirits of trees and houses, though it remains secondary to institutionalized religion. Whatever happened, you have to imagine a long, messy ethno-religious strife, as the previous political supremacy is destroyed and the former vassals fight over who will or won't be dominant in the new order. Kronos may have been the Cretan power. Or not. I don't know. I don't know that anyone knows. It has stopped mattering that much many millenia ago. What still matters though is that we should understand human nature, and how culture is the condensate of the often violent confrontation of many influences.

However, Theogony is not all wars. A story goes that Aphrodite came from the sea; she does not acknowledge being the daughter of any other god yet she sits in the Pantheon equal to the greatest of them. — That story does not suggest a war; likely, the people who brought their love goddess Aphrodite came with some superior sea-faring technology and were adopted in the greater Greek commonwealth. Who were the seafaring people of the day? The Phoenician. And indeed Wikipedia says that Aphrodite is of Phoenician origin. So this interpretation of myths does lead to verifiable predictions. Some stories suggest Aphrodite was produced by the seed of Ouranos thrown to the sea — which seems to confirm the interpretation of the fall of Ouranos as a sea migration after the downfall of a mighty kingdom. Other stories claim that Aphrodite was a daughter of Zeus after all; this filiation is symbolic subordination; it probably was retroactively invented later, after the Phoenicians had been taken down a notch in the pecking order of the CommonWealth: indeed, Gods did take sides in the Trojan war (i.e. the most prominent leaders of each cult), and Aphrodite was on the defeated side of the Phoenician-related Trojans. Other peaceful gods include Dyonisus and Prometheus. Dyonisus brings wine and tells everyone how to make it. The much older god Prometheus once brought fire stolen from the thunder god Zeus (i.e. from a fire started by a thunderstorm), and taught men how to keep it. Sometimes, a wave of migrants joins a common culture through peaceful trade, by bringing some superior technology or another, and contributes with it a god or goddess to the Pantheon of the day — or become deified in recognition of their achievement.

Our successors in the far future, whether made of flesh or of digital patterns, will not study our detailed history. Their understanding of us will be based on gross summarizations, optimized for extracting and transmitting whatever meaning remains relevant to them, not for completeness or accuracy — in other words, on myths. Even if all the written and filmed documents of today survive, the picture they draw is far from complete, and far from accurate, and wouldn't be either necessary or sufficient to understand whatever there is to understand about our times. It too is myths, myths that we feed each other in order to manipulate each other in various ways. Consider how most of what has been written on the recent US election was partisan propaganda of some kind; and that is not at all specific to those US elections, just more blatant and obvious for the close, high-stakes contest. Understanding how to not to fall for the remnants of propaganda of the past is a good exercise to avoid falling for the overwhelming propaganda of the present.

PS (2017-09-07): Of course, historical clashes do not alone explain myths. The worldview, the beliefs, the values, the worries, the aspirations, of the tellers and retellers, that they wish to propagate onto others or that they blindly follow, are also part of these stories... and that's the whole point: there is no single force at stake in building and propagating myths. Describing the myths that reached us as flowing from a single coherent source, rather than emerging as a mish-mash of memes that evolved and fought each other, is itself an absurdity that flows from the superstitious judeo-christian notion of a "revealed truth".

eyes black and white


The Deadly Sin of Gluttony does not consist in eating a lot. It consists in consuming more than you can afford. In harsher times, that did mean Death indeed — yet an indirect Death that had to be warned about for it wasn't obvious to the naive and the ignorant. In modern times, consuming more than you can afford still means Death, but in a yet more indirect way, that requires oh so bigger warning. There are enough interpersonal safety nets and economic interconnections that Gluttony is not usually deadly at a personal level — but it remains Deadly, and how Deadly, at a societal level. Gluttony is socialism and everything left wing: denial of scarcity, spending as if from an infinite barrel, "unblocking" the manna from above. But the manna isn't from above, it's the blood and sweat from the producers being oppressed, and the more they are oppressed the less they produce, until the very richest country in a continent (Rhodesia, Venezuela) becomes the very poorest, and people starve and die.

The big mistake that modern people make with respect to their ancient predecessors is not disagreeing with them — it's failing to understand them. Our ancestors weren't more stupid, naive or credulous than we are. Their disadvantage compared to us is that they lacked the accumulated product of thousands of years of riches, of wisdom, of experience, of technology, of social skills — in a word, of capital — whether material or human.

eyes black and white

All Watched Over By Machines Of Loving Grace

When my friend Markus Fix twitted this poem, I knew I had to put it to music, and I did: "All Watched Over By Machines Of Loving Grace", by Richard Brautigan.

Collapse )

It is a beautiful poem about the simultaneously most awesome and most awful future of mankind, after we win and create AIs: returned to nature, to be cared for by robots, i.e. as zoo animals for the new higher form of intelligence that we gave birth to. Not being so good with lyrics, yet desiring to write more songs, I was delighted to find this powerful expression of a universal yearning, particularly heartfelt by technogeeks, that can be read on many levels: as a literal celebration of a lofty aspiration, to use technology not only to satisfy every human need, but also to find oneness with nature, by stripping life of all the drudgery that distracts us from its essential meaning (whatever it be); as a reductio ad absurdum of naive utopias that take this yearning as a millenial destination to be implemented rather than an inspiration to draw direction from; and as an ironic warning of the danger of trying to deprive humans of their self-ownership and subject them to an inhuman, mechanical, order, reducing them to mere animals without higher purpose of their own, whether cattle, pets or zoo monsters, kept in golden (or not so golden) jail under the control of superior masters.

And so I immediately set out to put that poem into music; though I only got the first stanza that day, and finished the last stanza weeks later. Just like my And A Pony song, I can proudly claim to mean this poem on all levels. I love the song I wrote based on the poem (taking the liberty of repeating some lines, as befits the medium of songs but not of poems); but I have never been able to perform it to a level of quality satisfactory to my ears. One thing I definitely don't know how to do is how to postprocess the last repetition of the last line so it sounds creepily like a tinny emotionless robot voice.

As usual, you can download the Lilypond source, or the printable PDF. Sorry, no recording at this point. I figure if six years later I still don't have a half-decent version, there's no reason to wait for one; and so, since my other friend Perry independently puts this same poem on his FB feed, it's as good a time as any to publish at least the score...

Collapse )