470 lines
50 KiB
Plaintext
470 lines
50 KiB
Plaintext
|
|
Episode: 2623
|
||
|
|
Title: HPR2623: Actors and Agents, Sprites and Fractals
|
||
|
|
Source: https://hub.hackerpublicradio.org/ccdn.php?filename=/eps/hpr2623/hpr2623.mp3
|
||
|
|
Transcribed: 2025-10-19 06:44:08
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
This in HBR episode 2623 entitled Acton and Agent, Bright and Fractal, it is hosted by
|
||
|
|
Clacket and in about 57 minutes long and carrying a clean flag, the summary in which I sit
|
||
|
|
down with Seawebber and try to keep it short, but end up with an hour of tangents.
|
||
|
|
This episode of HBR is brought to you by archive.org.
|
||
|
|
Arch-Universal Access to All Knowledge by heading over to archive.org forward slash donate.
|
||
|
|
Hi, I'm Clacket and I'm here with Christopher Lemmerweber and the last time we talked you
|
||
|
|
were Christopher Allen Weber, but that's a long time ago and a lot of things will happen.
|
||
|
|
Yeah, one thing that happened is that I started collaborating with somebody named Christopher Allen
|
||
|
|
and there is already a Christopher Weber person in the free software community.
|
||
|
|
And there were a few other naming conflicts that I decided to just my wife is Morgan Lemmerweber,
|
||
|
|
so I'm like, well, I'll do that.
|
||
|
|
That's a good idea.
|
||
|
|
I mean, it's pretty funny that we're discussing this and you're actually doing research
|
||
|
|
on how to name things now, so that's pretty suitable.
|
||
|
|
So the last time we talked, I was December 2015, but for HBR listeners, that's actually January 2017
|
||
|
|
and that's not a mistake I made now.
|
||
|
|
That's a mistake I made then.
|
||
|
|
I let it linger for a year procrastinating and wanting to edit it.
|
||
|
|
And finally, I just let it go.
|
||
|
|
So I'm going to try to be faster this time.
|
||
|
|
Cool.
|
||
|
|
Yeah, so I'm excited to talk.
|
||
|
|
I guess we have an agenda.
|
||
|
|
So should we jump straight into it?
|
||
|
|
Yeah.
|
||
|
|
So Chris and I are both racquet users these days and we hang on the racquet users mailing list.
|
||
|
|
And we are working on similar, but not quite the same thing.
|
||
|
|
So Chris is now working with an actor model library in racquet.
|
||
|
|
And I'm working on a flow-based programming library in racquet.
|
||
|
|
So Chris, what's the actor model?
|
||
|
|
Okay, so the actor model is a pretty old idea.
|
||
|
|
So the general idea is that you've got actors are just entities somewhere.
|
||
|
|
They have an address that you send messages to.
|
||
|
|
And they can be like kind of computer science-y idea.
|
||
|
|
Let's see if I can do it off the top of my head because I didn't put up.
|
||
|
|
But I is that I think that an actor can do a few things.
|
||
|
|
It can receive a message.
|
||
|
|
It can send a message.
|
||
|
|
It can respond another actor and it can change its behavior in response to the next message.
|
||
|
|
But in general, it's really you're kind of setting up some objects somewhere and you're just kind of shooting messages back and forth.
|
||
|
|
A lot of things can be perceived as actor model systems.
|
||
|
|
So almost any time that you have multiple servers sending messages around to each other that can be perceived as an actor model system.
|
||
|
|
And one nice thing about a lot of actor model systems like Erlang and also what I'm trying to do with my systems is that if you it often doesn't matter where the actors are.
|
||
|
|
So there's not really a big distinction between message passing against a local actor versus message passing against a remote actor if that makes sense.
|
||
|
|
How do the actors find out what other actors they want to talk to?
|
||
|
|
So they get a message in general.
|
||
|
|
It's that they they get a message from some other actor that you know ends up telling them about things.
|
||
|
|
So you do have some sort of minor bootstrapping problem. Presumably there's either initial conditions like the so I might spawn an actor.
|
||
|
|
And then when I spawn it, you know, if you think about the character of some sort of object or something like that, there may be the it may come pre loaded when I spawn that actor with references to other actors.
|
||
|
|
Or I can send it a message like saying you know like oh well you know the next time you know you send out you know your interesting timing like update about some sort of news feed or something tell my buddy over here right and I give that actor a reference to it.
|
||
|
|
And then at that point, you know it can store that in its local state.
|
||
|
|
Right or or you could receive a message like I would like to know something that you know and here's the the inbox that I would like you to send it to right.
|
||
|
|
Right so and that actually gets into an interesting thing which is you know you actually just described a way of doing kind of request response things right because by default actors don't if we think about HTTP.
|
||
|
|
HTTP kind of builds in request and response into one thing right you send a request, but then you just sit there and wait until a response comes back right and then the actor model you're generally not doing that you're sending a request and then the other actor presumably at some point might send a response back to you, you don't have any guarantee of that.
|
||
|
|
And that's I guess i'm jumping ahead a bit that is something that in both kind of all the actor model systems that I've worked on ZUD and eight sync and now goblins for racket i've kind of since that's such a common thing to do i've tried is to it's you know especially because programmers are used to being able to invoke some sort of function or method and then get some data back kind of as a return value.
|
||
|
|
i've always added i've always made it so that that kind of behavior is as simple and as invisible to the user of the actor model system.
|
||
|
|
Even though it technically is that you've sent some sort of message and then you've sent a please respond back type behavior there.
|
||
|
|
Okay so the actor model is basically it's asynchronous in its original base conception, but in the systems you have made you've always sort of layered an RPC layer on top of that.
|
||
|
|
That's right that's right so you can see you don't that's exactly so it's basically you've got and what I really have liked to do and in the Python version of things so if people are familiar with.
|
||
|
|
Async IO you've got co-routines and JavaScript recently picked this up and so no JS has something similar with async you can do the whole.
|
||
|
|
You can set up all of your co-routines so that they kind of their generator based co-routines or generator style where they kind of each move a little step and through that you can instead of having kind of call back hell you can.
|
||
|
|
It can kind of look like you're just calling some sort of function and then when something's ready it resumes this function that was suspended.
|
||
|
|
The main problem with Python and JavaScript is that since this wasn't really baked into the language you kind of have to make sure each one of the functions that you're going to be chaining together you have to kind of align them like gears.
|
||
|
|
And if each one of these gears suddenly you have kind of a circle that doesn't have these knobs on it.
|
||
|
|
You don't have you can't carry forward that automatic coroutine like behavior what's nice and got in schemes like guile and racket is that they support continuations or I guess delimited continuations which means that this type of behavior is even more invisible to the user and you don't have to align any functions you don't have to mark a function as specifically an async function.
|
||
|
|
Any function can do this type of suspend behavior.
|
||
|
|
That sounds like an HPR episode on its own.
|
||
|
|
Yeah I suppose I went on a we're like we're going to keep each one of these things nice and succinct and I already started going on a tangent there.
|
||
|
|
Yeah yeah the whole delimited continuations thing just keeps popping up and I think at some point I knew what it was and then I forgot about it again but let's not dig into that.
|
||
|
|
I think it's nice to it's probably important to emphasize though that delimited continuations or co routines in general not required for the actor model though that's something that I've layered on top of the systems that I've built.
|
||
|
|
Right okay yeah the actor model doesn't really say much about things on the API level right is very conceptual and then people invented over and over in different implementations for whatever is suitable for what they are using the actor model for.
|
||
|
|
Right lots of people invent the actor model over and over again and don't realize it's an actor model right now people are currently calling microservices microservices and really they are actor model systems that kind of don't know that they're the actor model.
|
||
|
|
That's a fun little comment because we are calling our flow based programming systems microservices.
|
||
|
|
Clack what is flow based programming.
|
||
|
|
So flow based programming is a model where in the actor model you talked about sending things to inboxes that you somehow figured out where they are maybe you got a message or maybe you configure it somehow else and every actor has one inbox in flow based programming.
|
||
|
|
Each component in the system and in the actor model they actors in flow based programming we call them agents.
|
||
|
|
And each agent has not just one inbox it can have several ports they're called and an agent in the flow based programming model has several in ports and it has several out ports.
|
||
|
|
And that's all the stuff that it knows about where to get and where to send data.
|
||
|
|
So the idea is you write these agents and then you wire them together on a higher level so you start by creating all these small microservices or agents or components that each are like a black box that has inputs and it has outputs.
|
||
|
|
And then you take these and you wire them together in a sort of different layer than you write the code.
|
||
|
|
So that's one part of flow based programming is you have the agents and you have the graph that connects the agents together.
|
||
|
|
And then another thing with flow based programming is that each edge between two nodes in the graph.
|
||
|
|
So from one agent to another agent there's an edge that means the communication channel between them that is by design a bounded buffer.
|
||
|
|
So that if you have one agent just keeps spewing out messages.
|
||
|
|
If the other agents aren't listening and taking care of those messages fast enough then that first agent that is sending the messages is going to block until the buffers start getting the messages start getting peeled off the buffers.
|
||
|
|
So there's a sort of flow control model built into it.
|
||
|
|
Well, there's flow in the name.
|
||
|
|
And the idea is there's some initial message that comes into this graph of agents and that message sort of results in a wave of messages going through the network.
|
||
|
|
You can imagine if something goes from left to right in a graph you can see the message coming in at the left and then there's a sort of wave of activity going right and then maybe the next message comes in and then you have these sequential waves of activity going through the graph.
|
||
|
|
One concrete example of a flow based programming network would be some kind of for example image processing.
|
||
|
|
It worked before on a system that was handling camera input and trying to detect objects classify the objects and maybe generate some safety action like breaking the car or helping the driver steer back into the correct lane or something like that.
|
||
|
|
And so then you have a continuous feed of here's an image here's an image now we have another frame of our maybe 30 frames per seconds video stream or whatever.
|
||
|
|
And for each frame there's some analysis done like here we have the metadata for this and then in the next step we have the metadata for this.
|
||
|
|
And then in the end you have some outputs that actually go into feeding back into the system that now you should take some kind of action that's that's kind of the typical flow based programming network.
|
||
|
|
So you and I had a number of exchanges about this on the racket users mailing list and not to get into the racket part of it yet.
|
||
|
|
But I think one of the things we were trying to figure out is the way in which flow based systems are the same as indifferent from actor model systems right.
|
||
|
|
So maybe that would be interesting to explore since I think as we both said we both of us are like oh microservices those are technically our thing.
|
||
|
|
And so we maybe maybe we should try to figure out how how these connect together and I'm going to pause it one thing that seemed kind of clear and see whether or not you think this is right.
|
||
|
|
It seems to me that flow based programming systems are a little bit more like circuits where they're kind of fixed is that right conceptually that is right.
|
||
|
|
And that's how I thought it needed to be when I got into this but then it turns out the way we use this is well at any given moment the network is fixed but we also allow ourselves to modify it.
|
||
|
|
And I'll get into that later when when I talk more specifically about why why we use flow based programming or what we use them for but some systems like the one I was telling you about that's in the car that's like built at compile time.
|
||
|
|
But what we're doing if we're building a GUI and we wanted to react dynamically to something happening we also allow ourselves to add new agents and add new edges to talk to those agents in in runtime.
|
||
|
|
But you can say that at any moment there's still like this fixed graph that describes the whole flow of the data through the system.
|
||
|
|
OK, right. So the so that I mean I guess I'm going to throw in on a different theoretical computer science system. So there's also I'm trying to remember the name of it communicating sequential processes which is kind of in many ways I kind of so which is actually what I'm building.
|
||
|
|
It goblins on top of because that's what racket uses for it's a sync system is communicating sequential processes in many ways it seems very similar to flow based programming in that have a some sort of process that can have multiple channels that it can send messages to and listen to to messages coming from.
|
||
|
|
And like you said it doesn't unlike the actor model is not one specific inbox is kind of keep returning to I wondered if you've looked at communicating sequential processes and have noticed some sort of way in which it's different from that.
|
||
|
|
Is there is there some clear difference between flow based programming and and CSP something that one has that the other doesn't.
|
||
|
|
I think the main feature of flow based programming and what it's good for is that you have these restrictions on how things are allowed to interact. So we I know that you use the racket asin channels for for goblins and we also use asin channels for implementing our flow based programming.
|
||
|
|
So it's pretty clear that each of these systems can be expressed in the other because that's actually how we implemented.
|
||
|
|
But it's yeah I think what what flow based programming offers is not so much all the things you can do but it's more like these are the things you restrict yourself to so that you can reason about the system.
|
||
|
|
So what you can do is understand the system I guess is the feature.
|
||
|
|
So you mentioned that you had in the car and imaging system that you had kind of compiled time kind of static analysis that you were doing of it.
|
||
|
|
Do you lose some of the ability to reason about things when you've allowed the ability to kind of dynamically connect things.
|
||
|
|
Well, I'm sure we lose something in that and at the moment where the tooling is we we've also lost other things that originally fractalite was written in in Mozart Oz which is a multiple paradigm programming language that is used in teaching programming concepts.
|
||
|
|
And then for practical use Dennis and Stewart made a rust implementation and that had strict typing on all the edges.
|
||
|
|
And now we're in racket and we're not doing that anymore so we definitely lost a lot of compile time checks and everything is a little bit more freewheeling now.
|
||
|
|
But we're going to find ways to further restrict that again once we got everything put together but right now we're in very rackety and very live coding kind of mode.
|
||
|
|
Well, is this a good time to switch over to racket or should maybe we should talk about racket and then the object capability stuff what do you think since we're kind of started moving in that territory.
|
||
|
|
Yeah, so let's go into racket you implemented eight sync for the actor model before on dial so why are you now on rackets implementing your goblins actor model implementation.
|
||
|
|
So the real reason I started well so so what happened was at the start at the end of last year actually my my spouse and I were talking about how she started doing programming within the last few years and she's an academic and we were like well you know a lot of these academics don't realize how helpful like a lot of people in the humanities don't realize how helpful programming tools could be to them.
|
||
|
|
We could probably run a workshop and I just kind of said oh racket might be a good fit because they've got doctor racket and you know they've got this thing called scribble and we started talking about oh you know that may be a good path to teaching academics because then they could write papers for you know non computer science.
|
||
|
|
Computer science e academics you know they could write their papers in this markup language and you know if they learn get and things like that they can also check it into there and yeah scribble is the markup language that you use for racket documentation that's right so when you were working out a way to to have humanity's people also write things in the scribble right so we ran this workshop and it was it was successful and but when I first sat down to be like well let's see how feasible this is and I sat down
|
||
|
|
and you know I've been working on a lot of things in guile over the last few years and and I kind of looked at once I sat down to play around with it I kind of had this no moment like as I was like wait a minute they've got this and they've got this and they've got this and like it was a large number of thick yaks that I thought I had to shave myself that it turns out that racket kind of came either as a third party library or
|
||
|
|
very frequently in the standard library I kind of think of racket is kind of being the Python of lists like it has a very wide standard library that you can even without pulling in third party libraries due to like an astoundingly large amount of things with
|
||
|
|
yeah it's very bad reason included that's also my feeling like you're you're implementing on it to talk to this web service or whatever and then I wish I could just require Jason and then I would have a Jason read function I'll just do that oh yeah I do have it
|
||
|
|
yeah exactly and and let the glee library is excellent the yeah there's web tooling that comes built in there's just a lot of things that I was like prepping myself for a few years of kind of yaks shaving and guile and I was like oh it's already done and racket and I actually kind of almost got angry about it because I thought you know like well like I'm really
|
||
|
|
devoted to guile but I felt like I couldn't justify that in a certain sense because there were so many nice things in a racket so I was like all right you know what I'm going to see how far I can go and
|
||
|
|
racket and it turns out that the answer has been pretty far I also really love the community around racket like when when I first created when I started with this
|
||
|
|
project project fractal I would do it and then is my first task what to write rackets to nix because we are using nix for the the final composition of things and so
|
||
|
|
good choice yeah you and I met talking about geeks and nix is the forefather and here I am two years later getting paid to do stuff in nix
|
||
|
|
that's pretty pretty awesome and so I wrote racket to nix and Stuart told the mailing list like we're working on
|
||
|
|
this thing and then the same day Matthias Feliz and one of the professors working on the core of this
|
||
|
|
language went in and made a pull request like here I fixed all your little style issues this is how
|
||
|
|
we write racket and was the most impressive response from from a language community possible I think like here's one of the founders of the
|
||
|
|
language and he just told you how to write in this language and he eroded for you and just here take this so that's that's a good gift
|
||
|
|
yeah I have to say well okay I will say Giles community was also very good in that the people were very
|
||
|
|
friendly to me and I felt like the maintainers were also guided me a lot and helped me a lot but I guess part of
|
||
|
|
the thing with racket is that it's not exactly a mainstream language but it's a little bit more mainstream and it has
|
||
|
|
a much larger and more stable set of things and I guess partly because of that I didn't expect the kind of
|
||
|
|
community responses I've gotten to things I've been I think like you pretty surprised that if you go on
|
||
|
|
the racket mailing list and you're like I want to do x y and z there's like you know four or five you
|
||
|
|
know like I've had I've had threads where I've had like you know four or five people that I consider like
|
||
|
|
you know kind of programming language heroes respond about my stupid racket problem and that's
|
||
|
|
kind of surprising yeah it's very very accessible and some very cool people are involved there so
|
||
|
|
so that's very it's kind of overwhelming and when you start and it's very friendly feeling
|
||
|
|
yeah so here's another okay actually this is another reason why I got into racket one of the
|
||
|
|
problems with in Giles is that and I think this is true of pretty much all this except is that
|
||
|
|
with the list machine pretty much gone the if you want to get into programming in a list the thing
|
||
|
|
that somebody will tell you is okay first go learn emax and then come learn this and like learn
|
||
|
|
all these different programming modes and then come learning list and like that's that's like
|
||
|
|
that's a pretty high barrier entry whereas racket comes with doctor racket which like is made
|
||
|
|
for ittle schoolers to be able to computer programming and yet so like good enough that it can
|
||
|
|
scale up to you know a serious language researchers and you also have emax if you want it and the
|
||
|
|
documentation is so good that I realized oh one of the challenges I was having in Giles was being
|
||
|
|
able to get newcomers to come into a project who didn't have scheme programming experience and
|
||
|
|
be able to help get them acclimated and you know with media goblin we were using python and we had
|
||
|
|
a really easy time getting people started and I was kind of like oh I I could have that back again
|
||
|
|
with racket oh I definitely agree about the documentation it's it's top notch definitely
|
||
|
|
yeah so I think I'm gonna bring up I'm gonna I'm gonna throw these one I think we've got
|
||
|
|
enough for about how awesome racket is and why we're using it yeah I wait I want to throw in two
|
||
|
|
other things that are interesting about one of the things that's interesting and then one
|
||
|
|
thing I'm gonna complain about though so one thing that's interesting about racket is that it's
|
||
|
|
very language focused in that you know and this is something you're taking advantage of more than I
|
||
|
|
am because mine's kind of a library but I think it's built with the intention of people being able to
|
||
|
|
build lots of languages in it right it comes with like 200 languages and it's I mean the racket
|
||
|
|
people talk about programming language oriented programming I better link to that in show notes
|
||
|
|
is a pretty good article but yeah absolutely it comes from the I mean it used to be called PLT
|
||
|
|
scheme where PLT is the programming language theory department at MIT so it pretty much comes with
|
||
|
|
the territory that it's programming language oriented yep and I'd say that maybe if racket has
|
||
|
|
a problem it's that it targets middle schoolers and programming language theorists and there's like
|
||
|
|
this large untapped middle ground that I think it it hasn't tapped into but totally could which is
|
||
|
|
I kind of consider kind of like the Python programmer style domain sorry I was typing what were you
|
||
|
|
saying I was saying that I think that racket targets like middle schoolers and very young programmers
|
||
|
|
and also like on the other end of the spectrum like programming language theorists but there's this
|
||
|
|
large middle ground that I think is kind of untapped and I think that that's why Python is so
|
||
|
|
successful in many ways is that it really caters to people kind of just day to day being able to
|
||
|
|
plug things together and I think racket could absolutely be an ideal fit for that middle area too
|
||
|
|
but I think isn't kind of marketing itself for it right so Python kind of lives in that
|
||
|
|
that middle area and and I guess some people would take this as being condescending but Python is
|
||
|
|
a very good gluing language and maybe racket doesn't quite feel that niche but it definitely could
|
||
|
|
I agree with that yeah and I mean maybe focusing too much on languages actually doesn't help
|
||
|
|
because I'm not sure all languages like blanks and racket semi-compose but not fully always
|
||
|
|
so that's that's something I've thought about but I mean racket already has a really great
|
||
|
|
amount of libraries so I think it's not a problem but anyway the one downside I'd say to racket is
|
||
|
|
that it doesn't support live programming as much as other lists generally in that it's in other
|
||
|
|
lists that I've worked with you can kind of run the program and like you're doing web development
|
||
|
|
or something and you change world around you or when I was working on mud sync which was this
|
||
|
|
live mud development environment for a multiplayer game people could join the game and they could
|
||
|
|
say oh it would be really cool if this was here and I'd just add it and like the language itself
|
||
|
|
supported that and racket is almost kind of against that because racket wants you to recompile
|
||
|
|
every module and then you can play around in the REPL but you can't redefine things that have
|
||
|
|
already been there but I guess there's been discussion on the mailing list and I think Matthias has
|
||
|
|
even expressed that you know maybe we could support that mode a little bit better yeah it's it's
|
||
|
|
quite compile oriented and I guess the compiler is allowed to make a lot of optimizations because
|
||
|
|
it has all the information about the sort of final state of the module and what symbols are
|
||
|
|
going to be there so I think if I've understood discussions if I've understood the discussions on
|
||
|
|
the mailing list correctly then I think the way the REPL works is it creates new modules all the
|
||
|
|
time where new definitions new definitions shadow the older definitions so you got like a
|
||
|
|
whole layer of modules under the hood and you're always in the sort of latest module and when you
|
||
|
|
redefining things you're just adding another module on top and defining things there and then
|
||
|
|
sort of importing all the work you did up to this point I think I think if I've understood
|
||
|
|
correctly that's that's how the REPL works and that doesn't really work for for a live process
|
||
|
|
because you would have to migrate the whole process into each of these new sort of module frames
|
||
|
|
right that's my understanding as well and I have an idea on maybe how we could do it
|
||
|
|
though I haven't actually tested it yet and since racket is so Lang E it might be possible to build
|
||
|
|
another Lang which is what racket people called languages that so that maybe like boxes function
|
||
|
|
definitions so that you can actually just replace the contents of that box as you redefine things
|
||
|
|
and stuff but I don't know if it'll work or not but that's something I'm very interested in exploring
|
||
|
|
okay so now one of the other things you're exploring apart from actors and activity pub and all
|
||
|
|
these things is also object capabilities how does that fit into things so a lot of this is so a way
|
||
|
|
that most of our security ends up being designed is what is sometimes called perimeter security so
|
||
|
|
for example kind of forms of perimeter security you're probably familiar with is your access
|
||
|
|
control lists on your computer if you're using a unixe type system you've got your files are
|
||
|
|
probably protected by users and groups and stuff like that but and then if in your browser you've
|
||
|
|
got like same origin policies and stuff like that but the problem is that so what object capability
|
||
|
|
people like to say is that if you've the problem with perimeter securities it's really eggshell
|
||
|
|
security if you because you can just make a tiny pinprick in it and suck out the whole yoke
|
||
|
|
and some examples of that are so if you have on your imagine you've got lib png or some other
|
||
|
|
image display program on your computer and there's just the tiniest bug on the bng just like super
|
||
|
|
tiny that's just like a little memory overflow problem or something like that and if somebody can
|
||
|
|
exploit that they can have access to everything you can do right not just plitting the wrong things
|
||
|
|
on your screen but everything right and if we took an object capability approach that wouldn't
|
||
|
|
happen you would be instead able to just blit you know just in pixels and that's it and similarly
|
||
|
|
in your browser you've got it's very difficult to control the same origin things and bugs come up
|
||
|
|
with that all the time and so object capabilities is an alternative way of looking at security which
|
||
|
|
is very often ends up being the pure version of whatever programming language paradigm you're
|
||
|
|
interested in so for example most programming languages are very long decalculus
|
||
|
|
esque which is you define a lot of procedures and the procedures can call their procedures and
|
||
|
|
etc so if we take away the top level like we take away global variables which people generally
|
||
|
|
think is a good idea to remove global variables and we end up passing around references to things so
|
||
|
|
your function may come in a module that has it has been initially been granted some
|
||
|
|
access to some things and then your functions only have access to the things that are passed into
|
||
|
|
them effectively then at that point we have object capability security which is you know basically
|
||
|
|
principle of least authority applied on a like programming language theory direction similarly
|
||
|
|
with actor model if your actors only have references to the other actors that they should have access to
|
||
|
|
if they don't have global access to a bunch of other actors then they can't call on other things
|
||
|
|
that they shouldn't be able to have access to so they can't if you're you know that if we go
|
||
|
|
back and scan through memory and find everything that is there and go on wreak havoc right exactly
|
||
|
|
so you you wouldn't and it turns out it's possible to do this in operating systems as well
|
||
|
|
so if you're if you've got a if you've got that image problem that image program it wouldn't be
|
||
|
|
able to do it wouldn't be able to you know like crypto locker your file system or something like that
|
||
|
|
so object capabilities are very desirable in that they're but they it's a different paradigm
|
||
|
|
instead of being identity oriented security which is how we're used to thinking about things
|
||
|
|
like what can clack do and what can criss do yeah if you want to access my stuff you need to
|
||
|
|
become me and then suddenly you have access to all my stuff right so instead of that it's possession
|
||
|
|
based it's like kind of like a car key you've got your car doesn't care who you I mean in old
|
||
|
|
school cars at least your car doesn't care who you are if you've got the key to turn on the car
|
||
|
|
then you can turn on the car right and it may sound cooler to have a car that can scan your face
|
||
|
|
and say you know welcome criss this is you know you may now drive but it turns out that introduces
|
||
|
|
more security vulnerabilities than the old version of things and object capabilities also allow
|
||
|
|
for delegations so I could say okay clock you know it's okay for you to drive my car and I just
|
||
|
|
make a copy of my key and I had it to and then you can drive right and I can also revoke that
|
||
|
|
I can press a button and it destructs your key and then you can't use it anymore and if you
|
||
|
|
had made a copy and give it to somebody else it would destruct that copy effectively as well
|
||
|
|
and I can also attenuate it so if you know there's the there's a concept of a
|
||
|
|
some cars have that are really fancy have valet keys where they can only be driven a certain number
|
||
|
|
of miles so if I give I can make a copy of my key I can delegate it but I can also attenuate
|
||
|
|
that delegated copy which means I put some caveats on it that say like oh you can drive this
|
||
|
|
but only until this mileage which is five miles from now so now nobody can go on a joy ride
|
||
|
|
with my car right so with that kind of idea and by having kind of the possession oriented
|
||
|
|
reference to things we can do some really powerful things and make things much more secure
|
||
|
|
and I'm currently working on a standard called OCAPLD OCAP is the shorthand for object capabilities so
|
||
|
|
object capabilities for linking data it's a standard for linked data systems so that we can bring
|
||
|
|
kept object capability security to kind of web APIs and things like that all right very cool
|
||
|
|
and I was just thinking when you're talking about the valet key and stuff maybe most people haven't
|
||
|
|
had that but many internet banks these days offer you the ability to create a temporary virtual
|
||
|
|
credit card so like I'm gonna buy this thing from this company that I may or may not trust
|
||
|
|
it's gonna cost a hundred US dollars so I'm just gonna create a virtual credit card that only
|
||
|
|
allows one transaction for a hundred US dollars and that's it so even if their credit cards
|
||
|
|
leak and my money is still safe right so credit cards are kind of like bearer capabilities
|
||
|
|
in a certain sense so bearer meaning like if you have access to it you can do things and OAuth 2.0
|
||
|
|
bearer tokens are are also very similar right there was a second example of things that people
|
||
|
|
might have used OAuth right so we can so that so the bank example is really good because let's
|
||
|
|
point out a very dangerous thing that we don't want people to do but people do all the time right
|
||
|
|
which is like are you familiar with mint.com mint i don't know it no okay so they're a budgeting
|
||
|
|
application and they are able to they want to be able to give you they want to analyze your
|
||
|
|
purchasing habits and then tell you you know you've been spending this much on this this number
|
||
|
|
on like groceries right that makes sense right right okay so the problem is you do the identity
|
||
|
|
oriented login and to give them your credentials so they can log in as you so you have to really
|
||
|
|
trust mint to not also withdraw money and things like that or transfer your money because they
|
||
|
|
could in theory but if there was an object capability type approach instead we would be able to
|
||
|
|
grant them a capability to just read your bank account but not be able to withdraw yeah
|
||
|
|
all right so we got your actors you got your object capabilities how does this fit into
|
||
|
|
media sharing applications and and how is sprightly going to take over the world oh before we
|
||
|
|
talk about that should we give an activity pub updates since the world has changed dramatically
|
||
|
|
since the last recording oh do go ahead well i i don't even remember did we talk about activity
|
||
|
|
pub in the last hpr no no that was two years ago you were you were working with it but it wasn't
|
||
|
|
like near horizon so we were just talking about keeks oh okay so activity pub is a federated social
|
||
|
|
network system so that's a so if you wanted to have no so right now in practice if you wanted to
|
||
|
|
have a twitter alternative mastodons an example of that so it's plural and you want you can have
|
||
|
|
speak to each other in activity pub is a protocol that says here's how these two different servers
|
||
|
|
can talk to each other what a lot of people don't realize is it's actually an actor model system
|
||
|
|
you know it's hinted a little bit by the fact that the different users on the network are
|
||
|
|
called actors but really you're sending messages from actor and they have in boxes they have
|
||
|
|
inboxes so it's absolutely actor model system which also means that we can make an object capability
|
||
|
|
system as well the people aren't doing that but anyway what's exciting is that within the last
|
||
|
|
couple years so i was working i spent about three years at the w3c standardizing this it got
|
||
|
|
standardized and mastodon and pluroma and pure tube and a number of other things that picked it up
|
||
|
|
i think we're at near about two million users on the activity pub network or something
|
||
|
|
wow cool i think uh yeah so it's been pretty more successful than i anticipated
|
||
|
|
and you know mastodon picking it up certainly helped the uh it's image recognition i think quite a
|
||
|
|
bit um but i mean one of the things that we didn't do in activity pub was we didn't specify
|
||
|
|
anything about um about accessible right um so uh effectively uh i can if i know who you are
|
||
|
|
i can send you messages uh okay fine um you know theoretically i can also block you and stuff like
|
||
|
|
that if i if i want to but that's kind of your server making that decision um and we describe
|
||
|
|
the proper side effects for that and stuff but it's really it's really um um but we don't specify
|
||
|
|
anything about like let's say i want to create a mailing list type group right let's say you and i
|
||
|
|
want to uh curate a list of photos from foster uh and uh so uh we start this group to curate these
|
||
|
|
photos um and uh how do i give you access to becoming curator of that right um and there's nothing
|
||
|
|
specified right who has access to update that group who has access to delete content from it uh none
|
||
|
|
of that stuff is that is specified in activity pub yeah and when i when we were working on activity
|
||
|
|
pub i thought this was a big mistake on our parts and i just was kind of quiet about thinking
|
||
|
|
it was a big mistake and now i'm kind of like oh thank god because uh if we probably would have
|
||
|
|
done some sort of awful terrible distributed access control list because that's kind of what i
|
||
|
|
knew at the time and it would have had confused deputy attack problems and it would have had all
|
||
|
|
sorts of things like that um and i think that since activity pub is an actor model system we can layer
|
||
|
|
on a a bunch of really interesting object capability type things so we could do that whole who has
|
||
|
|
access to curate this gallery well the gallery itself could be an actor and if i give you in
|
||
|
|
ocap ld capability to uh to curate it then you would be able to do so right um uh and so that
|
||
|
|
that's kind of the way that we can build in uh kind of tie those things together i guess i didn't
|
||
|
|
bring up sprightly though that was like three other things so yeah so what is sprightly uh well
|
||
|
|
vapor rare currently uh that's one thing uh but uh the the goal is um so what happened kind of
|
||
|
|
to my surprise is you know i started working on activity pub because of media goblin which i
|
||
|
|
was working on decentralized media hosting and activity pub was originally kind of oriented towards
|
||
|
|
that but to my surprise a number of other projects have started working on that uh there's a funk
|
||
|
|
whale which is doing audio there's uh um there's pure tube which is doing video and i know federates
|
||
|
|
with uh uh other with mastodon and i and pluroma uh and i think there's uh and there's a few others
|
||
|
|
like pixel flat i don't remember if they have activity pub implementation working but i know they
|
||
|
|
were working on it and funk now it doesn't federate yet he doesn't want to federate until he's got
|
||
|
|
a complete solution in place he's he has a branch that does federation but he doesn't want to
|
||
|
|
activate it until he has all the sort of blocking and and uh uh moderation and all that stuff in place
|
||
|
|
right so i kind of feel like a lot of people are working on those things and um i i kind of was like
|
||
|
|
well what can i do that's more interesting for so i also had an itch to do an activity
|
||
|
|
public implementation which i had done part of one in guile and so i was like well i want to port
|
||
|
|
that to racket and i want to do some more interesting things so part of the idea so this is kind of
|
||
|
|
this sounds spacey and futuristic um but what i'd like to do is build an activity pub uh server that's
|
||
|
|
kind of generic and an activity pub client that's fairly generic so you can layer a bunch of
|
||
|
|
interesting things on top of it but the thing i'd like to do is build a distributed social game
|
||
|
|
on top of it which sounds crazy um if but if you know it maybe if you listen to last one or
|
||
|
|
something i think i might have talked about the mud i built on top of eight sink so it's not that
|
||
|
|
surprising that i'm interested in this and also i showed up at a conference at uh um the w3c
|
||
|
|
worldwide web consortium conference and people were like oh well what would you like to do if you
|
||
|
|
had all the time to work on things and i'm like well it's embarrassing but i'd really like to do this
|
||
|
|
distributed game thing well what i found out is that almost there were a lot of embarrassing people
|
||
|
|
in the room yeah there were a lot of people who well also a lot of this technology came out of
|
||
|
|
that stuff and i didn't know that at the time oh really uh yeah so object capability stuff
|
||
|
|
the most well-known actor model object capability system is called e and where it comes from
|
||
|
|
is e-electric communities and electric communities was a semi-distributed um uh online social
|
||
|
|
online social network slash game that was built in the 90s uh and in order to be able to manage
|
||
|
|
this whole living world that people were walking around in and and everything and be able to
|
||
|
|
allow people to program their own functionality in game and stuff like that and keep it secure
|
||
|
|
they had to use object capabilities so that's where a lot of the object capability stuff has come
|
||
|
|
from and i also am talking with people who are kind of in the digital currency space and i
|
||
|
|
know a number of them were working on it in the 90s on distributed games and stuff like that
|
||
|
|
partly because it was an interesting way to research digital currency because you have to use it
|
||
|
|
in game so um so this kind of kind of sounds crazy and it could just remain vapor where i hope it
|
||
|
|
doesn't um but um my goal is after i have more infrastructure written to start experimenting with uh
|
||
|
|
getting some of these a lot of the technologies i'm working with and get them running out the door
|
||
|
|
with this as kind of a a a test bed and one of the reasons for that is something that struck me is
|
||
|
|
that um so you mean you're using sprightly as the sort of uh the driver to to create things like
|
||
|
|
governments right exactly the reason why this game stuff uh that i'm interested in implementing it
|
||
|
|
is partly because um so one cool thing that people were doing recently with activity pub is they
|
||
|
|
were running it over tour onion services so that was happening in pluroma a few pluroma uh
|
||
|
|
instances were running over tour onion services which i think is great because that kind of uh
|
||
|
|
bridges peer-to-peer and federated systems uh uh and i think that that's a pretty cool thing
|
||
|
|
yeah one of the prop one of the problems i think with uh federated so with like
|
||
|
|
peer-to-peer systems and stuff like that is that people always immediately think of um kind of the
|
||
|
|
nefarious uses of peer-to-peer systems uh so you know the um like people are gonna start selling
|
||
|
|
drugs on them they're gonna do food bar bags and stuff like that um and also the other thing that
|
||
|
|
struck me is that um not many people are hosting federated social network servers um
|
||
|
|
it would be interesting if we could get people hosting things without so another problem is if
|
||
|
|
you show up on federated social networks they're kind of two um it's it's great that mastodon
|
||
|
|
attracted a lot of people in the LGBT space but really a lot of conversation on mastodon uh um so
|
||
|
|
Mikey a friend of mine made a comment a couple years ago which is that federated social networks
|
||
|
|
kind of tend to become a place that people end up discussing federated social networks
|
||
|
|
which okay that's great um like but do you want to talk to some people who are not
|
||
|
|
kind of freedom diehards right like how do we get the networks that it's everybody not just
|
||
|
|
people who are really ideologically motivated so i think one of the interesting ways to do that
|
||
|
|
is to um have freedom be a side effect of the uh um of something else that people want to do
|
||
|
|
so what do people run a lot of servers of who are not um self-hosting nerds um what's the most
|
||
|
|
popular um server that teenagers run around the world is Minecraft right right yeah so if
|
||
|
|
you could create a world that other people can walk around in and what's what's really appealing
|
||
|
|
about Minecraft is that you can walk around the world and build things with friends right so
|
||
|
|
if you run muds in the 90s there was a kind of a parallel aspect to this which is that it wasn't
|
||
|
|
just it was a social network of the sense of space that you could walk around and do things and
|
||
|
|
also in many of these games there was also the ability to kind of affect the world that you were
|
||
|
|
walking around in uh and i think that that may be an interesting avenue for being having people
|
||
|
|
run servers who don't think about themselves as you know specifically user freedom type people
|
||
|
|
and then the next time that if you have it so that you could just click in the sprightly's you know
|
||
|
|
gooey and say spin up a game server and people are just doing that everywhere uh and somebody says
|
||
|
|
you know the next time that you know some sort of you know politician is like we need to shut down
|
||
|
|
right because tour is being used by blah blah blah all these bad people well you could say well
|
||
|
|
your kid runs tour yeah your kid runs an onion service and they're not doing it for
|
||
|
|
nefarious things they just want to run a game with friends right so i think that normalizing these
|
||
|
|
things finding a kind of exciting angle for people to play around with things can can make can be
|
||
|
|
a fun way to get the distribution of these uh but it's pretty ambitious who knows if all succeed
|
||
|
|
or not i've built most of these components individually building them together as one collective
|
||
|
|
thing maybe turn out to be challenging but we'll see it's also kind of something i've wanted to do
|
||
|
|
for years so um since i'm not really being um i'm i have a day job where i'm being paid to do
|
||
|
|
related things but nobody's paying me to work on social network things specifically right now
|
||
|
|
this is the thing that i'm motivated and excited to actually build and i think it could be a real
|
||
|
|
contribution if it happens yeah that's that's a whole hpr episode as well like what's
|
||
|
|
happening with virtual reality when we can when can we get our federated virtual reality
|
||
|
|
network to replace the web or to complement it that's a hole on the other tangent
|
||
|
|
right and it doesn't have to be 3d to start out and make it interesting right so i'm interested
|
||
|
|
in what's the lowest barrier to entry thing that people can start building things that they will
|
||
|
|
participate in uh and right now we've seen a big explosion in interactive fiction stuff again
|
||
|
|
mainly because twine uh yeah i think it's called twine i'm forgetting the name exactly uh i think
|
||
|
|
it's called twine is a uh a like interactive fiction building application that makes it really
|
||
|
|
easy for artists to make interactive fiction and so it turns out this this genre of games that was
|
||
|
|
almost dead came back from the grave because it was so easy for people to just start building things
|
||
|
|
again and i think that that's a pretty cool i'd like to do i if if it was so easy for you to show up
|
||
|
|
in something that's like a chat room but instead of just offering your friend a drink by saying you
|
||
|
|
know here's a drink right what if you have you know like paid a little bit of in-game currency and
|
||
|
|
you got something that you would hand to them and then they would consume it and they had an
|
||
|
|
effect on the world right and they had an effect on their character or something like that it's
|
||
|
|
much more fun when you've got a social network with a sense of space and a lot of the social
|
||
|
|
networks we have right now are degraded in comparison to the mugs that we had in the 1990s
|
||
|
|
they have less functionality in that sense and i think that that's pretty interesting how can we
|
||
|
|
bring back the cyberpunk vision of social networks again yeah very cool so uh is that what you're
|
||
|
|
working on now uh sprightly and all that that's your spare time what are you what are you doing
|
||
|
|
when you get paid oh so i work i'm contracting halftime for an organization called digital bizarre
|
||
|
|
and uh they do a bunch of decentralized identity and decentralized uh other type technology things and
|
||
|
|
it turns out some of the technology said i was interested in overlapped with theirs so i'm working
|
||
|
|
on the object capability the ocap ld stuff i'm actually getting paid to work on that um so
|
||
|
|
tying that together with the activity pub and stuff is with my job outside of work um but i do get
|
||
|
|
paid and right now to do some standards work uh and thankfully uh oh i'm i'm uh digital bizarre
|
||
|
|
i've got i'm pretty strict where i will only do free software development uh and they are
|
||
|
|
respecting my wishes there and uh even though they do have some proprietary stuff that they do
|
||
|
|
and so i'm i'm getting to work on libraries and stuff like that uh to advance some of this stuff
|
||
|
|
oh that's very nice i i consider myself pretty much having the dream job now also i'm i'm i'm
|
||
|
|
making only free software i'm creating tools for developers and i'm uh scratching all the
|
||
|
|
itches i have accumulated over the last 20 years of working in programming like i would like to have a
|
||
|
|
better build system yeah we're going to build a better build system i'd like to have a better way
|
||
|
|
to put code together with other code yeah that's what we're developing i want to make better
|
||
|
|
distributed applications yeah that's also part of what we're doing very cool very cool uh
|
||
|
|
well it sounds like well we're like we shouldn't go uh an hour long and i think we just hit an hour
|
||
|
|
so we need to wrap up i think we should wrap up so uh you've got some things you you want to plug
|
||
|
|
somewhere you want people to go well i'm going to be co-presenting at racquet con with my spouse
|
||
|
|
Morgan Lumberweber uh we are going to be presenting on the workshops that we've been doing and also
|
||
|
|
so i'm we're going to be co-presenting a talk called racquet for everyone else so it's kind of that
|
||
|
|
very topic about well racquet has targeted these two communities but there's a bunch of other
|
||
|
|
groups of people who could really benefit from racquet um and Morgan's going to kind of focus on the
|
||
|
|
the humanities academic side of things and i'm going to focus on the um kind of you know the python
|
||
|
|
space of developers and stuff like that and so we're i'm pretty excited about that okay cool um
|
||
|
|
yeah what i'm working on these days is is fractalite can find us at fractalite.com our biggest
|
||
|
|
challenge is to explain what it is we're doing so uh let us know if you understand anything
|
||
|
|
after visiting the web page and uh we'll try to make it more understandable as we go along
|
||
|
|
sounds great and something that you and i are both doing is trying to get uh racquet better
|
||
|
|
packaged and nicks and geeks respectively um so maybe once this episode ends we should have a
|
||
|
|
quick check-in on that yeah yeah you're absolutely right let's do that okay this has been Christopher
|
||
|
|
Lamberweber and we've been talking about object capabilities and flow-based programming and
|
||
|
|
actor models and all other kinds of stuff that happens while we were talking about it and all
|
||
|
|
kinds of fodder for new episodes but for now this has been Hacker Public Radio
|
||
|
|
listening to Hacker Public Radio at hackerpublicradio.org we are a community podcast network that
|
||
|
|
releases shows every week day Monday through Friday today's show like all our shows was contributed
|
||
|
|
by an HPR listener like yourself if you ever thought of recording a podcast and clicking our
|
||
|
|
contribute link to find out how easy it really is Hacker Public Radio was founded by the digital
|
||
|
|
dog pound and the infonomicon computer club and it's part of the binary revolution at binwrap.com
|
||
|
|
if you have comments on today's show please email the host directly leave a comment on the website
|
||
|
|
or record a follow-up episode yourself unless otherwise stated today's show is released under
|
||
|
|
a creative comment attribution share-like 3.0 life and
|