WEBVTT

00:00.000 --> 00:12.760
Now we welcome Eric, who we talk about seed hypermedia, the future of digital sovereignty.

00:12.760 --> 00:14.760
Let's welcome him.

00:14.760 --> 00:15.760
Hello.

00:15.760 --> 00:23.760
Okay, so my name is Eric, I'm on the founding team of seed hypermedia and today I want

00:23.760 --> 00:27.880
to talk to you about the future of the web.

00:27.880 --> 00:33.840
Because on our team we love the web so much, but as you know today, and I hope you do

00:33.840 --> 00:34.840
too, right?

00:34.840 --> 00:36.200
Does anyone here use the web?

00:36.200 --> 00:37.200
I think so.

00:37.200 --> 00:39.320
Okay, that's a few of you.

00:39.320 --> 00:44.200
The web today sadly looks like this for many people and for some of us as well, I mean

00:44.200 --> 00:49.640
on a practical basis, I'm using all of these, and I think this is really depressing that

00:49.640 --> 00:57.840
we have these companies in between us, moderating what content we're posting, and

00:58.320 --> 01:00.920
controlling our minds with the news feed.

01:00.920 --> 01:06.440
Basically, I believe we're living through the dark ages of the web, and it's not just

01:06.440 --> 01:12.920
the centralization, there's a lot of fundamental features that we are lacking in the web.

01:12.920 --> 01:15.160
So let's quickly talk about them.

01:15.160 --> 01:19.200
Have you ever clicked a link and nothing was there?

01:19.200 --> 01:24.760
Dead links, broken links, I think this is an incredibly detrimental to human knowledge.

01:24.760 --> 01:28.760
This is such a disaster.

01:28.760 --> 01:34.240
Also the web has no built-in archival system, I'm sure you're aware we rely on one organization

01:34.240 --> 01:40.640
as great as they might be to basically back up the web, and that's also the only way that

01:40.640 --> 01:44.160
we have on the web to know what was there yesterday.

01:44.160 --> 01:48.920
There's no built-in version history on the web, and so we use the way back machine, and

01:48.920 --> 01:53.440
I love the engine at archive, but we shouldn't be putting the world on their shoulders

01:53.440 --> 01:57.920
to back up the web and provide version history for us.

01:57.920 --> 02:05.120
The web doesn't have any unified identity system, so unless you want to log in with Facebook,

02:05.120 --> 02:12.000
you can't take one identity from one website and go use it to do something on another website.

02:12.000 --> 02:17.280
Also the web has a lot of friction if you want to publish something on the web.

02:17.280 --> 02:23.000
This is why I think people are using social media so much, because from your phones, you

02:23.000 --> 02:29.240
can't really spin up a server and FTP into a server and write HTML, so we have to rely

02:29.240 --> 02:35.320
on all these services that add so much friction to putting something online.

02:35.320 --> 02:40.320
Also when the web was founded, the hypertext community noticed that it didn't have any

02:40.320 --> 02:46.200
backlinks, so you couldn't see who is linking to you, and they told Tim Berners

02:46.200 --> 02:52.120
Lee, this web thing is never going to succeed, and because it doesn't have backlinks,

02:52.120 --> 02:57.960
and also links, you have broken, they were criticizing him for that on day one, and they said

02:57.960 --> 03:02.040
it's never going to succeed, and they were right about those things, but they were wrong

03:02.040 --> 03:05.720
when they said it would never succeed.

03:05.720 --> 03:13.160
Also the web, which doesn't have a trust system, and I think this is super, super problematic,

03:13.240 --> 03:19.240
because when you are interacting with somebody on the web, it's kind of like the wild west.

03:19.240 --> 03:25.160
You don't know who you're interacting with, and this has led to just an extreme proliferation

03:25.160 --> 03:28.720
of slop and spam.

03:28.720 --> 03:34.600
So for those reasons, I think we are enduring the dark age of the web, and I think humanity

03:34.600 --> 03:39.960
deserves a web where we connect directly with each other, and I think that people in this

03:40.040 --> 03:46.840
room and those watching have the opportunity to come together and become the inflection point,

03:46.840 --> 03:52.520
so that we can move away from the dark ages and towards the renaissance of the web.

03:52.520 --> 03:54.520
But how might we do that?

03:54.520 --> 04:00.720
I think there's a few ingredients, and for one, let's start with a foundational technology.

04:00.720 --> 04:02.800
This is why we're developing our protocol.

04:02.800 --> 04:08.600
We call it the hypermedia protocol, it's quite an ambitious name, I know, but we're going

04:08.600 --> 04:14.840
to stick to it, and so the hypermedia technology, hypermedia protocol is built on some really robust

04:14.840 --> 04:22.840
foundations of lip p to p and IPFS, so lip p to p is our peer-to-peer networking stack, and IPFS

04:22.840 --> 04:29.400
is what powers the content to add dressing of our system, content to add dressing, I'm sure

04:29.400 --> 04:34.680
most of the people in this room know, is a really cool concept, because it allows you to take

04:34.760 --> 04:38.840
a big chunk of data and identify it by its hash.

04:38.840 --> 04:44.600
So that means this data cannot change, which is both a feature and a future problem that we will address,

04:45.400 --> 04:50.600
but most importantly, this means that you can trust data from anyone, because if you ask for some

04:50.600 --> 04:57.240
data by its CID, they give it to you, you can validate it, so now you can get your data from anyone,

04:57.240 --> 05:03.240
and what that creates is an open network of archivists, so suddenly we no longer depend on

05:03.240 --> 05:08.680
one organization to archive content, as long as we keep track of some CIDs along with some future

05:08.680 --> 05:14.760
techniques. So we're going to develop a decentralized sink engine so that way we can handle mutations

05:14.760 --> 05:20.520
in our system. It's, you know, we've been talking about sink engines all day, but oftentimes

05:20.520 --> 05:25.320
your local first application is going to be talking to one server. Now we're going to start talking

05:25.320 --> 05:31.400
to everybody, and we'll see how we can manage that. At a very simple level, let's take a look

05:31.560 --> 05:38.120
at one node and note that we have some immutable chunks of data in here, which are our document

05:38.120 --> 05:43.480
operations. So it's describing how a document is changing over time. I'm going to move fast because

05:43.480 --> 05:48.360
I think everyone here knows where this is going. Basically, you can iterate over each of these to

05:48.360 --> 05:53.240
understand the current state of the document. This is Alice, she's making her own version with

05:53.240 --> 05:59.800
her own changes, and she arrives at her own version by iterating over each of these. Meanwhile,

05:59.880 --> 06:04.280
Bob is on the other side of the world. Bob is on a boat we like to say on our team, and so they're

06:04.280 --> 06:10.920
not connected, and they're making concurrent changes on the same document. So how do we solve this?

06:10.920 --> 06:16.280
Well, when they come online, they exchange the data, deterministically sort each of these

06:16.280 --> 06:22.360
operation blobs, these change blobs, and then go ahead and evaluate them, and they've arrived at

06:22.360 --> 06:30.600
the same state. So this is our oversimplification of our CRDT, and how many CRDTs tend to work,

06:31.720 --> 06:35.320
and I don't have too much time to go into it, but I'm happy to tell you more about the details

06:35.320 --> 06:40.760
of our CRDT later. So the other thing is that these two might not be talking directly to each other.

06:40.760 --> 06:44.040
Those blobs that are exchanged might have gone through a bunch of intermediaries.

06:45.240 --> 06:50.120
So how do you know, how does Alice know that those were Bob's changes? Well, of course,

06:50.200 --> 06:55.720
everything is going to be signed. So that means your private key is your identity,

06:56.920 --> 07:03.320
and what we've started off with is we started off with allowing you to create a private key

07:03.320 --> 07:06.840
and get it as a 12-word nemonic that you are then responsible for saving

07:07.880 --> 07:13.960
into your password manager, or writing down or whatever. It's your responsibility to keep it safe.

07:13.960 --> 07:18.120
But what we found in practice, trying to do this with real users like normal people,

07:18.760 --> 07:24.360
is that no one can save 12-words. They will forget to. They'll click the checkbox that says,

07:24.360 --> 07:28.840
yes, I've saved my 12-words, and then the next day they're going to say, I don't have them,

07:29.560 --> 07:34.520
and we get very frustrated. So we're adopting an approach, we haven't finished this yet, but we're

07:34.520 --> 07:42.200
working on it right now, where we store the encrypted keys on a remote server by taking a few keys,

07:42.200 --> 07:48.200
one of many keys into a vault, encrypting and saving them on identity server. And this is how

07:48.200 --> 07:54.600
password managers keep your identity safe. This is again an oversimplification, but I'm happy to

07:54.600 --> 08:00.520
tell you details later, and really I'm not the right person to be giving that talk. But this is just

08:00.520 --> 08:05.320
the tip of the iceberg for the foundational technologies that I think are necessary to build a better

08:05.320 --> 08:12.760
web. What else do we need? Well, I think we need really accessible interfaces. We need to make it

08:12.760 --> 08:18.200
super easy for normal people to get on to this thing, because otherwise we're just going to be

08:18.200 --> 08:21.960
living in our own world where all of the gigs are talking to each other using some cool new

08:21.960 --> 08:29.320
technology. So of course, we're starting with a local first desktop application. It looks like this.

08:30.280 --> 08:36.280
It acts as a browser. It acts as a publishing tool with a wizzy wig editor. It acts as an archival

08:36.280 --> 08:44.040
tool, and because it's a peer-to-peer node, it also acts like a server. But a lot of people don't

08:44.040 --> 08:48.680
use their desktop very often, or they don't want to install a new application, or they don't trust

08:48.680 --> 08:54.920
us yet. So we're developing a web application as well. And in the web application, the peer-to-peer

08:54.920 --> 09:00.120
node is running on the back end. Anybody can self-host this, of course. And it's used to power

09:00.760 --> 09:07.240
phones and lighter weight environments like Chromebooks. So it's eventually going to have

09:07.240 --> 09:11.160
basically all the same features that the desktop software has, but you're of course going to be

09:11.160 --> 09:17.560
happening to trust this server that you're talking to, trust this domain. Okay, so accessible interfaces.

09:17.560 --> 09:24.120
We need really rich content for you to be publishing. So we have a block-note like editor, where I

09:24.120 --> 09:31.160
sorry, we have a notion like editor powered by block-note. It's got all the different types of things

09:31.160 --> 09:37.320
that you might want, and we're hoping to make it accessible in the near future so that you can

09:37.320 --> 09:44.200
add new types of content into your documents that are sort of custom to you. So what else? What else

09:44.200 --> 09:49.800
do we need for humanity's information system? We need to be able to make really deep and

09:49.800 --> 09:58.040
precise references. So here I'm copying the exact version of a certain document. I think that's

09:58.040 --> 10:03.080
really important that you can be able to reference the exact version, snapshot it in time,

10:03.080 --> 10:10.440
referenced through the CID, the IPFS CID. Also, you can drill into a document however you'd like.

10:10.440 --> 10:16.920
You can reference a single paragraph. You can reference a section of a document because every document

10:16.920 --> 10:23.000
is composed as a hierarchy. And you can even reference just a string, just a section of a paragraph,

10:23.720 --> 10:27.960
a text range. And when you do this, you really should be referencing the exact version so that

10:27.960 --> 10:36.200
way your selection is not changing out from under you. What else do you need? Well, one thing I

10:36.200 --> 10:41.960
didn't mention is that the web doesn't really have the ability to embed part of one page into another.

10:41.960 --> 10:46.680
The web has eye frames, but this is not really what we're talking about. You might want to take

10:46.760 --> 10:51.080
part of somebody else's content and put it into your content because they did a good job,

10:51.080 --> 10:56.840
and you want to reference them. And when you make that reference, by the way, you're copying it

10:56.840 --> 11:02.520
into your server, but you're not stealing their content because you're not stealing attribution.

11:02.520 --> 11:08.760
It's all been signed by them. So this allows you to solve this problem of, do I link to the

11:08.760 --> 11:14.760
website where a link can be fragile or broken or do I copy it, which is kind of like plagiarism?

11:14.840 --> 11:20.840
This is neither. And this is archiving the content and making it so that their their page,

11:20.840 --> 11:27.400
their document is backed up just one step further and can be available to anyone who's

11:27.400 --> 11:33.800
browsing your site now as well. So we also support collaboration as I was alluding to with Bob

11:33.800 --> 11:39.960
Analysis and Bob being on a boat. And so when you add a collaborator, you're creating a certificate

11:39.960 --> 11:45.160
capability. So basically if Bob is inviting Alice, she's signing something that's saying

11:45.160 --> 11:50.280
Alice is invited to collaborate on a document. And this works a lot like you can if you're familiar

11:50.280 --> 11:57.720
with those. And we're going to go into a lot more our capabilities are pretty simple right now,

11:57.720 --> 12:01.720
but we do have functioning document collaboration. It's one of the most important things

12:01.720 --> 12:10.520
that we're going to save the web. Next up, we are not going to rely on social media as the

12:10.520 --> 12:17.160
layer of commentary anymore. Conversations are a first class citizen, not an afterthought. You can

12:17.160 --> 12:24.760
comment on anything, comment on documents, comment on other comments. You can cite anything from

12:24.760 --> 12:29.560
your comments and your comments can be cited using all of those same sophisticated techniques that

12:29.640 --> 12:36.920
we talked about earlier. Citations, which are basically backlinks, is you can see when somebody's

12:36.920 --> 12:44.280
referencing your documents. This is really, really important to create a sort of thriving knowledge

12:44.280 --> 12:48.360
system on the web. You shouldn't have to go to Google to see who's been linking to you.

12:50.600 --> 12:55.000
And we also want to make it really easy to publish. Even if you don't have your own server,

12:55.080 --> 13:01.080
you should be able to get on to the web. So we are running a free service at hyper.media slash

13:01.080 --> 13:09.160
hm slash public key, basically, where your peer to peer content can get on to the web with one

13:09.160 --> 13:15.880
click. So you use our desktop application. The desktop application talks to the A gateway server,

13:15.880 --> 13:20.680
which by default is our gateway server because we want to make it super easy by default to get on to the

13:20.680 --> 13:29.080
web. And there you go, one quick publishing from a desktop application, but keeping your sovereignty

13:29.080 --> 13:35.800
because the key is never leaving your device on encrypted. Okay, we also want to have really

13:35.800 --> 13:41.160
beautiful URLs. This is actually one of the coolest features of the web is that you can see

13:41.160 --> 13:48.440
what you're going to get before you click it. And this is a bit of a fragile URL because

13:48.520 --> 13:55.800
Eric.vescenty.net, this is a domain that I'm paying for right now because I'm alive. But in the

13:55.800 --> 14:01.800
chance that I die one day, it's possible that I will die one day. And I think that there should

14:01.800 --> 14:08.120
be a way to access my content anyways. So basically, my public key will allow you to address

14:08.120 --> 14:13.240
this anyways. And you can talk with your friends to sort of figure out, oh, this domain is gone,

14:13.320 --> 14:19.080
but it used to point to this public key. So eventually we can add a layer of what we call a

14:19.080 --> 14:27.320
distributed link base. This is just a term that we're using to basically resolve this into a

14:29.160 --> 14:34.120
hypermedia URL, which is clear to fear. Hey, distributed link base, let's go.

14:36.120 --> 14:41.560
So by the way, well, my domain is online. There is a mechanism where you can just immediately

14:41.640 --> 14:46.120
resolve it to the hypermedia URL. So whenever you're referencing it from your content,

14:46.120 --> 14:52.200
like you can paste in and you can open the normal HTTPS URL, but it gets resolved to what we call

14:52.200 --> 14:59.480
a permanent URL, a peer-to-peer hypermedia URL, under the hood. So all of this is like really

14:59.480 --> 15:04.920
relevant for your like users, like normal people, but I'm in a room full of awesome developers.

15:04.920 --> 15:10.760
And I believe that we need to deliver really great APIs, SDKs, command line interfaces, and agents,

15:10.760 --> 15:15.800
and genetic interfaces, because this is also part of making an accessible technology. It needs

15:15.800 --> 15:24.360
to be extensible and accessible to everybody. Okay, I probably need to move faster. This is two out

15:24.360 --> 15:29.720
of the three ingredients that we need for a new web. But lastly, I believe we need to invest

15:29.720 --> 15:36.840
in the web of trust, because the peer-to-peer web is messy and dangerous. It's not as simple

15:36.920 --> 15:43.080
as Bob and Alice and Bob being on a boat, because, you know, there's a lot of us out here.

15:43.080 --> 15:48.680
I don't even know which one of these is Bob and Alice. I didn't keep track. And a lot of these people

15:48.680 --> 15:53.320
might not have your best interest in heart. Like they might be running faulty software,

15:53.320 --> 15:58.920
they might be spammers, they might be attackers. So what's really important is to hold on to your

15:58.920 --> 16:03.960
identity and be able to associate it properly with people in the real world, to be able to associate

16:04.120 --> 16:09.560
it identities. As we talked about, we're supporting domain names. We're not going to be selling

16:09.560 --> 16:16.920
a token for you to get a name. You can resolve a domain name to a public key using HTTPS and

16:16.920 --> 16:20.600
pretty soon we're going to allow you to just use a DNS server because that's simpler for some

16:20.600 --> 16:26.840
people. And you can check the signed data that your public key is signing to see what domain

16:26.840 --> 16:33.080
is resolving to. So we have this really strong link when it works, but sometimes the domain might

16:33.240 --> 16:37.640
change, sometimes the key might change. So we're going to need to build software that makes this

16:37.640 --> 16:42.440
a little bit more sophisticated in the future. And some of this complexity will actually need to

16:42.440 --> 16:47.720
be exposed to users, which is unfortunate, but it's just a reality of having a stable identity

16:47.720 --> 16:53.960
that you properly own. And we're going to build upon more trust systems, not just domain names,

16:53.960 --> 16:58.600
but we're going to make it easy so that your personal relationships can exchange public keys

16:58.680 --> 17:04.120
basically face to face. And of course we're going to link your keys to social media accounts

17:04.840 --> 17:10.200
and basically any other system that you're interested in. If you know what key base is or was,

17:11.240 --> 17:20.440
this is that and we're just trying to do it again. So we need to have signed social validations

17:20.440 --> 17:27.480
so that one key is providing trust metadata about other keys. Usually it's saying like, oh I'm

17:27.560 --> 17:33.000
following you, I like you. It's much like following on Twitter, but Elon Musk doesn't need to be

17:33.000 --> 17:41.080
involved. And what we're going to do is we're going to form a web of trust. So that way we can connect

17:41.080 --> 17:47.800
with each other in a reliable way. I might trust a couple of you and you might trust each other,

17:47.800 --> 17:55.080
and within a few hops we know that we're in a really good space. So these are the ingredients

17:55.080 --> 18:00.520
that we need to build a better web. I'm really excited about this if you can't tell.

18:02.360 --> 18:08.360
If you're interested in our software you can check out c.hyper.media or get hub where a patchy too.

18:10.360 --> 18:15.160
Yeah and we're also opening this up as a protocol so that you don't even need to use our software

18:15.160 --> 18:21.160
if you want to communicate in this way. Although it's a little bit underbaked and under documented,

18:21.240 --> 18:24.920
but get in touch with us if you're interested and we're going to support you however we can.

18:26.600 --> 18:33.880
But before we finish, I do have to be honest with you because when I tell people about this project,

18:35.000 --> 18:41.480
they seem excited, but also I can tell that they've had their hearts broken before by similar

18:41.480 --> 18:47.800
dreams that did not pan out. People will say, this has been tried so many times before,

18:47.960 --> 18:55.640
but what they're really saying is that this is impossible. And sometimes this gets to me because

18:55.640 --> 19:01.160
I've also had my heart broken when it hasn't worked out in the past and people have had these

19:01.160 --> 19:07.240
really ambitious dreams and there are so many inspirational projects that haven't ignited the

19:07.240 --> 19:13.480
revolution that we need to improve the web. These are some of our heroes. They're the creators of

19:13.480 --> 19:18.440
the Hypertext movement and they spent a lifetime trying to implement these ideas in the modern world.

19:21.480 --> 19:26.440
We've learned so much from so many initiatives and I'm going to show a few of them that have inspired

19:26.440 --> 19:33.640
us in no particular order, but they haven't all survived. Some have faded away. Some have shut

19:33.640 --> 19:40.040
down or sold to a big company. Some of these projects are great but they have a very focused scope

19:40.920 --> 19:46.520
and they aren't trying to solve the biggest issues that we face in the web. And some of these projects

19:46.520 --> 19:51.960
live on but regular people haven't managed to adopt them. So when it comes to building a better

19:51.960 --> 19:59.000
web with mainstream adoption, it does seem impossible and it will seem impossible until we've done it.

20:00.600 --> 20:06.840
So I believe that it starts off with a few dreamers who have a vision for a future that everybody

20:06.920 --> 20:16.760
else sees as crazy. But before you know it, the concept is proven and what I find amazing is that

20:16.760 --> 20:23.960
in a very short period of time it becomes integrated into society so deeply that most people don't

20:23.960 --> 20:35.160
even think about it. So I believe we're including the most important ingredients but I don't believe

20:35.240 --> 20:41.960
that's enough. Our team has been working on this for five years and we refuse to give up,

20:41.960 --> 20:50.760
we refuse to pivot and we refuse to narrow our goals and even that is not enough. We need community

20:50.760 --> 20:57.240
leaders, knowledge managers and developers like yourself because together I believe we have the

20:57.240 --> 21:02.440
opportunity to build a better network for humanity. So what do you say? Do you think we can build a

21:02.520 --> 21:04.520
better web?

21:19.960 --> 21:21.960
That's quite a right.

21:23.800 --> 21:29.480
We reached the end of the day of the room. Do you say she wants to come with me to say goodbye to everyone?

