Yes and no. We know how to do it for a small insider group. Such as our little community here. We don’t know how to do it at a larger scale.
I don’t even think we know how to do it for small groups of weak ties like here. Strong ties like a family, maybe, as Robin Sloan describes. But in my experience there’s a “chasm” of incentives between building for oneself and building for “a large market/vertical”.
As we discussed before, we have the concept of views to see a system at different levels. What we are missing are the different methods of engagement by the community , and the relation of the experts with the community.
Different views / levels will also require different types of social engagement to alter the piece of software.
In other words, we need to introduce varying methods of governance according to the level and type of system we work on. There is no single type of governance that works for everything.
But there are common quantitative and qualitative properties of governance structures that we need to measure and foster.
The incentives need to come from the group, and at least one group member needs to have the required competence.
One example I vaguely know (meaning I spoke to the developer) is a sports association that uses two webxdc apps to coordinate activities. The platform takes care of sharing private data securely, and the apps on top of it are simple (at the complexity level of a shared to-do list).
I believe that we need to start small and grow the governance structures along with the complexity of the software. In the sports association example I just mentioned, governance is not an issue: it’s provided by the established structure of an association, which even has a solid legal basis. Software for a town-sized community probably requires something more elaborate.
(new idea)
What i am saying here is that the concept of view is also followed by the concept of projected governance.
There is no reason to have a view if it does not help you to change things. A view can create boundaries into what the affected group is. At the same time the type of view is affected by the effectiveness of governance, thus might be created around existing social structures that are easily governed.
Some thoughts…
Edit:
Maybe I need to give an example here.. but I don’t have much time at the moment. But looking at “one laptop per child” project, one could construct multiple views, at the level of the economy, at the level of the community, or from the point of view of the engineers , all requiring and constructing different levels of organization.
And just to have copyright on this moto ,
if glamorous toolkit proposes to have moldable development in which new views are cheap,
I propose the concept of moldable governance structures where new types of governance are easy to create on the spot.
start small and grow the governance structures along with the complexity of the software
It’s interesting how the concept of a “malleable system” is (seems to be) inherently political, as it involves a power structure among the creators and users of the system; and how openness is directly correlated with security/vulnerability.
The smallest unit of governance is a single person, who creates and uses a system, for example a cyberdeck personal computing device, or some home-made program. That person has full control and power over the system, limited by the creators of the components of the system (hardware and software). It’s fully (re)programmable, completely malleable.
The next level up is two people with the same/similar device or application, interconnected somehow in a network. Already there’s potential security and trust issue, like identity, how to verify each person; capability, what each person is allowed to do.
Thinking of higher scales of a social network, it reminds me of Dunbar’s number.
Dunbar’s number is a suggested cognitive limit to the number of people with whom one can maintain stable social relationships—relationships in which an individual knows who each person is and how each person relates to every other person.
This number was first proposed in the 1990s by Robin Dunbar, a British anthropologist who found a correlation between primate brain size and average social group size.
That makes sense that our cognitive capacity limits the size of the social group that we can comfortably accommodate. I wonder if there’s a software equivalent, some quality that limits its scalability. (Cyclomatic complexity?)
Software on a massive global scale, like operating systems and social networks, seem to favor top-down corporate governance structure, with little to no malleability. (FOSS is a huge exception that disproves that notion.) Or maybe it’s that malleability and personal freedom must be controlled and limited in larger social groups in order to maintain stability.
That reminds me of a paper on the evolution of governance that I have seen frequently cited a couple of years ago: Tribes, Institutions, Markets, Networks: A Framework About Societal Evolution. Somewhat speculative, but definitely worth reading.
“Institutions” stands for hierarchical top-down governance. “Networks” is what many FOSS projects aim for (though some of the bigger ones are de facto top-down).
It just registered that webxdc requires Delta Chat. The name is probably intended to evoke “Web x DC” and I’m just slow.
..I’m starting to get a more concrete idea, taking exploratory steps in the direction I’d like to go.
The concept is an “emulator” of an imaginary retro computer with memory, storage, I/O devices, audio, graphics, networking. A fantasy console in the spirit of PICO-8 and System 7.
Written in C99, a timeless language - or rather, frozen in time - likely to be portable for decades. It can compile to target Wasm (web and anywhere Wasm runtimes can run); desktop (Linux, macOS, Windows); mobile (Android, iOS); systems on a chip (Raspberry Pi, ESP32).
So far it’s a mere sketch, but the software stack includes: Sokol (examples of tiny 8-bit emulators built on it); Dear ImGui for user interface; and uLisp, which I’ve been porting to Wasm as a side project. It’s a small subset/dialect of Common Lisp that runs on microcontrollers with limited memory.
(I’m also playing with xcc
, a C99 compiler that can compile itself to Wasm. So I have a compiler that runs in the virtual machine, which can produce binaries targeting it.)
I’m hoping to make this Lisp the key to the malleability of the system, if I can create a browser/editor/server environment in Lisp itself. Theoretically, live objects could be serialized, transferred over the network, and re-animated on the other side.
Well, mostly dreaming for now, but at least there’s an amoeba-like mutant program emerging from the soup.
I love it!
Written in C99, a timeless language - or rather, frozen in time - likely to be portable for decades. It can compile to target Wasm (web and anywhere Wasm runtimes can run); desktop (Linux, macOS, Windows); mobile (Android, iOS); systems on a chip (Raspberry Pi, ESP32).
Bear in mind that the timelessness of your system will be the minimum of the timelessness of all its components.
My guess for this minimum is the WASM tooling, according to the principle-whose-name-I-cant-remember that says that the expected time for some technology to stay around is the time it has been around already.
I absolutely love this idea! Good luck with the project : )
Thank you @neauoire - I love your work on uxn. It’s been a while since I first read about it, and I see it has blossomed into a whole ecosystem. Runs on most platforms, even ESP32. And apps can communicate to each other, like a miniature Unix.
uxn orca.com | piano.rom
It’s brilliant. I really resonate with its design decisions, the thinking that led up to its creation (Weathering Software Winter), stories of living on a solar-powered sailboat.. This year I’m moving out of the city (of a hundred spires) to a rural off-grid habitat, which makes me appreciate and re-think civilized life down to its “primitives” (water, food, electricity) including computers and communication networks.
..Off on a few tangents below.
In computing, language primitives are the simplest elements available in a programming language. A primitive is the smallest unit of processing available to a programmer of a given machine, or can be an atomic element of an expression in a language.
This diagram is from:
DRAKON (Дружелюбный Русский Алгоритмический язык, Который Обеспечивает Наглядность, meaning “Friendly Russian Algorithmic Language Which Provides Clarity”) is a free and open source algorithmic visual programming and modeling language.
It was developed as part of the defunct Soviet Union Buran space program in 1986 following the need in increase of software development productivity. The visual language provides a uniform way to represent processes in flowcharts.
It’s satisfying (“provides clarity”) to get down to the basics, working from the ground up. Experiencing the realm of ideas as a tangible reality, manipulating concepts like in The Glass Bead Game.
I’ve continued exploring the rich discussions on this forum, and found:
The README in the project is a fun read, it contains so many good ideas, some of which I’ve also been rediscovering in my own experiments. I think it’s in the same conceptual/artistic direction as uxn, like a wizard conjuring up a microcosmic computer stack from nothing, one word at a time.
Then I found:
So good!
In order for code to be living structure, even the tools used to make the code need to be living structure. – Christopher Alexander
This is a demo of a language I’ve been working on called Loops & Logic.
It’s written in a superset of HTML for ease of learning, as its original purpose is to serve as a template language. But as I continue developing “smart editor” features with language integration, like:
- lint - verify syntax with helpful error messages
- format - prettify code formatting, optionally automatic
- hints - autocomplete of tags and attributes, suggestions, info on hover about parts of an expression
- interactivity - number slider, color picker, select list of available values
It seems to be evolving into a Lisp-like environment for interactively creating hypertext documents. The user interface is a common pattern, with code editor and a visual canvas for live feedback.
One of the next questions I’m solving is how to provide a more seamless HTML-like syntax for styling (without CSS) and behavior (without JavaScript). I suppose with magic attributes like color
and action
.
Bret Victor’s Learnable Programming is often in the back of my mind. (Also Seymour: Live Programming for the Classroom.)
Recently saw this remote Lisp server via SMS (short message service).
It’s lovely how it shows the essence of computation and communication. An expression is received, evaluated, then a value is returned. A function is defined, then later invoked in a subsequent message. The last command is remotely reading the voltage level of an analog GPIO pin.
And scary how open it is, someone would only need the phone number or IP address of the server, and a bit of Lisp to access the system. Depending on what’s connected, they can blink LED lights, display a message, read sensor data, open curtains and doors, water the plants, feed the cat..
The above is a “prototype” (text in a window) in my C99 stack. I wonder if/how the Lisp program can actually work as an HTTP server in a browser, ideally peer to peer.
Last week I finished porting uLisp (8K LOC) from Arduino code to plain C, and wrote a minimal REPL in the terminal.
It’s a fun exercise for me to (re)learn C and make my own tiny Lisp machine (virtual for now). I feel I’m going in the right direction because all the code I’m writing is super portable, to all platforms that a C compiler can target including Wasm.
My guess for this minimum is the WASM tooling, according to the principle-whose-name-I-cant-remember that says that the expected time for some technology to stay around is the time it has been around already.
Earlier this year Wasm version 2 was announced, and I’m already nostalgic for the simpler v1 with only a handful of op codes. There are a number of small Wasm compilers (from C, Lisp, WAT, etc.) that I’ve seen people write, but Wasm v2 will require significantly more effort to implement. It’s no longer simple to understand.
The Lindy effect is a theorized phenomenon by which the future life expectancy of some non-perishable things, like a technology or an idea, is proportional to their current age.
So C99 should be good for another 25 years (quarter century). Seeing how we have all kinds of emulators of retro computers running in the browser, in big part thanks to WebAssembly, I think we’ll see C compilers for centuries, eventually an interplanetary or extraterrestrial language.
the principle-whose-name-I-cant-remember
Ah, I see you answered your own question further down
I too have found myself fumbling several times for the name of the Lindy Effect.
DRAKON has been on my mind a fair bit lately during my experiments in spatial Literate Programming.
About Lindy Effect, I was actually quoting @khinsen from an earlier comment, and asked a local LLM for the answer; but it hallucinated a plausible but imaginary history, so I had to resort to legacy search (DuckDuckGo), trying various phrasings until I found it.
what’s the principle that says that the expected time for some technology to stay around is the time it has been around already
That’s called “Hodges’ Law” or “The Half-Life Rule,” although it was actually popularized by Roy Amara, who paraphrased Hodges as saying: “Technology adoption follows a logistic curve. The half-life of technology (the time it takes for a technology to become obsolete) is roughly equal to the time since its invention.”
That’s a real person, but he’s known for a different adage.
“We tend to overestimate the effect of a technology in the short run and underestimate the effect in the long run,” coined by Roy Amara, past president of The Institute for the Future.
I’ve been tempted to post a few times but have told myself to hold off until I’ve “done more stuff” (software-wise), or even just read and browsed more of the threads in general, but allow me to break my forum silence for this thread here and say - holy moly, that’s some good stuff.
Bookmarking, will be coming back here again and again. So much to explore! Thank you @eliot and all other contributors here
Indeed. Technology isn’t inert - solely dependent on who uses it. As Langston Winner showed in 1980, artifacts have politics.
Regarding some of the OOP/UX citations in this thread. I think it’s rather telling that Apple’s Swift has moved to a reactive model from the NeXT/Objective C object model for UX elements.
One of the most powerful ways to simplify toolbuilding isn’t to hide state in objects but to eliminate state - either through ephemeral functions or immutable values.