It might take a year or so, but a direction of some devs on the #Fediverse around #ActivityPub is to make software that is fundamentally OCAP based. A big question will be: will there then be software that ignores it and effectively creates two fediverses? Or will existing software attempt to try to be a Swiss-Army-Knife implement-it-all? Or just migrate completely over?
I have no answers but it's an uncomfortable question on the horizon.
@cj I definitely won't be making my software support it if I am never able to understand it, which seems likely from all the discussions I've lurked!
@darius @cj Kinda why I wrote https://dustycloud.org/blog/if-you-cant-tell-people-anything/
@darius @cj The ideas are not complicated... they're actually simpler in many ways. But they are different, and do start from a different set of assumptions.
I don't think I'm going to have much success in convincing anyone but the super-interested until I have things that are put in peoples' hands and them trying/using them.
People learn through immersion best. The main problem is that people don't have immersive experience in these ideas.
@darius @cj The likely problem will be, by the time people become sufficiently immersed, it may be too late. The adoption of ActivityPub will be too strongly in the "same-origin" set of assumptions. It may not be possible to undo that level of network effect.
I remain hopeful, or at least keep working, though, because I am fairly certain the alternative is a system that collapses under its own complexity.
I hope I can get tools in peoples' hands in time. :(
@cwebber @cj I definitely learned about the details of federation by actually building stuff and road testing it. All the discussions I happen to see are incredibly intimidating though, and it seems like it would be a high stakes thing for me to create something that uses OCAP but do it wrong (same as with federation over AP!)
@darius @cj So here's where I think Spritely Goblins will work: the network code is completely hidden. It just looks like normal coding.
"Where is the federation? Where is the security?"
It is automatic and all over the place, resembling doing normal programming. Ocap security is exactly the same as invoking functions and passing them arguments.
So let's try in bullet form. What is Spritely Goblins?
- a distributed programming environment that's safe to use even when you don't fully trust the network.
- ocap security is baked in, is just part of normal programming.
- It follows the "classic actor model"; kinda like Erlang but more correctly
- it even has such wild features as distributed garbage collection
- it is meant as the *foundational layer* for writing Spritely programs
(cotd ...)
@gargron @darius @cj
- Its design means you can implement a distributed currency system in *fifty lines of code or less* and a toy authenticated chat system in *250 lines of code*. Both of these have been written but I haven't talked about them much yet. Yes, this means we could use this to bring payments to the fediverse.
- ActivityPub interop is planned as an easy-to-use shim library.
@gargron @darius @cj The design is taken from a little known language known as E: http://www.erights.org/
I have implemented that design on top of Racket/Scheme. The core ideas are portable.
E came out of a distributed virtual worlds game that unfortunately died in the late 90s crash but was very interesting called Electric Communities Habitat https://www.youtube.com/watch?v=KNiePoNiyvE
I talked about this in my apconf talk last year https://conf.tube/videos/watch/2b9a985b-ccdd-49ce-a81b-ed00d2b47c85
@gargron @darius @cj So Spritely Goblins is not the distributed social system. A different Spritely project will be that system. But I have already written a few little demos, they work fine/great.
But because of Goblins, Spritely will be able to do things that seem absurdly, impossibly complex for contemporary fediverse applications like distributed virtual worlds. It's designed to make that kind of thing easy. And it is, because it was based on an architecture built *for that*
@gargron @darius @cj But I probably sound like I'm full of bullshit. All I can ask is that you be patient and believe that I might not be. Or actually you don't fully have to be, you can start learning now by reading the docs (which exist) https://docs.racket-lang.org/goblins/index.html
I don't want Spritely to be vaporware, that's why I'm taking the demo-oriented approach. Terminal Phase was the demo of how the basic programming system worked (pre-distributed). The next major demo will show off a distributed system.
@cwebber @Gargron @cj Okay so from this thread (thanks for the bullets points) I take it that Goblins is a programming environment, which means that if I plan to continue programming in say... Node.js or Ruby or Python I will likely never learn it or need to learn it? More likely I would be interacting with software that was built in the Goblins environment, via talking to that software through APIs and the like?
@darius @gargron @cj You might not have to! The design is portable. And the Agoric folks are already doing that https://agoric.com/
Although their marketing is currently towards blockchain stuff because that's where the money is, the tech is more interesting than that and doesn't require blockchains at all.
The Goblins *design* is portable to multiple languages. It's a programming environment, but is written as a library instead of a language to be portable.
@darius @gargron @cj I am inventing almost no new concepts. The core ideas are almost all taken from 25 year old technology.
The situtation for ocaps vs ACLs/origin-oriented programming is similar to the situation with functional programming: the ideas that are becoming popular today are mostly not new but were extremely obscure until enough people had reason (or interest) to explore them.
@cwebber @Gargron @cj yes I am actually pretty familiar with Habitat and Chip and Randy's work, as a former professional MMOG developer myself. I can see from the papers you link that OCAPs are decades old, my head was just spinning at the idea of a portable, language-independent programming environment. When I think of programming environments I imagine like, Smalltalk.
@darius @gargron @cj Anyway the outcome of all this will be one of three things
1) Spritely succeeds and is ActivityPub interoperable. Horray, everyone wins!
2) Spritely succeeds but the rest of the ActivityPub community won't adopt and grow. I'll be in the unfortunate state of abandoning the ActivityPub shim then and that means something resembling a fediverse fork which I DON'T want. But I won't abandon this direction.
3) I die from stress trying to make it happen
@emacsomancer @darius @gargron @cj I was going to say "Yeah, maybe I should take the rest of the day off for once" but it's nearly 5pm here...
@darius @gargron @cj I should clarify on 1). I don't expect everyone has to adopt Goblins for 1) to succeed. I don't even expect everyone has to adopt something that looks like Goblins exactly.
I expect to extrapolate some ocap patterns generally that even django/rails users can use in their applications.
AND, such applications should be able to *use* stuff that spritely-based servers provide (such as the distributed payments and etc stuff) even if they can't implement it themselves
@gargron @darius @cj See this post https://octodon.social/@cwebber/104814082932841391
I'm writing the initial thing in Racket because I like it and also because it's a nice place to do programming theory experimentation. But Goblins relies on 0 lisp/scheme specific abstractions. It could be ported to Ruby, it would just be work to do it.
@gargron @darius @cj You can also use Agoric's stuff but I am starting to outpace them; if what you care about isn't blockchains (which in general, the fediverse doesn't care about blockchains) then Goblins is probably closer to what you want right now.
I already have distributed garbage collection and time travel implemented; they don't.
@gargron @darius @cj That's not to hate on the Agoric folks though; many of them are my friends and most of my ideas are mined from stuff they've come up with. They're just focused on JS (and unfortunately, a couple of decades of javascript standards advocacy to make it *safe* enough to do this) and also, because of their income source, blockchains (meh). But their ideas/thinking are great, and we might get interoperabilty if all goes well (we are in talks)
@gargron @darius @cj
- The distributed programming stuff already works in the captp branch, but needs to be documented to be exposed for public use (in the next release within the next month)
- It has transactionality and "time travel debugging" built in, hence how Terminal Phase had trivial time travel (no more code than exposing it in the UI https://dustycloud.org/blog/goblins-time-travel-micropreview/
(cotd ...)