WEBVTT

00:00.000 --> 00:07.000
People can keep coming in.

00:07.000 --> 00:12.000
All right, hi everyone, my name's Dan Phillips.

00:12.000 --> 00:19.000
I am here to give a talk that's probably quite a bit different from most of the talks in this room today.

00:19.000 --> 00:21.000
And we'll just kind of get into it.

00:21.000 --> 00:23.000
And we can see what we think.

00:23.000 --> 00:25.000
So as people come in, I'll just kind of get started.

00:25.000 --> 00:28.000
But in true fashion, I'm just going to start with a quick demo.

00:28.000 --> 00:34.000
So I work on a project called Boxer.

00:34.000 --> 00:39.000
Boxer is similar in terms of the devics to Docker.

00:39.000 --> 00:42.000
So I'll just give you a quick demo, and then we can talk about it.

00:42.000 --> 00:44.000
All right, so excuse me.

00:44.000 --> 00:46.000
Oh, it's too small.

00:46.000 --> 00:48.000
How's that?

00:48.000 --> 00:49.000
Better?

00:49.000 --> 00:50.000
Okay, great.

00:50.000 --> 00:54.000
All right, so Boxer has the Box Steel I command,

00:54.000 --> 00:56.000
and I'm going to ask you our course.

00:56.000 --> 01:02.000
Boxer allows you to take a Docker file,

01:02.000 --> 01:05.000
just like you would in Docker, and compile it,

01:05.000 --> 01:07.000
and then have a runnable thing.

01:07.000 --> 01:12.000
Okay, so what I'm going to do here is Box Builds.

01:12.000 --> 01:15.000
Docker file.

01:15.000 --> 01:18.000
Okay, one thing I should show you about this.

01:18.000 --> 01:22.000
This is just a small little C binary that we have here.

01:22.000 --> 01:26.000
Actually, what that looks like.

01:26.000 --> 01:28.000
Okay, very, very simple.

01:28.000 --> 01:30.000
Pretty not a bunch of numbers, right?

01:30.000 --> 01:32.000
Excellent for demos.

01:32.000 --> 01:34.000
The most important thing is this line,

01:34.000 --> 01:37.000
which I'll come back to in just a bit.

01:37.000 --> 01:39.000
So I built the image.

01:39.000 --> 01:42.000
Now, I can see what we have.

01:42.000 --> 01:44.000
You'll see that.

01:44.000 --> 01:48.000
This looks a little big for that, but I'll get back into that later.

01:48.000 --> 01:50.000
Cool, so now I can run.

01:50.000 --> 01:51.000
Excellent.

01:51.000 --> 01:52.000
Let's do it.

01:52.000 --> 01:55.000
Now, here's the kicker.

01:55.000 --> 01:58.000
Same exact thing.

01:58.000 --> 02:00.000
Same exact thing runs here.

02:00.000 --> 02:02.000
And if you read the description of the stock,

02:02.000 --> 02:04.000
you'll understand that the reason this is possible

02:04.000 --> 02:08.000
is because everything that was running was in WebAssembly.

02:08.000 --> 02:09.000
Right?

02:09.000 --> 02:14.000
So, back to the talk.

02:14.000 --> 02:17.000
So, just quickly about me, I work at a company called Lupole Labs.

02:17.000 --> 02:19.000
We have a product that is unrelated to this.

02:19.000 --> 02:22.000
I lead all the WebAssembly stuff there, which is one little small part of what we do.

02:22.000 --> 02:25.000
With our products, we have our main thing is architect.

02:25.000 --> 02:28.000
Run, which allows you to migrate live migrate workloads

02:28.000 --> 02:29.000
without downtime.

02:29.000 --> 02:30.000
It's pretty cool to check it out.

02:30.000 --> 02:32.000
This is me on my handles.

02:32.000 --> 02:33.000
I live in Chicago.

02:33.000 --> 02:36.000
And I run the WebAssembly Chicago research group.

02:36.000 --> 02:39.000
And if you're ever in town come through.

02:39.000 --> 02:41.000
We have meetups every couple months.

02:41.000 --> 02:42.000
Cool.

02:42.000 --> 02:45.000
So, most of us have heard of WebAssembly.

02:45.000 --> 02:46.000
Yeah?

02:46.000 --> 02:47.000
I think, yes.

02:47.000 --> 02:48.000
Okay, good.

02:49.000 --> 02:51.000
So, we're just going to talk briefly about what wasm is.

02:51.000 --> 02:55.000
And then we'll get into how this applies to what I just showed you.

02:55.000 --> 03:00.000
So, WebAssembly is a safe portable, low-level execution code format.

03:00.000 --> 03:01.000
Right?

03:01.000 --> 03:03.000
It's safe sandbox execution environment,

03:03.000 --> 03:06.000
where they deny by default security posture.

03:06.000 --> 03:09.000
It makes no assumption about language or host.

03:09.000 --> 03:10.000
Right?

03:10.000 --> 03:13.000
The best analogy the best way to think about it without getting into the details

03:13.000 --> 03:16.000
is that it is a virtual CPU.

03:17.000 --> 03:19.000
It's a different compilation target.

03:19.000 --> 03:22.000
So, just like you can compile things to native platforms,

03:22.000 --> 03:25.000
you can compile things to wasm.

03:25.000 --> 03:28.000
It's a virtualized ISA.

03:28.000 --> 03:31.000
It uses a bytecode binary format.

03:31.000 --> 03:35.000
It uses a stack machine on abstract stack machine model,

03:35.000 --> 03:39.000
with secure stacks for every single execution environment.

03:39.000 --> 03:42.000
So, what does that really mean?

03:42.000 --> 03:43.000
Right?

03:43.000 --> 03:45.000
In a broad sense, it's just another architecture.

03:45.000 --> 03:47.000
This is the way to think about it.

03:47.000 --> 03:50.000
Key difference is that it is virtualized.

03:50.000 --> 03:53.000
It needs a runtime to translate to machine code.

03:53.000 --> 03:55.000
That doesn't mean that it needs to be interpreted,

03:55.000 --> 03:57.000
however, that means that there needs to be a runtime,

03:57.000 --> 03:59.000
and you can compile it ahead of time.

03:59.000 --> 04:01.000
You can even jit in certain cases.

04:01.000 --> 04:03.000
It's universal.

04:03.000 --> 04:04.000
As in, it's an open standard.

04:04.000 --> 04:06.000
It's in probably all of your pockets,

04:06.000 --> 04:09.000
on at least one web browser and on your computers.

04:09.000 --> 04:12.000
Via the browser, which is where it started.

04:12.000 --> 04:15.000
It literally just needs a runtime that fulfills

04:15.000 --> 04:18.000
the two-page spec, which hasn't changed since 2017.

04:18.000 --> 04:21.000
So, easy to client-side technology.

04:21.000 --> 04:23.000
Usually when I talk to people about this,

04:23.000 --> 04:26.000
and they say, oh, you're working with them.

04:26.000 --> 04:27.000
I don't do a lot of front-end stuff,

04:27.000 --> 04:28.000
and I say, that's interesting,

04:28.000 --> 04:31.000
because actually, I only do server-side web assembly stuff.

04:31.000 --> 04:34.000
And we'll talk about how this applies to what I showed you

04:34.000 --> 04:36.000
in the next few slides.

04:36.000 --> 04:39.000
So, it's a safe sandbox execution environment.

04:39.000 --> 04:41.000
It makes no assumption about languages

04:41.000 --> 04:43.000
or host.

04:43.000 --> 04:46.000
Cold start times are in the nano-to-microseconds,

04:46.000 --> 04:48.000
depending on the size.

04:48.000 --> 04:51.000
It's a universal compilation target, like I mentioned.

04:51.000 --> 04:53.000
And so, wasm the joke in the wasm communities

04:53.000 --> 04:57.000
that wasm is neither web nor is it assembly, really.

04:57.000 --> 05:02.000
So, server-side, well, server-side wasm.

05:02.000 --> 05:04.000
I like to think of this,

05:04.000 --> 05:07.000
when people saw these characteristics of this technology

05:07.000 --> 05:09.000
when it first came out in 2017,

05:09.000 --> 05:11.000
a lot of people that were working on it had done

05:11.000 --> 05:13.000
a lot of work and cut their teeth on things

05:13.000 --> 05:15.000
like the JVM in the 2000s.

05:15.000 --> 05:18.000
And when people looked at these things,

05:18.000 --> 05:19.000
and they kind of squinted,

05:19.000 --> 05:21.000
they realized that, okay,

05:21.000 --> 05:25.000
it's a small sandbox at the architecture level.

05:25.000 --> 05:27.000
If you squint,

05:27.000 --> 05:30.000
you could think about other use cases for this, right?

05:30.000 --> 05:33.000
And I like to call this the penicillin moment, right?

05:33.000 --> 05:36.000
It was invented so that it could run safely in browsers,

05:36.000 --> 05:38.000
and now people have taken it and applied it

05:38.000 --> 05:40.000
to many different other things.

05:40.000 --> 05:42.000
Some people talk about this progression.

05:42.000 --> 05:44.000
It may or may not be accurate.

05:44.000 --> 05:46.000
We'll see.

05:46.000 --> 05:49.000
And so, when I said smaller safer faster

05:49.000 --> 05:51.000
and much more universal,

05:51.000 --> 05:53.000
usually someone says, no, no, no, no, no, no.

05:53.000 --> 05:55.000
Faster, it can't be faster, right?

05:55.000 --> 05:57.000
Because it has a run time.

05:57.000 --> 05:58.000
This is true.

05:58.000 --> 05:59.000
This is true.

05:59.000 --> 06:01.000
And that's why faster has an asterisk.

06:01.000 --> 06:03.000
Faster startup times by usually several orders

06:03.000 --> 06:05.000
of magnitude for the same code.

06:05.000 --> 06:08.000
And then as far as the absolute performance

06:08.000 --> 06:11.000
difference between compiled code

06:11.000 --> 06:13.000
on a native platform and wasm,

06:13.000 --> 06:15.000
when it's AOT and optimized,

06:15.000 --> 06:21.000
you can typically get it within about 1.2 to 2 times the speed.

06:21.000 --> 06:23.000
So for certain things,

06:23.000 --> 06:25.000
it could be much, much faster.

06:25.000 --> 06:27.000
Everyone knows this quote.

06:27.000 --> 06:29.000
This is kind of, well, maybe not everyone,

06:29.000 --> 06:31.000
but everyone in my world knows this quote.

06:31.000 --> 06:34.000
And this caused a lot of VCs to become very excited.

06:35.000 --> 06:37.000
Back in 2019.

06:37.000 --> 06:41.000
And, you know, there's an interesting thing about this

06:41.000 --> 06:43.000
because whether or not this has come to fruition

06:43.000 --> 06:46.000
in the last five years is debatable.

06:46.000 --> 06:50.000
So, today, I'm going to talk about Boxer.

06:50.000 --> 06:52.000
Boxer is what I just showed you.

06:52.000 --> 06:54.000
Boxer is a tool that allows you to take

06:54.000 --> 06:57.000
container definitions right now and compile them

06:57.000 --> 06:58.000
to lasm.

06:58.000 --> 07:00.000
But the problem with lasm is that it's just an architecture.

07:00.000 --> 07:01.000
It doesn't have anything.

07:01.000 --> 07:02.000
It doesn't have a kernel.

07:02.000 --> 07:04.000
It doesn't have a LIDC.

07:04.000 --> 07:06.000
It doesn't have any sort of system.

07:06.000 --> 07:08.000
It doesn't know anything about what's going on

07:08.000 --> 07:10.000
outside of the guest.

07:10.000 --> 07:12.000
In WebAssembly, we have these concepts.

07:12.000 --> 07:14.000
The host is the run time.

07:14.000 --> 07:16.000
The guest is where the wasm actually runs.

07:16.000 --> 07:19.000
So, what Boxer does is,

07:19.000 --> 07:22.000
it kind of makes this dev X a little bit easier.

07:22.000 --> 07:24.000
Has anyone actually used WebAssembly

07:24.000 --> 07:25.000
for anything in here?

07:25.000 --> 07:26.000
Okay, cool.

07:26.000 --> 07:28.000
So, you all know how hard it is.

07:28.000 --> 07:30.000
Or maybe what the pain points are.

07:30.000 --> 07:33.000
It's not quite as easy as downloading the

07:33.000 --> 07:35.000
Docker CLI and getting started.

07:35.000 --> 07:38.000
So, I'm going to talk about Boxer a little bit

07:38.000 --> 07:39.000
and how it works.

07:39.000 --> 07:41.000
So, what is in a Box?

07:41.000 --> 07:44.000
Much like a container or the idea of a container

07:44.000 --> 07:46.000
you have a base layer.

07:46.000 --> 07:49.000
The base layer has interfaces.

07:49.000 --> 07:51.000
Those interfaces are very similar to

07:51.000 --> 07:52.000
Pozac's interfaces.

07:52.000 --> 07:55.000
Then, we add several other layers including

07:55.000 --> 07:58.000
a virtualized file system and system code layers.

07:58.000 --> 08:01.000
This is a broad term which I will get into.

08:01.000 --> 08:03.000
It comes with the run time.

08:03.000 --> 08:07.000
And then we have the huge source code.

08:07.000 --> 08:10.000
The way that WebAssembly modules can communicate

08:10.000 --> 08:12.000
with each other and with the outside world

08:12.000 --> 08:15.000
are with the concept of simple imports and exports.

08:15.000 --> 08:18.000
The only thing that a WebAssembly module

08:18.000 --> 08:21.000
knows about is what is exported to it

08:21.000 --> 08:23.000
and what it also imports.

08:23.000 --> 08:26.000
This changes things on many spectrums

08:26.000 --> 08:28.000
and what it comes to trying to rewrite

08:28.000 --> 08:30.000
how system layers can work.

08:30.000 --> 08:32.000
Compared with things like processes

08:32.000 --> 08:35.000
and interprocess communication

08:35.000 --> 08:38.000
and communicating over sockets.

08:38.000 --> 08:40.000
It's that right.

08:40.000 --> 08:41.000
Thanks.

08:41.000 --> 08:44.000
So, how could this be possible?

08:44.000 --> 08:49.000
Here, we start here with the from alpine latest.

08:49.000 --> 08:50.000
And you'll say wait a second.

08:50.000 --> 08:52.000
That isn't actually alpine latest.

08:52.000 --> 08:54.000
That is in your right.

08:54.000 --> 08:57.000
Literally just the interfaces that the alpine image

08:57.000 --> 08:58.000
will give you.

08:58.000 --> 09:01.000
If you want anything else, then you can compile that

09:01.000 --> 09:05.000
and expose it as another WebAssembly module.

09:05.000 --> 09:08.000
Similar thing to what maybe Docker will do.

09:08.000 --> 09:10.000
You can create something inside the environments.

09:10.000 --> 09:11.000
You can copy to it.

09:11.000 --> 09:13.000
You can set the working directory.

09:13.000 --> 09:16.000
And then you can execute it.

09:16.000 --> 09:19.000
A big part of this is the WebAssemblyFS.

09:19.000 --> 09:23.000
The WebAssemblyFS is a possex compliant virtualized file system

09:23.000 --> 09:25.000
that mounts with every single box.

09:25.000 --> 09:27.000
Every single WebAssembly box.

09:27.000 --> 09:28.000
It's written in Rust.

09:28.000 --> 09:30.000
So obviously it's incredible.

09:30.000 --> 09:34.000
And it implements all file system related

09:34.000 --> 09:36.000
Cisco's and then it exposes them.

09:36.000 --> 09:38.000
So, specifically in this project,

09:38.000 --> 09:42.000
what we do is we wrap this raw-space file system

09:42.000 --> 09:45.000
in C and then in C we have what's basically

09:45.000 --> 09:48.000
a lib C which is an amalgamation of

09:48.000 --> 09:51.000
G lib C and muscle in a very

09:51.000 --> 09:53.000
more closely done fashion.

09:53.000 --> 09:56.000
Artfully, also, maybe meaning hacky.

09:56.000 --> 09:59.000
And we expose all the same possex semantics with an

09:59.000 --> 10:01.000
esterist also.

10:01.000 --> 10:04.000
Some key differences with the WebAssemblyFS is that things

10:04.000 --> 10:08.000
like flushing, locking, thinking work like they might

10:08.000 --> 10:12.000
work in the Linux VFS, but not quite as sophisticated yet.

10:12.000 --> 10:14.000
So, there's an interesting thing there.

10:14.000 --> 10:17.000
The other thing about this project is when people

10:17.000 --> 10:20.000
say when we talk about trying to deploy things with

10:20.000 --> 10:23.000
this sort of set of tools, people say, well, it's a virtualized

10:23.000 --> 10:24.000
file system.

10:24.000 --> 10:26.000
So, I'm not sure if I can use that for my project.

10:26.000 --> 10:29.000
And then usually what I say is that you are already

10:29.000 --> 10:30.000
using a virtualized file system.

10:30.000 --> 10:32.000
You just don't know it because it's in the kernel.

10:32.000 --> 10:35.000
And so, the idea is that we just have these

10:35.000 --> 10:36.000
perceptions of this.

10:36.000 --> 10:38.000
A lot of people wonder if this is another fused file system.

10:38.000 --> 10:39.000
It's also not.

10:39.000 --> 10:42.000
It's just made for Wazom specifically with

10:42.000 --> 10:45.000
the communication between modules, which is one of

10:45.000 --> 10:47.000
the key points.

10:47.000 --> 10:51.000
Yeah, I guess I'll do that quickly.

10:51.000 --> 10:54.000
So, right.

10:54.000 --> 10:57.000
So, the Wazom VFS repo, you can see all of the

10:57.000 --> 11:02.000
supported, all of the supported functions.

11:02.000 --> 11:04.000
Great.

11:04.000 --> 11:06.000
Okay.

11:06.000 --> 11:08.000
I love them.

11:08.000 --> 11:10.000
Okay, I've got some big ones.

11:10.000 --> 11:11.000
Okay.

11:11.000 --> 11:12.000
This is a working progress.

11:12.000 --> 11:13.000
And this is my side project.

11:13.000 --> 11:15.000
So, I've been working on this for about three years.

11:15.000 --> 11:16.000
And it's just me.

11:16.000 --> 11:18.000
But with that, we still have a

11:18.000 --> 11:21.000
POSIX sort of surface area that we have worked on.

11:21.000 --> 11:22.000
It's not just me.

11:22.000 --> 11:23.000
It's me and a couple other people.

11:23.000 --> 11:25.000
If you want to get involved, please let me know.

11:25.000 --> 11:26.000
It's all open source.

11:26.000 --> 11:30.000
We have about 70% of POSIX implemented,

11:30.000 --> 11:32.000
which, wow, that seems like a lot.

11:32.000 --> 11:37.000
But the thing with POSIX is that the idea about

11:37.000 --> 11:39.000
POSIX is not necessarily the implementation,

11:39.000 --> 11:41.000
rather than the interface, right?

11:41.000 --> 11:43.000
So, POSIX maybe is just interfaces.

11:43.000 --> 11:47.000
So, we've exposed interfaces with much of the sort of

11:47.000 --> 11:48.000
system functionality.

11:48.000 --> 11:53.000
But how it works, it may look like something that you would see in

11:53.000 --> 11:56.000
Unix or POSIX, but maybe it works slightly differently.

11:56.000 --> 11:57.000
Networking.

11:57.000 --> 11:59.000
This is a whole other talk, right?

11:59.000 --> 12:01.000
So, networking does work.

12:01.000 --> 12:03.000
You can expose networking to the host, right?

12:03.000 --> 12:06.000
If you're running on a server, you can also have this thing

12:06.000 --> 12:09.000
that we're working on now, which is in the browser.

12:09.000 --> 12:11.000
Like I showed you with this.

12:11.000 --> 12:16.000
We have a networking relay, which you can do all

12:16.000 --> 12:19.000
BSD sockets from the browser, just like you would,

12:19.000 --> 12:20.000
and you don't have to think about it.

12:20.000 --> 12:23.000
Using a sort of edge network that we've come up with,

12:23.000 --> 12:26.000
it's kind of experimental, but it can work, which is interesting.

12:26.000 --> 12:29.000
So, the interesting thing about that is you could do the same work

12:29.000 --> 12:30.000
in the browser.

12:30.000 --> 12:32.000
It could even be your coding environments.

12:32.000 --> 12:34.000
You could take that, and then you can move it to a server.

12:34.000 --> 12:36.000
You could also move it to an embedded device,

12:36.000 --> 12:39.000
as long as there was one times everywhere.

12:39.000 --> 12:46.000
So, lower layers.

12:46.000 --> 12:48.000
How does this actually work?

12:48.000 --> 12:51.000
It actually works with a project called Markot.

12:51.000 --> 12:55.000
Markot, we're in Belgium, so my French is not very good,

12:55.000 --> 12:57.000
but in old French, this means like substrate, right?

12:57.000 --> 12:58.000
Like a lower layer.

12:58.000 --> 12:59.000
Right?

12:59.000 --> 13:03.000
So, Markot basically is what I told you about the Frankenstein

13:03.000 --> 13:07.000
lib C operation that I do, where we have G lib C and Muscle.

13:07.000 --> 13:09.000
And we sort of expose all of those things.

13:09.000 --> 13:15.000
And we have a matrix of every single positive function

13:15.000 --> 13:18.000
and how well supported it is, right?

13:18.000 --> 13:23.000
And some of the more challenging ones are at the end,

13:23.000 --> 13:27.000
where it's coming to things like process and thread management,

13:27.000 --> 13:30.000
signals, time and date, and it's not too hard.

13:30.000 --> 13:32.000
Memory management also not very hard.

13:32.000 --> 13:35.000
But we've about 30% left that we're trying to implement.

13:35.000 --> 13:40.000
We're open to ideas, but the idea is that this sort of thesis for this

13:40.000 --> 13:45.000
was that with many containers, the average container user

13:45.000 --> 13:48.000
may not care about what the architecture is.

13:48.000 --> 13:50.000
Maybe 5% do, right?

13:50.000 --> 13:53.000
There's also parts of the puzzle, because the puzzle is a little bit

13:53.000 --> 13:56.000
of a leafy abstraction in places, like if you've ever had the

13:56.000 --> 13:59.000
bad fortune to use a set jump and long jump,

13:59.000 --> 14:03.000
you will understand that it is tied to specific architecture.

14:04.000 --> 14:07.000
There are no registers in WebAssembly, right?

14:07.000 --> 14:09.000
So there's quite a few challenges there.

14:09.000 --> 14:14.000
But for 95% of things, it's very possible that you could run a container

14:14.000 --> 14:20.000
in a smaller, safer, faster, and more universal environments.

14:20.000 --> 14:23.000
This is a picture that I had to chat to IPT make for me,

14:23.000 --> 14:28.000
and I think it kind of fits kind of a fun thing.

14:28.000 --> 14:30.000
And some metrics.

14:30.000 --> 14:33.000
So there are in the AI revolution that we're in.

14:33.000 --> 14:36.000
There's a lot of Python users, a lot of people want to run

14:36.000 --> 14:37.000
Python in the browser.

14:37.000 --> 14:40.000
There's already works with WebAssembly things like

14:40.000 --> 14:43.000
Piedide and with Jupiter light, Jupiter notebooks.

14:43.000 --> 14:46.000
So this is just a small matrix of the differences, right?

14:46.000 --> 14:49.000
The same app with, and this doesn't also include the

14:49.000 --> 14:51.000
kernel and the runtime for the container.

14:51.000 --> 14:53.000
This is just the container, right?

14:53.000 --> 14:56.000
So 80 to 900 megabytes, start of speed,

14:56.000 --> 14:58.000
could be in the seconds.

14:58.000 --> 15:01.000
The difference is that the same box with all of the functionality

15:01.000 --> 15:03.000
in it, six megabytes.

15:03.000 --> 15:05.000
And if you extract just the source code,

15:05.000 --> 15:09.000
500 kilobytes, you can move that around to different environments

15:09.000 --> 15:13.000
where those system functions are snapshot it.

15:13.000 --> 15:15.000
I'm going to move a little quicker.

15:15.000 --> 15:17.000
So paradigm shift.

15:17.000 --> 15:19.000
Maybe this is possible, maybe it's crazy,

15:19.000 --> 15:22.000
but this would allow for some really interesting things in the future.

15:22.000 --> 15:24.000
Like a composable universal,

15:24.000 --> 15:28.000
based operating environment in a more distributed fashion.

15:28.000 --> 15:29.000
True isomorphism.

15:29.000 --> 15:32.000
If you remember the Node.js craze from a few years ago,

15:32.000 --> 15:34.000
this is actually isomorphic, right?

15:34.000 --> 15:36.000
You're actually running the same exact code everywhere,

15:36.000 --> 15:38.000
but in a polyglot fashion.

15:38.000 --> 15:41.000
And then finally, if we have any fans with plan 9 in here,

15:41.000 --> 15:45.000
the idea of a secure CPU is a secure stack for every single execution.

15:45.000 --> 15:48.000
This is something that comes a little closer to that.

15:48.000 --> 15:51.000
If you have more questions, I would love to talk with you after.

15:51.000 --> 15:52.000
So thank you.

15:52.000 --> 15:53.000
So thank you.

15:53.000 --> 16:02.000
So thank you.

16:02.000 --> 16:04.000
So thank you.

16:04.000 --> 16:06.000
We actually have time for one question, I guess.

16:06.000 --> 16:08.000
Is there one question?

16:08.000 --> 16:09.000
Yeah, there's one.

16:09.000 --> 16:10.000
Sure.

16:10.000 --> 16:12.000
Just a general question.

16:12.000 --> 16:14.000
I didn't hear you mention anything about the component model.

16:14.000 --> 16:16.000
I just wondered how this ties in.

16:16.000 --> 16:17.000
$1,000.

16:17.000 --> 16:18.000
It's an excellent question.

16:18.000 --> 16:19.000
The component model.

16:19.000 --> 16:20.000
Yeah.

16:20.000 --> 16:21.000
I don't know if anyone else has heard of the component model.

16:21.000 --> 16:22.000
Yeah.

16:22.000 --> 16:23.000
Okay, cool, cool.

16:23.000 --> 16:25.000
So the component model is, that's with Wazzy.

16:25.000 --> 16:27.000
I didn't talk about Wazzy at all.

16:27.000 --> 16:30.000
The component model is a really cool idea.

16:30.000 --> 16:34.000
And it's basically strongly typed function wrappers around Wazzy modules.

16:34.000 --> 16:37.000
And it's composable at different levels.

16:37.000 --> 16:41.000
But they are many people in that group.

16:41.000 --> 16:44.000
And I'm actually part of the standard group with Wazzy.

16:44.000 --> 16:47.000
That group is not as interested in providing

16:47.000 --> 16:48.000
physics compatibility.

16:48.000 --> 16:53.000
In fact, they kind of see that as a separate thing.

16:53.000 --> 16:54.000
Yeah.

16:54.000 --> 16:58.000
But the thing is, with these interfaces, at the lower levels, those could be components.

16:58.000 --> 17:00.000
And you could have components all the way down.

17:00.000 --> 17:03.000
And so certain interfaces could be componentized.

17:03.000 --> 17:05.000
And that's just a different implementation detail.

17:05.000 --> 17:06.000
So, yeah.

17:06.000 --> 17:07.000
So, thank you.

17:07.000 --> 17:08.000
Thank you.

17:08.000 --> 17:11.000
Thank you.

17:17.000 --> 17:19.000
Thank you.

