Just to be clear: I do not treat any of my Mastodon content (DM's, followers-only, unlisted) as private. It doesn't mean I treat it as public, either.

Privacy in software is not a binary idea.

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.

Show thread

@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 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.

@gargron @darius @cj I put the "eye glaze over" version, and why it's hard to explain, in this post dustycloud.org/blog/if-you-can

I am not convinced people will understand until I have a demo of it running a distributed social environment, but I will try to explain anyway...


@gargron @darius @cj

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 ...)

Β· Β· Web Β· 1 Β· 2 Β· 1

@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 dustycloud.org/blog/goblins-ti
(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: 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 youtube.com/watch?v=KNiePoNiyv

I talked about this in my apconf talk last year conf.tube/videos/watch/2b9a985

@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 The important thing is not distributed virtual worlds on its own (but who doesn't crave a fediverse FOSS replacement for Animal Crossing right now?)

The important thing is that if you have something robust enough to make building virtual worlds easy, everything else is easy too

@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) docs.racket-lang.org/goblins/i

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 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 If your language supports proper lexical scope, Goblins will probably work there. So Javascript and Ruby for sure. Even Python... though it'll be a bit annoying there.

@cwebber @Gargron @cj Is there a concrete pre-existing example of a programming environment you can port from language to language, or is this a brand new concept? (As an amateur computer historian I have to assume *everything* has been done)

@cj @cwebber @Gargron wait are we just talking about bindings through languages? that's not what I was conceptually imagining

@darius @cj @gargron I don't think you'd want to use SWIG

I was proposing writing a Goblins-like layer as a library for eg Ruby / Javascript / etc

@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 Oh cool, thrilled that you already know Chip and Randy. Great folks.

I've only come to know them more recently; Mark Miller was the person who has helped most introduce me to this world of ideas. I owe him an incredible debt.

@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

@cwebber these aren't mutually exclusive outcomes, of course. do let's try to prevent 3) though.

@darius @Gargron @cj

@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...

@cwebber Boss comes into the office at 4.45pm - "Employee, you've done good work today. Go on, take the rest of the day off, you deserve it!"

(In this case, both characters are played by you.)

@darius @Gargron @cj

@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

@darius @gargron @cj But... those that do adopt a Goblins-like ocap design will be able to implement those things themselves without needing to rely on Spritely :)

@cwebber @darius @Gargron @cj please do not die. this is important, revolutionary, desperately-needed stuff. abandon interoperability if you need to, and go forth boldly. your work will be used for something-- be it a fediverse alternative/fork, interoperable AP, dating sites, games, cryptocurrencies, post-collapse low bandwidth networks, insurgencies against repressive regimes, censorship resistance, sex work, social sharing, discord altetnatives, zoom/jitsi alternatives, or something not yet even invented, who the hell knows-- and from there will stand on its own

@technomancy @bamfic @darius @gargron @cj Heh, thanks... I'll try not to!

As @mlemweb has said recently, "you don't actually know how to relax". I probably need to start learning!

@cwebber @technomancy @darius @Gargron @cj @mlemweb oh also, federated git forge! ocap spritely could finally get us off of microsoft github! and what better way to get developers to adopt this technology than for us to find it immediately useful for hosting our projects?

@cwebber @technomancy @bamfic @darius @gargron @cj

I'm the number 1 fan of @cwebber not dying. I've been trying to get them to relax more but they're like, "nah, I'm just going to doom scroll through the news for 10 minutes before I pass out from exhaustion"

@cwebber @darius @Gargron @cj 4) Go around the AP community and find a different community and "killer application" for Spritely that drives its adoption. I'd vote for replacing the web with native apps for multiple platforms that use Spritely as a common infrastructure.

@darius @cwebber @cj Yeah it seems like you'll need to develop in the Racket (renamed from Scheme?) language to use it

@gargron @darius @cj See this post octodon.social/@cwebber/104814

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 That said if you want to use it *now*, yeah you probably want to use the one that's currently being written, which is in Racket :)

@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)

@cwebber @Gargron @darius @cj

> the fediverse doesn't care about blockchains
😍 which is a good thing and helps me keeping my sanity

@cwebber @Gargron @darius @cj probably the best bet for experimenting with the paradigm outside of spritely itself is Cap'n Proto, which was built for Sandstorm. There are half a dozen languages that support the rpc layer (captp).

@vancha @gargron @darius @cj Thanks :) I hope it'll all be clearer with the next couple of demos, too!

Sign in to participate in the conversation

The social network of the future: No ads, no corporate surveillance, ethical design, and decentralization! Own your data with Mastodon!