Or: Why Javascript Developers are Often Marxists
We’ve all heard the idea of the tragedy of the commons: the idea that when nobody has an incentive to maintain a shared resource, everyone following their own incentives causes the demise of the shared resource. A typical example given here is a pasture in which sheep graze. If everyone limits the amount their sheep consume, then the pasture has enough for everyone. Since feeding your own sheep more than everyone else allows your sheep to produce more wool and baby sheep, there is an incentive for people to overgraze their own sheep, leading to the destruction of the pasture.
Ostensibly, private property solves this problem by giving someone both an incentive, and ability, to maintain the pasture. Inherent here is the idea of scarcity and maintenance. How important are they? If we imagined a pasture that didn’t need to be maintained, and couldn’t be overgrazed, would the tragedy of the commons still apply?
Perhaps counter-intuitively, I think the answer is “yes”. I believe public (i.e. unowned) resources end up having the same problems as shared, mutable, global state: maintaining invariants becomes impossible. Thus, in addition to creating incentives, private property acts as something like a form of concurrency control. Legal ownership fulfills a similar function as a mutex: it allows for a single intended use to play out entirely, rather than having some resource continually thrashing between various use cases, and ultimately producing nothing.
When people ask me to imagine a world without private ownership, I immediately start running into practical problems. Let’s say I want to use a giant warehouse for an indoor waterpark, and someone else wants to use the same giant warehouse for a paintball obstacle course. How do we resolve the conflict between the two of us? In a world with private ownership, the conflict is resolved by whoever owns the property making the decision, and a system of courts and law enforcement creating incentives for people to respect that decision.
Producing anything of long term value usually requires some form of investment; a period of time in which state is being manipulated just so, and yet no value has been created. Only after state has been arranged just right, is the value created. While people build a house, it’s completely unusable. The work that is done is only valuable if the house can be completed.
If a house is mostly built, and a hurricane blows it away before anyone can live inside, was any value really created?
Private property as an institution allows one algorithm to take as long as it wants to manipulate state in order to produce some value. Absent this mechanism, I don’t know how any long term value could be created. If someone else can take the crops after I’ve planted them, watered them, and tended them, whatever purpose they have might be supplanted by another party coming to take the item from them.
Even if you get rid of incentives and imagine we are all driven fully by the public good, we all have different notions of what that means. Multiple threads in the same processor aren’t tripping each other up due to incentives; it isn’t that one thread says “you know I’d like to write a value to this hash table, but I’m concerned that other thread will replace one of the pointers in the bucket, so instead I just won’t bother.” The two threads just go about their work, and the result is that the program crashes or produces incorrect results.
In a world without private ownership, I don’t know what prevents that same kind of thrashing. Making a functioning world economy without private ownership sounds like trying to manage a giant multithreaded computer system without any concurrency or synchronization primitives: a recipe for wasted effort.
Maybe the problem with having a public pasture isn’t just that one shepherd might have their sheep eat so much grass that the roots are gone and nothing can grow back. Maybe there’s also category of problems where one shepherd might be attempting to have their sheep arranged in a red-black tree, and some other shepherd wanted to use the space to encode lookup tables for a compression algorithm, and as a result, nobody managed to get their computing done and all of those cycles were wasted.
Conflicts Lead to Massive Waste
Speaking of waste, everyone on the internet agrees that arguing on the internet is a huge waste of time. You know what else is an even bigger waste of time? How about centuries of chaotic warfare that make any form of long term investment impossible? Or, perhaps, how about getting angry and yelling at your spouse? That’s a waste of time too.
All of these problems are fixed by strictly adhering to explicit social hierarchies. Of course, there are other problems with those, but I think few people alive today realize the benefits that explicit hierarchies have in terms of mitigating conflict.
I think if we want a society free of hierarchies, we need to understand the problems these hierarchies are solving. Otherwise, we’ll probably just create a new set of hierarchies while claiming we are doing something fundamentally different. Hierarchies are one extremely simple way of solving concurrency problems. If those problems continue to exist, it’s likely we’ll stumble into ‘new’ solutions that are identical to the old ones.
Any human relationship presents an ongoing stream of concurrency problems. People often have conflicting wants and needs. The work of maintaining a relationship includes identifying these conflicts and rectifying them.
I can reduce the likelihood of fighting with my wife by adopting the simple, explicitly hierarchical maximum that if we ever argue, she is always right and I am always wrong. Thinking this way made my ego squirm a little bit, but once I let go of that and just accepted that it never helps us to fight, I found that there is actually a kind of peace that comes from submitting completely to a source that you love and trust and know has your best interest at heart. When I think of friends whose judgement I trust, and who I know love me, there’s a kind of illicit thrill that comes with the idea of completely and totally surrendering to something that dominates you as it protects you.
From a concurrency control mechanism, there isn’t really a difference between “the duke obeys the king, and the lord obeys the duke”, and a protocol which assigns numeric values to locks, and says you can only pick up new locks if you go down the hierarchy.
It’s not at all hard to imagine why people like the idea of ‘the good king.’ If you pin me down, really hold me tight, hug me and tell me you’ll keep me safe, and ask “would you rather have the ability to vote for one of two sociopaths who claims to represent you, or have me, your lawful king protect you,” I know which way my limbic system would vote. The rational mind says “give me agency and the ability to navigate this reality as i see fit”, but the pack animal longs for a strong, just alpha to be both a source of protection and a sink for admiration.
Thus, the King acts like a global mutex over all states. If you’re a meme such as the Helix Fossil, and you want to instantiate yourself all over the domain, you’ll need to grab control over the ‘King’ mutex first. Once you have this ‘King’ mutex locked up, you can grab control over the ‘Duke’ and ‘Baron’ mutexes as needed, to levy your taxes, raise your workforce, and ultimately construct glorious statues in your likelihood. All praise Lord Helix!
However, If you try to acquire these mutexes in the reverse order, Bad Things are likely to happen to you, and the computing domain’s anti-viral mechanism (aka local clergy) will deem you to be heretical and you’ll be relegated to executing as a background thread in the underground economy.
War and Deadlock
We might view periods of social unrest in strictly hierarchical societies as being something like periods of deadlock in a concurrency system. Instead of making forward progress on committing transactions (i.e. continuing the business of keeping the kingdom alive and healthy) conflicts between the nobility can consume massive amounts of resources, both raw material and human lives. In a similar fashion, a poorly managed concurrent system will grab lots of memory and CPU cycles, without producing any useful work.
Of course, in the total absence of any hierarchy in society, you might see the same kinds of conflicts playing out, just at a much smaller scale: if people can steal and loot with impunity, we wouldn’t they?
This interplay between conflict-resolution structures both alleviating and leading to conflict leads us to what look like different forces that reach different equilibria in different geopolitical phases.
Smaller scale concurrency problems between tribes lead to the creation of states and governments; large scale concurrency problems between states and governments lead to the breakdown of those states and governments, and a resurgence of tribal power. We might see the Peace of Westphalia as being something like a temporary patch over the distributed human operating system; the idea of nation states took a while for people to figure out how to hack, but they got it eventually – and that’s what we’re watching now, from Brexit to Trump to Bolsonaro to Orbán. The global operating system is involved in a massive case of deadlock, leading to starvation, a slowdown in global productivity growth and thus a resurgence in tribalism.
The tradeoffs between a globalized economy and a patchwork of nationalism look a lot like tradeoffs involved in designing dataflows on a massively multicore system.
When you have a small number of processors, and plenty of chip-memory bandwidth, nationalism is less effective than globalized trade. Having an operating system running on a single core, and delegating work to a small number of other cores only makes sense. After world war 2, the US was the dominant global economy, and arguably the course that maximized human flourishing was the US providing global stability by exporting its value-transfer mechanism all over the world, leading to massive drops in poverty.
However, once you have hundreds of processors (i.e. once most humans advanced beyond a subsistence agricultural economy) , the headaches of managing concurrency in an OS that runs on a single core end up forcing you to choose between serializing everything (i.e. running everything through the global dollar clearing house), which constrains growth, or accepting deadlock and thrashing – i.e. increasing conflicts. My guess is that the world we are transitioning into will simultaneously be more chaotic and more prosperous at the same time. We might expect to see a move towards more federalism as being akin to a realization that in a world with hundreds of cores, operating systems need to be natively multicore.
If you’ve got a machine with fifty thousand cores, it’s massively wasteful to have one core scheduling tasks on 49,000 others. That will end up serializing the whole machine. Similarly, approach that reduces conflicts for level of technological development may end up increasing them at another. Religions have successfully convinced large groups of distantly related people not to fight each other, and to instead pursue a common goal. Religions have also successfully convinced large groups of distantly related people to travel really long distances to fight even more distantly related people. There is no paradox here. The effectiveness of conflict-reducing technologies (such as religions, nation states, and ‘book of the month clubs) are all constrained by scaling limitations. The same techniques that reduce condition for a 4-core machine might totally serialize a 50,000 core machine.
Multipolar geopolitical realms and multicore systems are hard to predict, for largely the same reason: concurrency problems are tricky.
The future is massively parallel
Just as modern microprocessors look like tiny distributed systems, I think we should expect to see modern cities behaving a lot more like nations used to. The contours of human social structures are going to shift and change depending on the changing availability of computational resources. It takes a society of widespread literacy to believe in something as absurd as QAnon. It isn’t two steps forwards and one step backwards; we’re traveling in a space with many more dimensions.
I’ll bet that George RR Martin originally wanted to write about concurrency in distributed systems, but he realized that this topic would be TOO AWESOME, so he had to water it down by adding a bunch of sex and violence and replacing computational primitives with human equivalents. The Boltons, for example, with their tendency of flaying men alive, represent the atrocious PHP programming language.
Speaking of popular atrocities, PHP reminds me of the recent widespread interest in Marxism. There are a lot of people who will say that inequality and private property are the root of all kinds of problems in society. When pressed on these issues, these people will tend to agree that really poverty is the problem they actually want to solve. In their minds, private property and inequality are what stop us from solving property. So why do they start off with claims that ‘private property’ and inequality are the problems?
None of the people who’ve made these claims to me have a background in distributed systems. I think these proposals come from the simple worldview that says “some have so much, others have so little, why can’t we just make an adjustment in the distribution?” To me, this is the same attitude that says “why does distributed systems have to be difficult? Can’t we make an abstraction layer that covers all this stuff up?”
Javascript does a decent job hiding the complexities of multithreaded systems, by shoving everything into a single thread. Twisted python takes a similar approach. And this is why frontend developers are more likely to be marxists: from their perspective, you don’t really need separate threads. You really can have one centralized state management system and it all just works out.
Of course this insane essay is now going where all insane essays to, to that most fabulous sink of meat-cycles. Wasn’t it obvious that this argument was about bitcoin maximalism the entire time?
I think it ends up being telling that the ethereum people chose to base their ‘world computer’ notion on javascript, and it includes both tTuring completeness, and a central committee while Bitcoin developer Satoshi Nakamoto explicitly rejected Turing completeness (in exchange for predictability), and implicitly rejected any control structure over the currency by remaining completely anonymous.
The ethereum foundation believed that with enough clever protocols, they could somehow find a way to let shepherds run their red black trees in parallel with any other algorithm, and everything would just work out, and still nobody would be really in charge of the field, just a sort of advisory committee that makes suggestions about how the protocol for sheep management should evolve.
Meanwhile, Nakamoto said “we only need to agree on how many sheep there are, that’s enough, and anything else is too complicated.” Bitcoin Maximalists are the set of people who agreed on this; anyone who wanted more features tried to make their own cryptocurrency instead.
Bitcoin is widely popular among libertarians, which means only a small group of vocal weirdos love it. I suspect this is because only that small group of vocal weirdos understand how truly difficult it is to maintain global mutable state. Bitcoin doesn’t have any of the features lots of other cryptocurrencies have. It is singularly focused on solving a single form of consensus – just who has what coins – because libertarians like Satoshi understand just how hard this is.
None of this means I love the idea of hierarchy and control systems. I see how much damage those have done to human dignity. I want to see human freedom and individuality flourish as much as possible. Enabling that flourishing requires understanding the real problems that control systems solve. So what does a solution look like?
Keep Property, Drop Hierarchies
Hierarchies prevent deadlock at the thread level by restricting parallelism. If there are only four cores, having them arranged in hierarchy where one core controls the other three is only practical. As the number of cores the system rises, the cost of centralized control increases. I think the world at present is like a massively multicore machine, strangled by an outdated control hierarchy.
And, lest you think i believe people are merely rule-following automatons – One difference between people and computers is that people do make choices in their own interest and computer code doesn’t. As long as individual persons can identify when they’re in a deadlock situation, its in their best interest to stop the deadlock. Of course, that same capacity – to recognize where we are stuck, because it doesn’t suit our interests – is also what allows us to steal from and defraud each other. Property rights in the real world are enforced by the police and court system, which is a violent hierarchy.
And this is, again, where bitcoin comes in. You can keep your keys in your brain if you want. It’s not that theft is impossible, that can still happen – but it becomes feasible to safely store large amounts of value without depending on a violent hierarchical system to secure your claim. The cryptography does that for you. That is what makes bitcoin so powerful.
Bitcoin has enabled human cooperation at a scale far larger than any other non hierarchical system in history. That feels like a profoundly under-celebrated step in evolution of the human control plane. I am optimistic that as long as some value can be stored, absent hierarchical and violent systems, people will find this state of affairs desirable, and we can rely more and more on reputation networks and voluntary association to enforce a set of norms that allow voluntary, consensual interaction to scale globally.
I’ll happily submit to my wife’s authority, because I know she’s competent and that she loves me. For everything else, I’ll take my own chances.
4 thoughts on “Private Property and Social Hierarchies as Concurrency Control Mechanisms”