1:16:57Yeah, we have, we have these
like three types of data.
1:17:01This is kind of in the conversation about
like what, What information is there?
1:17:05How do you like categorize information?
1:17:07What guarantees and sort of
like attributes does this
1:17:10different information have?
1:17:11Right.
1:17:11So you have something
like an email client.
1:17:13Let's say we have like what
email is currently being viewed.
1:17:16What text is selected?
1:17:18That's one type of information.
1:17:19Another type of information is like.
1:17:21What is in the email, what is
written in the email, right?
1:17:23Who sent it, which time was it sent?
1:17:26And, uh, there's, there's other kinds
of data too, but sort of like thinking
1:17:30in this way, right now we can add
a third type of data, sort of like
1:17:33a very ephemeral, like imagine that
there's a friend in there, so there's
1:17:36a second cursor on the screen, like
where the cursor is, who that is, like
1:17:39that, that's another piece of data.
1:17:41I think these like have different,
you have different expectations about.
1:17:45Where it is the synchronized hot,
like what reliability of this is, what
1:17:49the latency of this data is roughly
speaking, like what's in the email,
1:17:54what'd you expect there to be correct,
but it can take a while to load.
1:17:58I'm exaggerating here now, obviously
everything should be correct
1:18:01and be fast, but you gotta make
trade offs the cursor, right?
1:18:06It's sometimes you can drop a frame, so
to speak, and it's not that important.
1:18:10Right?
1:18:10Like you can lose this information.
1:18:12You don't have to cache it.
1:18:13The information about like what's
selected and like scroll positions
1:18:16and stuff like that is, is things that
can have lower integrity than sort
1:18:21of like what's in the email, right?
1:18:23And that information might, you
might not want to share with others.
1:18:26Right.
1:18:26Like what's, what texts
do I have selected?
1:18:28Maybe that's something that
shared in a different way.
1:18:30Right.
1:18:31Let's say you have two people
looking at the same email.
1:18:33Then if you shared the tick selection,
like what does that even mean?
1:18:36Right.
1:18:36If I want to select something, I
would change your tech selection.
1:18:39That's kind of like weird.
1:18:40So you've got to treat that differently.
1:18:41So there are, there are
different categories of data.
1:18:43One thing.
1:18:44So more concretely to your question,
it's like when you write a Playbit app,
1:18:47there is some of this information that's
just handles for you automatically.
1:18:51So things like the sort of scroll
position and stuff like that.
1:18:56All handles for you automatically,
you can override any of that.
1:18:59And if you wanted to manage your own
scope position, of course you could, then
1:19:03there's an API and we call this like game
state because you know, often we talk
1:19:07about, and we look at video games, because
I think there's a lot more to learn there
1:19:10than, uh, comparatively to utility apps.
1:19:13So game state is essentially like
the state that the program has
1:19:17that's unique to the program.
1:19:18And earlier in this episode, we talked
a little bit about like, uh, like almost
1:19:22impotence mismatch or a match between sort
of like the, the fifth of your problem
1:19:27and the database and stuff like that.
1:19:28And so you have a similar problem
here that, like, we, we could just
1:19:31give you, like, I just like put
things in a SQLite database and
1:19:35they will automatically just like.
1:19:36Be synchronized, right?
1:19:37The problem is like, that's not possible.
1:19:39That is not, not possible because
like it's hard technologically.
1:19:42That's just impossible because
like a real life human level.
1:19:45It's not possible, right?
1:19:46We cannot possibly know.
1:19:47And the same thing is true
for like a file system.
1:19:49We cannot possibly know what these like
chunks of bytes mean without trying to
1:19:53interpret them, in which case you're
not on a file system level anymore.
1:19:56But on a document level, and
so to like, solve this problem,
1:20:00we choose to not solve it.
1:20:02And this that give you the
tools to solve it yourself.
1:20:05And so imagine that we, we make
a game like a tic tac toe game
1:20:08and we can play that together.
1:20:09It has like, it has a, it's
a turn based game, right?
1:20:12So 1 and it's a 2 player game.
1:20:141 player is across the other 1.
1:20:16It's like a circle.
1:20:17And.
1:20:18Let's say you start out and you do, you
click somewhere, you can choose, right?
1:20:22And then it's my turn.
1:20:24And so now game state in this
example is whose turn is it?
1:20:28What sort of like what on, on
this kind of like three by three
1:20:31or nine by nine or whatever you
end up doing on this game board.
1:20:35Like, what is the state of that?
1:20:36Which cells are empty?
1:20:37Which are currently like filled?
1:20:39What are they filled with?
1:20:40Right.
1:20:40And then you have conditions and
this is not part of game state.
1:20:43It's like.
1:20:44Did someone win?
1:20:45Like, Oh, who is leading?
1:20:47Like, this is stuff you
derive from the game state.
1:20:50And the game state itself is
essentially a key value store.
1:20:53And on the key value store level, we
give you the, we give you transactions.
1:20:58And so if you say like, uh, change this to
the, to that and change this to that, and
1:21:04you can make up your own keys and values,
we guarantee you that Those things are
1:21:10merged with all the other clients with the
same result within that one transaction.
1:21:15So we give you this kind of like
primitive, that is a key value
1:21:18store with like CRDT transactions.
1:21:20I don't know what to call them, but this
is kind of like a notion of transaction.
1:21:24And on that level and beyond that
level, below that level, We as like,
1:21:28we had all of the diffing and merging
and syncing for you automatically.
1:21:31Then of course we finally, we
give you like a, the lowest level.
1:21:35So the highest level is like, you
don't use any of these things and
1:21:38you get some limited multiplayer
functionality and the scene graph of
1:21:42the whole, like the whole desktop,
if you will, is synchronized always.
1:21:45And so that's the highest level.
1:21:46That's the simplest thing.
1:21:47You can write like a 20 line
program that has some limited
1:21:50multiplayer functionality.
1:21:51And it's fine.
1:21:52All the defaults in Playbit, like
in our APIs, if you don't opt in for
1:21:56something, you will get something that
we think is a good default, right?
1:22:00If you don't pass, if a function
call has like a flags attribute
1:22:04or argument, if you just pass zero
for that, we will like, instead of
1:22:08giving you a window, for example,
sorry, this is a tangent in macOS.
1:22:11If you say.
1:22:12And this window, create a new window.
1:22:13It's the API for creating a new window.
1:22:16If you set flags to zero, like no special
flags, you get a window that's useless.
1:22:21You can't close it.
1:22:21You can't resize it.
1:22:22You can't like do much with it at all.
1:22:24You can't even move it.
1:22:26And so you have to like set certain
flags to get the default window.
1:22:29And, and it's kind of like folk knowledge.
1:22:31You just know which flags to set and
which flags not to set and the caveats.
1:22:36In Playbit, we're trying to like have
an ethos that is like, when you don't
1:22:39opt in for something, you will get the
thing that is that you probably want.
1:22:42And yeah, so this goes
for the data layer too.
1:22:44And yeah, we'll see.
1:22:46So you got these three kind of
like, I want to start easy mode.
1:22:49You just give me a thing.
1:22:50It will be multiplayer.
1:22:51It'll be pretty fine.
1:22:52And then you say, actually, I want
to like have my, the state of my app,
1:22:55my game to be multiplayer so that two
people can play tic tac toe together.
1:22:59Then you use this like fairly
straightforward, but still you
1:23:02got to model your data now.
1:23:04Um, like this database and then at the
very lowest level, you get something
1:23:09that is kind of like a socket, but we,
we handle like encryption and you know,
1:23:13the actual connectivity of it for you.
1:23:15So you can say, give me a connection
to the other instances of this app.
1:23:19And now your app can, you'll send
like arbitrary data if you want
1:23:22to do something really like wild.
1:23:24Right.
1:23:25But now there's no different emerging.
1:23:26It's, we just give you an ability to
say, send bytes between, um, between
1:23:31different like instances of your app now.
1:23:33Got it.
1:23:33So that's how, how data flows.
1:23:35Um, I'm curious, what is the authoring
experience for me as a developer?
1:23:40Um, do I have to use like a certain
programming language for that?
1:23:43Can I choose between different
programming languages?
1:23:46Is there, can I bring some outside
technologies, for example, something
1:23:50like react, or is there sort of
a bespoke way to do all of that?
1:23:55You have to use our own flavor of Fortran.
1:23:58That is backside.
1:23:59You know, no, it's a, so.
1:24:01Um, This is obviously an important thing.
1:24:03I think that there are
two paths that you can go.
1:24:05You can either say, here's a blessed
programming language, and this is what
1:24:08you use, or you can say like, bring your
own language, here's like a minimal API.
1:24:15And I think the two like common examples
of this is like on, uh, on iOS, you
1:24:21got, I guess a little complicated.
1:24:23Now you get Swift and Cocoa, but for
a long time, you had just Objective C.
1:24:27And if you want to write an
app, you write an Objective C
1:24:30and you use these libraries.
1:24:32And there's some flexibility if
you want to do something else,
1:24:34but it's like pretty much zero.
1:24:35And then you have something like BSD or
Linux where you say there's a syscall.
1:24:39It's essentially like a single function,
uh, that's called syscall, which is
1:24:43really just like a CPU instruction, but
it's a syscall and you give it a number
1:24:47and the first number represents like the
thing you want to do, like open a file,
1:24:50close a file, read some bytes, right?
1:24:52And then you give it some number and
it's a fixed number of things you
1:24:55can give it arguments essentially.
1:24:56And that's the entire API surface.
1:24:58This is one function to
your entire computer.
1:25:01So these are two extremes and with
Playbit, we're closer to the second,
1:25:05because that gives you the flexibility
of if you want to use Python or Node.
1:25:08js or BUN, you could do that.
1:25:11And I think that's important.
1:25:12Some people have opinions about this.
1:25:14So Playbit has a C A B I and B as
in, as in Bob, as a binary interface,
1:25:20basically any programming language
today can interface with a C A B I.
1:25:25It doesn't mean you have to
write it and see the developer
1:25:27experience currently in Playbit.
1:25:28And so, you know, Playbit does exist
and we use it day to day and we
1:25:32develop Playbit inside of Playbit.
1:25:34It's kind of weird sometimes is we
got something that's a little bit like
1:25:37Xcode, something that's a little bit like
developer tools, like on the OS level.
1:25:41And so in our version of the finder
or windows file explorer, there's
1:25:47a button called new app and you can
click this and like a new app is just
1:25:50made for you and it's called like, you
know, new app that app and inside it,
1:25:54like, you know, there's a main dot C
because we got a C compiler and system.
1:25:57So it's main dot C and
it's already ready for you.
1:26:00And when you, when you create a
new app, there's another toolbar
1:26:03button, like in the file browser,
this says build and run it, click
1:26:06build and run and your app starts up.
1:26:09And there's, you don't need to use
terminals or anything like that.
1:26:12You got standard out and standard error.
1:26:14You can get those kinds of things like in,
in a more friendly sort of developer log.
1:26:18We have an inkling to this now,
but there's also a couple of
1:26:21ways to like, look at the dom.
1:26:23So we have the scene graph
that your app has, right?
1:26:25You can inspect that.
1:26:26You can inspect actually the scene graph
of the entire desktop if you wanted to.
1:26:30So that, you know, this opens
up some very interesting things
1:26:33for accessibility, for example.
1:26:34But anyhow, so the developer experience
is very much like, it's very like
1:26:38straightforward, very lightweight,
very opinionated right now.
1:26:41So again, you click, you click a
button to just create a new app.
1:26:44And you can just rename it
by changing the folder name.
1:26:46And if you don't want to even open
a text editor, you just click the
1:26:50building ride button, which is the same
place your app is built and is run.
1:26:54And it takes like a
couple of milliseconds.
1:26:56And now you can just like, and it's
just going to say, hello world.
1:27:00It's just a window that opens hello world.
1:27:02And it has closed buttons,
you know, it's very basic.
1:27:05And what you can do now is that
you can open the source file.
1:27:07In the text editor, it's only
in graphical environments.
1:27:10And now you can, you
can change them, right?
1:27:13You can change, for example,
like where it says hello world to
1:27:15say, you know, hello, Johannes.
1:27:18And then you hit build and run again.
1:27:19And now like it restarts
and says, hello, Johannes.
1:27:22And then, you know, there's some
generated documentation for the API.
1:27:26There's functions, of course,
for, you know, we've got.
1:27:28Grid functions, all of the kind of
really gooey things you might expect,
1:27:31you know, pop up menus and scroll bars
and radio buttons and all of that stuff.
1:27:35And if you want to bring in
libraries and stuff, you can do that.
1:27:38And if you wanted to use Python
instead, then you will call these
1:27:41functions through the C ABI and
FFI functions in Python, right?
1:27:44So that's kind of like the, currently
the developer story in PlayBit.
1:27:48That makes sense.
1:27:49So you've like laid out the absolute
foundation and that allows for a lot
1:27:54of layers, optional layers to be built
on top where you want to follow like
1:27:59a certain flavor of app development.
1:28:01And I think that also allows an
ecosystem to be built around PlayBit.
1:28:07But I think the new level of primitives
and the, this new, um, More like
1:28:122024 foundation that you're laying
where you get things that are, that
1:28:17was probably shareable by default,
that's collaborative by default.
1:28:20So, uh, a lot of the local-first
aspects, what makes local-first software
1:28:25great, having that be baked into the
foundations of an operating system.
1:28:30Uh, that is not something I
would have expected in 2024 to
1:28:33already exist, maybe rather 2040.
1:28:37So you make me feel like
living in the future.
1:28:41But I got to say, I think that there,
it's almost a logical conclusion
1:28:44when I'm going to come to here.
1:28:45But I think, first off, I want
to say, I think, I think of
1:28:47Playbit as being a platform.
1:28:50I think it's very interesting to
talk about, like, what is an OS?
1:28:53Like, what is a platform?
1:28:54We've been talking about the web a
lot today for really good reasons.
1:28:57And the web to me kind of smells
like an operating system, you know,
1:29:00in a way, and it is a platform.
1:29:03And I think Playbit similarly,
although it is like, technically
1:29:05speaking, a real operating system,
you know, it's like manages memory
1:29:08and hardware and all of that stuff.
1:29:10I think, or I hope at least it
also can become the platform.
1:29:13That has a primary environment,
which is, you know, its own OS and a
1:29:18secondary environment, which is like
other systems, like the web, right?
1:29:23Other platforms.
1:29:24And the logical confusion I was
mentioning, thinking about what,
1:29:27what does a platform OS do?
1:29:30Why, why does it exist?
1:29:31Why do we have them?
1:29:32Historically and an operating system
does really is two things, right?
1:29:36One, it abstracts the hardware.
1:29:38It used to be so.
1:29:39That if you want it to write the disc,
you would have to like write the disc.
1:29:43You have to have different code
depending on the specific hardware
1:29:46you're writing, which is kind of insane.
1:29:47But that's how it was.
1:29:48And then someone was like, Hey, what,
what if we have like a layer in between?
1:29:51So like you say, right to hard
disk a or hard disk B and you use
1:29:57the same like function calls, even
if this is like a, you know, a
1:30:01hard disk from this manufacturer,
if it's like a floppy disk drive.
1:30:04Right.
1:30:05And that is like, Those are
like drivers or whatever.
1:30:08That is like one important
role that OS serves.
1:30:11the other category, it's very interesting.
1:30:13It's like the OS then needs to
provide services for like the
1:30:16tools that run on top of it.
1:30:18And this is where I think we as like,
we as kind of like set back in our
1:30:22chairs, you know, in, in like the late
nineties and said, Oh, we're done.
1:30:26You know, I mean, iOS is like built on
macOS, which is built on next, which is
1:30:30built in the eighties and we have windows,
which like still has like some parts in
1:30:34it that are from, you know, the nineties
or maybe even further back than that.
1:30:38And so a lot of these OS's that we use
today, and even like the windowing,
1:30:41like the compositing windowing system
is sort of like an ancient idea, right.
1:30:45Of like, that comes from like X11 and
stuff like that, or, you know, even
1:30:49earlier stuff, of course, X11 was not the
first, but, you know, you have a window.
1:30:54And you have a window and
these are two like bitmaps or
1:30:57textures, if in GPX or either.
1:30:59And each window is like a process
or whatever you want to call it.
1:31:02And they like use the same library code to
draw the same button into their bitmaps.
1:31:06And then on the desktop, you
put these bitmaps together and
1:31:09that's how you have windows.
1:31:10I was like, gee, the huge problem
with this is that how do you like
1:31:13introspect what's on the desktop?
1:31:14How do you do things like accessibility?
1:31:16How do you, how do you like, uh,
debug something that goes wrong?
1:31:19That crosses the boundary of two windows.
1:31:22Like you, it becomes really hard and
you end up with this like really weird
1:31:26patched on things at the, at the end.
1:31:28And so I think that the
services argument, right?
1:31:31Like then we think about, so why is it
so that today you look at someone who
1:31:36used a Mac book And what apps do you use?
1:31:38These are web apps that they use.
1:31:40They are not native apps, but they
have this like Mac OS running there.
1:31:43Why aren't there Mac OS apps?
1:31:44I think it's because Mac OS
doesn't provide the things
1:31:46that people want, right?
1:31:48Developers want.
1:31:49I want to be able to just like fetch
the thing from the network, right?
1:31:51I can do that one line of code in
JavaScript or like a fucking million
1:31:55lines, excuse my French, of codes
in, in like a Mac OS native, right?
1:32:00There's just like a, there's a mismatch
between the services that an OS provides.
1:32:04Another thing is like, like
payments or like subscriptions
1:32:07or whatever, like revenue.
1:32:08Let's say that I read a little thing.
1:32:10And it's a hobby thing.
1:32:11I can't spend too much like time
slash money on it, but I still spend
1:32:15a lot of like my time and money on it.
1:32:16Right.
1:32:17Even if it's like, you know, five
hours a week and now I'm going
1:32:20to ask people who really like it.
1:32:22It's kind of the shareware model.
1:32:23So like, give me a dollar,
like a month, if they like this
1:32:26thing or just like one time.
1:32:27And obviously I'm not like pitching
anything novel here, like the, you know,
1:32:32Apple app stores are very successful
and everything else that comes after it.
1:32:36But the problem with that is that
it is sort of like a monolith.
1:32:39It's this sort of like
it's in the planet Apple.
1:32:41First off, if you want this to
work on other platforms, like
1:32:44you can't, it's iOS or nothing.
1:32:46And if you want to market this somewhere
else where you really can't, it's in
1:32:49the app store or nowhere else, and you
have to build it specifically for them.
1:32:53And there's all of this, this
whole list of cabinets is basically
1:32:55like there's a little bubble,
you can put it in the bubble.
1:32:58If you don't want it to be in
the bubble, you're on your own.
1:33:00You got to Do a Stripe integration
or something that's going to take
1:33:03you a lot more time than you have.
1:33:05And so I think that there's a lot of
hobby developers out there who make
1:33:09something truly valuable who will
just like, just pass on it, right?
1:33:13They will just pass on the revenue
they could get because it's
1:33:15just like not worth building it.
1:33:17So that's just one example.
1:33:19Uh, multipliers we were talking about
is another example, like data syncing,
1:33:22all of these things that like the OSS
that we use today, they just don't
1:33:26provide But the web platform does.
1:33:28So we moved to the web platform instead.
1:33:29Yeah.
1:33:30I love that, that vision.
1:33:31Uh, and, and so I've mentioned before
that I am trying to build the best
1:33:36of both worlds for like embracing the
web, still making the app feel native
1:33:40and, uh, the app also following the
local-first ideals as much as possible.
1:33:45This is really, uh, building an
app on the hard mode compared
1:33:49to how you build other apps.
1:33:50So.
1:33:51Um, chasing that quality,
et cetera, but it's so hard.
1:33:55Um, and this is where in the future,
where I can just build Overtone on top
1:34:01of Playbit, this is where I can put all
of my effort on making the, like spending
1:34:06the quality on like even, even more higher
leverage things, and you've been taking
1:34:12care of like the tough foundation that the
app is collaborative by default, that it
1:34:17feels more, gives me better primitives.
1:34:19The app feels native where, depending
on where it's running, whether it's
1:34:23running in the browser or whether
it's running on, on someone's
1:34:27more, more native environment.
1:34:29So I'm really looking
forward to that future.
1:34:31I have one tangent question.
1:34:33Uh, you've been mentioning that you're
developing Playbit inside of Playbit.
1:34:39Looking at this from a similar lens,
I'm very curious whether you can already
1:34:43have a browser running inside of Playbit
and then open a Playbit environment
1:34:48within the browser running Playbit.
1:34:53Oh, we don't have a web browser yet.
1:34:57If there's anyone out there who wants
to join us, I mean, play, but it's
1:35:00like a venture backed company, like,
you know, we can pay you a salary.
1:35:03It's like a real job.
1:35:05If you want to come work with us
and, you know, put Chrome or Firefox
1:35:08in play, but yeah, hit me up.
1:35:11Or if you want to work on like
GPU stuff or the Linux kernel, we
1:35:16are looking to hire a few people.
1:35:17So yeah, there's no web browser yet.
1:35:19It will, it will be a mind band.
1:35:20Yeah.
1:35:21To like run it inside a web browser,
because then you can keep going.
1:35:23It's like you take a video camera
connected to a TV and you point
1:35:27it at the TV, you know, you got
this like, Infinity mirror effect.
1:35:31Yeah.
1:35:31That's kind of fun.
1:35:32Uh, exactly.
1:35:33That's what I had in mind, or I think you
get the same when you like use like Google
1:35:37meet or something or whatever it's called
these days, but yeah, I would like take
1:35:41up that, that job offer opportunity in
a, in an instant, if I had the background
1:35:47that fits it and If I wasn't already knee
deep in all sorts of other things, but
1:35:52I'm sure there, there will be someone
out there who is the perfect fit and
1:35:56I'm sure that's an amazing opportunity.
1:35:59So before wrapping up, you're
all, you're not just building such
1:36:03an ambitious startup, but you're
also about to become a father.
1:36:07So I'm very curious, uh, from
a personal perspective, like
1:36:11how are you navigating that?
1:36:13How do you balance going after such
an, such an ambitious project, uh,