back to index

Brendan Eich: JavaScript, Firefox, Mozilla, and Brave | Lex Fridman Podcast #160


Chapters

0:0 Introduction
1:53 History of early programming languages
6:46 Physics needs more experiments and less theory
11:23 JavaScript origin story
36:16 JavaScript was created in 10 days
45:56 Marc Andreessen
49:13 Internet Explorer
52:57 Evolution of JavaScript
58:43 Javascript standardization
64:33 TypeScript
67:4 JavaScript ecosystem
70:14 HTML5
73:46 Making JavaScript fast
82:56 JavaScript is the most popular language in the world
93:22 Advice for programmers
99:19 Browser wars
105:49 Firefox
127:32 Brave
140:32 Basic Attention Token
165:35 California
174:47 Mortality
175:53 Legacy

Whisper Transcript | Transcript Only Page

00:00:00.000 | The following is a conversation with Brendan Eich,
00:00:02.560 | creator of the JavaScript programming language,
00:00:05.680 | co-founder of Mozilla, which created the Firefox browser,
00:00:09.200 | and now co-founder and CEO of Brave Software,
00:00:12.840 | which has created the Brave browser.
00:00:15.440 | Each of these are revolutionary technologies.
00:00:18.320 | JavaScript is one of the most widely used
00:00:21.120 | and impactful programming languages in the world.
00:00:24.880 | Firefox pioneered many browser ideas that we love today,
00:00:29.000 | or even take for granted today.
00:00:31.280 | And Brave is looking to revolutionize
00:00:33.520 | not only the browser, but content creation online
00:00:36.640 | and the nature of the internet to make it fundamentally
00:00:39.640 | about respecting people's control over their data.
00:00:43.400 | Quick mention of our sponsors,
00:00:45.360 | the Jordan Harbinger Show,
00:00:47.360 | Sun Basket Meal Delivery Service,
00:00:49.720 | BetterHelp Online Therapy,
00:00:51.520 | and 8sleep Self-Cleaning Mattress.
00:00:53.920 | Click the sponsor links to get a discount
00:00:56.200 | and to support this podcast.
00:00:58.080 | As a side note, let me say that there's a tension
00:01:00.840 | between theory and engineering
00:01:03.160 | that I've been thinking a lot about.
00:01:05.200 | I tweeted something like,
00:01:06.960 | "Good execution is more important than a good idea,
00:01:09.880 | "but one helps the other."
00:01:11.800 | I think the wording of that sucks,
00:01:13.480 | but what I mean is a good idea is a must.
00:01:16.880 | But in my experience, good ideas are in abundance.
00:01:20.720 | Good execution, on the other hand, is rare.
00:01:23.720 | I think some mix of good timing, good idea,
00:01:26.040 | and good execution is essential.
00:01:28.120 | Getting that mix right is tough,
00:01:29.840 | and Brendan somehow, multiple times in his career,
00:01:32.880 | did just that.
00:01:34.240 | I'm starting to believe it's more art than science,
00:01:36.640 | like most interesting things in life.
00:01:39.200 | If you enjoy this thing, subscribe on YouTube,
00:01:41.680 | review on Apple Podcasts, follow on Spotify,
00:01:44.640 | support on Patreon, or connect with me on Twitter,
00:01:47.440 | @lexfriedman.
00:01:48.800 | And now, here's my conversation with Brendan Eich.
00:01:52.400 | When did you first fall in love with programming?
00:01:56.000 | - I didn't program a lot when I was in high school,
00:01:58.080 | but I had a friend who had a Commodore PET.
00:02:01.320 | And after we saw Star Wars, he said,
00:02:02.920 | "Hey, let's make a basic program
00:02:05.440 | "that does the Death Star Trench run."
00:02:07.800 | And it was just simple 2D graphics.
00:02:10.680 | And I didn't know what I was doing,
00:02:11.520 | so I just helped him out on the math and stuff like that.
00:02:14.040 | I was a math and science kid.
00:02:15.880 | I was really into the HP calculators of the early mid '70s.
00:02:19.840 | These were the RPM.
00:02:21.320 | They were really strongly built,
00:02:23.200 | and are at Goldfinger, instead of gold divinely heavy.
00:02:27.360 | There's probably some gold in them, too, gold metalization.
00:02:29.680 | But they were awesome calculators,
00:02:31.080 | and they had all the scientific functions,
00:02:32.960 | so I was really into that.
00:02:34.240 | So I aimed toward physics.
00:02:37.160 | I was a little late for the, I think,
00:02:40.440 | the 20th century golden age,
00:02:42.280 | and I read a lot of science fiction,
00:02:43.560 | so I was like, yeah, it's on the hyperdrives and warp drives.
00:02:46.480 | And physics was not gonna get there quickly,
00:02:50.160 | and I started hacking on computers
00:02:52.280 | while I was studying physics as an undergraduate
00:02:54.880 | at Santa Clara University.
00:02:56.400 | And I dodged the Fortran bullet
00:02:59.920 | because I was in the science department
00:03:01.840 | instead of the engineering department,
00:03:02.960 | where they still did Fortran card decks.
00:03:05.560 | I think they had an auto collator.
00:03:07.320 | But we were using Pascal,
00:03:09.160 | and I got one of the first portable C compilers,
00:03:13.640 | ports to the deck minicomputers we were using.
00:03:17.560 | And I fell in love with programming
00:03:19.320 | just based on procedural abstraction, Pascal,
00:03:24.320 | just what now would be considered old school,
00:03:28.880 | like structured programming from the '70s.
00:03:31.600 | Niklaus Wirth, the creator of Pascal,
00:03:33.480 | was a good writer and a good pedagogue.
00:03:36.160 | He always, at ETH, would do these courses
00:03:38.200 | where it's like build your own computer,
00:03:40.120 | build your own compiler, build your own operating system.
00:03:42.720 | - From scratch. - Yeah, kind of.
00:03:44.200 | And I know some people who are grad students under him
00:03:47.120 | said he would torture the students
00:03:50.480 | with things like this custom email system
00:03:52.240 | that had 25 word limit. (laughs)
00:03:55.120 | And things like that.
00:03:56.800 | - I unfortunately dodged both the Pascal
00:03:59.200 | and the Fortran bullets.
00:04:00.720 | Could you maybe linger on the Pascal?
00:04:04.760 | What kind of programming language was it?
00:04:06.280 | What is it reminiscent of today?
00:04:08.120 | Because it sounds like it may have had
00:04:10.840 | an impact on your own trajectory.
00:04:12.560 | - Yeah, it was in the Algol family.
00:04:14.440 | And Algol was the big successful
00:04:19.080 | language design and compiler project in the '60s.
00:04:23.120 | It had a successor called Algol 68,
00:04:24.920 | which was ambitious but not as successful.
00:04:27.400 | But Pascal was kind of a wordy procedures
00:04:30.960 | and functions language.
00:04:32.560 | It distinguished between functions,
00:04:33.880 | which return a value, and procedures, which don't,
00:04:36.120 | which just compute.
00:04:37.840 | And you could say that whole Algol family went into Ada.
00:04:42.560 | Pascal had a second life thanks to Borland
00:04:44.560 | with Turbo Pascal, which was hugely successful.
00:04:48.020 | I think in large part due to Anders Helsberg,
00:04:51.000 | who then went to Microsoft and did C# and .NET
00:04:53.840 | with his team there and has done really well.
00:04:55.520 | Doing TypeScript, Type JavaScript.
00:04:58.020 | So yeah, there's a lineage here.
00:05:00.800 | But I was also interested in C and Unix
00:05:03.800 | by the time I was an undergrad.
00:05:05.680 | Because people were bringing Unix up
00:05:07.840 | on all sorts of hardware.
00:05:09.200 | I had some friends who were doing
00:05:10.200 | their own wire-wrapped computers, 6820 maybe.
00:05:14.480 | And I was wire-wrapping for my engineering course,
00:05:19.160 | 1609 or something simpler, building a computer on a board.
00:05:22.480 | And I wanted to build a more ambitious one
00:05:24.740 | and port Unix to it, but I picked the wrong processor.
00:05:26.960 | I picked the National Semiconductor NS16032,
00:05:30.920 | which was this amazing CISC,
00:05:34.040 | Complex Instruction Set Computer.
00:05:37.200 | And not the reduced instruction set computers
00:05:39.360 | that were just being contemplated into the mid '80s.
00:05:43.760 | - And RISC ultimately won out.
00:05:45.440 | - RISC-I in some ways, it dissolved into,
00:05:48.380 | you have both now.
00:05:49.220 | You have these super scalar architectures
00:05:50.800 | where Intel has kept probably too much backward compatibility
00:05:55.240 | at the instruction level.
00:05:56.800 | But there's a front end that parses that
00:05:58.920 | into these wide internal instructions.
00:06:01.240 | So the very long instruction word research
00:06:04.440 | that was also interesting at the time
00:06:06.880 | kind of became the microarchitecture
00:06:08.560 | inside the backward compatible Intel.
00:06:11.440 | But I picked the National Semichip
00:06:13.160 | and it never got made successfully.
00:06:14.840 | It was full of bugs and I never could have brought it up.
00:06:17.800 | But I went on out of physics after three years
00:06:21.160 | into math computer science.
00:06:23.240 | And like I said, I did it because I saw,
00:06:25.740 | I was being sort of childlike and naive about physics.
00:06:28.420 | And I thought, meanwhile, the valley is go-go for computers.
00:06:32.120 | The Apple II, the PC, the Intel.
00:06:36.960 | 8086, 8088 based PC, the IBM.
00:06:41.960 | Gave Microsoft the future for a somewhat fishy deal.
00:06:46.800 | - So it was wide open in the computing space,
00:06:48.640 | but in physics, you were as optimistic about physics as--
00:06:52.160 | - No, I mean, I was one of three brothers
00:06:54.680 | who were all in the same grade.
00:06:56.060 | I have a twin and a younger brother
00:06:58.800 | who skipped second grade and was with us
00:07:01.440 | the whole time after that.
00:07:02.960 | And he went on.
00:07:04.460 | He actually studied under Kip Thorne at Caltech.
00:07:07.520 | But he also didn't, he ended up in software.
00:07:09.720 | (laughing)
00:07:12.340 | - Does it make you sad that theoretical physics,
00:07:16.100 | even with string theory, hasn't really had
00:07:18.640 | any foundational breakthroughs in the latter part
00:07:21.900 | of the 20th century?
00:07:23.320 | - Yeah, in fact, I'd say the problem is theory
00:07:25.220 | over experiments.
00:07:27.120 | I would say we need more Aristotle and less Plato.
00:07:30.840 | Mathematics is not all physical.
00:07:33.800 | There are lots of mathematics that cannot be realized
00:07:36.240 | as far as I know in this world.
00:07:38.340 | So to understand the world, you need to do experiments.
00:07:41.000 | You need to not just dream up inductive theories
00:07:45.160 | that could have lots of alternative theories
00:07:47.860 | competing with them, with no way to decide between them,
00:07:50.100 | except aesthetics, which is not a good guide, in my opinion.
00:07:53.000 | - I don't know if you are friends with
00:07:54.920 | or have a relationship with Elon Musk.
00:07:56.860 | Where's the, in terms of what you would love to see
00:08:00.500 | our society investing in building up,
00:08:02.760 | is it closer to Elon or is it closer to
00:08:06.320 | Feynman and Einstein and those?
00:08:09.120 | - Well, those gentlemen are no longer with us,
00:08:10.560 | and I think that's noticed.
00:08:11.960 | So like I said, the real glory days of physics,
00:08:14.440 | the famous pictures from Germany before the Second War
00:08:17.240 | were just a fantastic assembly of brains,
00:08:21.720 | Schrodinger and Einstein.
00:08:23.680 | Physics, I think, took a wrong turn
00:08:26.280 | that maybe all of, I would say, Western science took
00:08:30.320 | in going for models over reality, right?
00:08:33.720 | You see this in all sorts of fields.
00:08:35.280 | Now, we can build models that are very predictive
00:08:37.980 | and generative and then we build actual devices
00:08:40.280 | or semiconductors, things like that.
00:08:42.160 | That's good, I'm not dismissing that.
00:08:44.400 | We need good models, we need to experiment
00:08:46.840 | and prove them and test them.
00:08:49.640 | But the problem I've seen in physics,
00:08:51.880 | which you see certainly in economics, the dismal science,
00:08:55.600 | and you see, surprisingly, in other so-called hard sciences,
00:08:59.040 | is models that don't really have to be tested
00:09:04.040 | against reality.
00:09:05.520 | They can instead become policy tools
00:09:07.620 | or they can become, like I said,
00:09:09.880 | one of a large family of alternate theories
00:09:12.920 | that could be as predictive,
00:09:14.600 | but nobody's doing the winnowing out.
00:09:16.960 | - That's such an interesting tension in society.
00:09:18.840 | You see this in even the softer sciences,
00:09:20.960 | which I have a deep love for, like psychology.
00:09:24.400 | You see this in epidemiology, not with the virus.
00:09:27.200 | - Absolutely.
00:09:28.040 | - There's this tension of how much of the world
00:09:31.280 | can we understand through just a beautifully fit model?
00:09:35.060 | And then at the same time, my main work
00:09:37.640 | is in machine learning, where it's like
00:09:41.000 | there is no provable thing usually.
00:09:44.400 | It's just kind of, it's all about just getting
00:09:46.880 | the right data set and getting tricks and so on.
00:09:49.640 | And there's this tension, even in my own soul,
00:09:51.760 | of like I grew up in theoretical computer science.
00:09:55.680 | I loved approximation algorithms,
00:09:58.680 | like all of that, like different complexity classes,
00:10:01.940 | just those little puzzles.
00:10:03.960 | I mean, I don't know, to you as somebody
00:10:06.200 | who was in math and computer science
00:10:08.600 | and then ended up going into places
00:10:11.280 | where you engineered some of the most impactful things
00:10:13.860 | in this world, do you see the P versus NP,
00:10:18.680 | all that whole space as interesting at all?
00:10:21.280 | - Yeah, it's not that useful in practice, right?
00:10:24.640 | People are using it with sort of crypto analysis
00:10:27.920 | or asymptotic arguments about can we have
00:10:31.760 | a quantum-resistant crypto algorithm, things like that,
00:10:35.320 | which may not be practical, right?
00:10:36.600 | If you follow Mikhail Diakonov or Gil Kalai,
00:10:40.160 | there are big questions about how quantum computing
00:10:43.640 | will scale up, how practical it will be.
00:10:46.800 | - Is that something that you think about,
00:10:48.000 | quantum computing?
00:10:49.480 | - Not for a spare time.
00:10:51.080 | Like you said, I'm not using this kind of computer science
00:10:53.560 | in practice because almost everything now is engineering
00:10:57.680 | and finding ways to get computers
00:11:02.160 | to be more useful for people,
00:11:03.340 | which goes from design problems,
00:11:06.160 | which are really kind of an art.
00:11:07.440 | Like Knuth said, anything you can't automate is an art.
00:11:09.960 | Well, we can have machine learning compose music
00:11:13.320 | and it can imitate, you can train it,
00:11:14.800 | and it can sound kind of decent,
00:11:16.040 | but maybe lacking that je ne sais quoi.
00:11:18.680 | But user interface still, I think, requires human art.
00:11:23.560 | - So speaking of things that didn't follow
00:11:26.440 | a perfect theory and model, JavaScript.
00:11:30.480 | So there's two things.
00:11:31.320 | One, it had an impact on the world at a huge scale,
00:11:34.360 | obviously, and it also still is one of,
00:11:38.320 | probably the most popular programming language in the world.
00:11:41.400 | So can we go back to the origin story?
00:11:44.140 | Can you tell the story of how JavaScript was created?
00:11:47.840 | - Yeah, I was at Silicon Graphics after graduate school
00:11:51.080 | for seven years, and it got to be big and successful
00:11:54.720 | and divisionalized and political,
00:11:56.800 | and I thought, kind of boring.
00:12:00.480 | And a friend who'd been there went to
00:12:03.240 | one of the last of the super companies,
00:12:05.280 | super startups in the early '90s.
00:12:07.600 | There were several.
00:12:08.720 | I suppose General Magic was a little after that
00:12:10.840 | or around the same time.
00:12:11.920 | But MicroUnity was that company that I went to,
00:12:14.360 | and it was because my friend, Jeff Weinstein,
00:12:16.880 | had gone there from Silicon Graphics.
00:12:18.040 | He recruited me, and MicroUnity was doing everything.
00:12:21.960 | So this was like the ultimate sort of pretend grad school.
00:12:26.080 | It was doing a new fab, new semiconductor process.
00:12:29.360 | It was doing new analog and digital circuits
00:12:32.600 | on the same very large but not wafer-scale chip.
00:12:36.080 | Originally, it was five centimeters on a side.
00:12:40.360 | It was really hot, too, so it needed a water cooler.
00:12:43.880 | It was a Craykiller, and then they shrunk it,
00:12:46.280 | and they tried to do a home sort of media processor
00:12:49.320 | that was essentially a barrel processor,
00:12:51.920 | but you could think of trying to do all the things
00:12:55.440 | that we now see in modern architectures
00:12:58.160 | with short vector instructions
00:13:00.240 | and sort of wide instructions for multiple issue,
00:13:04.640 | and doing a lot of the stuff in software
00:13:07.520 | because the second iteration, the set-top box,
00:13:10.120 | was really for avoiding the cost to the cable company
00:13:13.040 | of rolling the trucks out
00:13:14.520 | to replace your garbage General Atlantic set-top box
00:13:17.600 | with a totally newer, less garbagey one.
00:13:21.040 | So if you could have software-gradeable set-top boxes,
00:13:23.900 | the cable companies thought they could save a lot of money
00:13:26.240 | and add features.
00:13:27.200 | - Is this assembly, or which level of the software?
00:13:30.280 | - It was like, we were writing in, we were using GCC.
00:13:33.840 | We were writing C++ in C.
00:13:36.280 | Somebody I worked with there, really very smart guy,
00:13:39.920 | hired from a sort of Wall Street
00:13:43.040 | hotshot programming consultancy,
00:13:45.240 | did his own hardware design as well as software.
00:13:47.680 | We were working on how to make
00:13:49.400 | not only short vector units,
00:13:50.740 | but general bit shufflers and permuters
00:13:53.080 | so you could do things like crypto algorithms efficiently,
00:13:57.480 | and you could do demodulation of the cable,
00:14:01.400 | complex quadrature amplitude modulated signal.
00:14:05.240 | So you're basically taking A to D converters,
00:14:07.980 | dumping things in buffers,
00:14:09.000 | and then doing the rest in software.
00:14:10.760 | All the framing and the Reed Solomon
00:14:12.880 | and Viterbi and all that error correction.
00:14:14.520 | So that was really great learning experience,
00:14:16.100 | but it was not gonna work.
00:14:16.940 | It was doing too many risky things at once.
00:14:19.440 | As Jim Clark said to me when I hopped to Netscape
00:14:21.960 | after three years at MicroUnity,
00:14:23.240 | he said, "Oh yeah, you do 10 things,
00:14:25.240 | "each one in 10 odds, it's gonna be one in 10 billion."
00:14:28.040 | (laughing)
00:14:29.880 | The multiplication principle.
00:14:31.080 | So Netscape was already a rocket,
00:14:33.360 | and I passed the chance to go there in 1994.
00:14:36.800 | I knew the founders, 'cause I worked at SGI,
00:14:39.240 | Clark's company.
00:14:40.080 | - Could you pause for a second?
00:14:41.160 | Netscape, when was the launch of this rocket?
00:14:44.800 | - '94.
00:14:45.640 | - '94 was the launch of Netscape?
00:14:47.280 | - And I went there in early '95, in April.
00:14:49.720 | - Okay, so you said you missed the launch.
00:14:52.160 | - Well, I missed the first floor employment opportunity,
00:14:55.560 | but the IPO was August 1995, so I was there for that.
00:14:59.000 | - How obvious was it that Netscape was world changing?
00:15:02.280 | What was the layout?
00:15:04.080 | Was Netscape one of the first big browsers?
00:15:06.160 | - Yes, so when I was at MicroUnity still in '93,
00:15:09.280 | we saw a browser called Mosaic.
00:15:11.720 | And up 'til then, we'd used email,
00:15:13.400 | and we'd used Usenet, the NNTP protocol.
00:15:15.840 | We'd used Newsreaders, we used FTP,
00:15:18.680 | we used all these old internet protocols,
00:15:20.880 | all relying on the DNS and TCP/IP and UDP,
00:15:24.080 | for that matter.
00:15:25.720 | When I was at Silicon Graphics,
00:15:26.800 | we brought up the whole stack, right?
00:15:28.120 | We had to discover how to find the ethernet addresses
00:15:31.760 | on your network, and then find IP addresses for them,
00:15:34.720 | ARP protocol, all that stuff.
00:15:35.960 | And it was great, because nobody knew in the '80s
00:15:38.680 | what was gonna win.
00:15:39.520 | All the proprietary stacks like IBM, SNA, and DECnet,
00:15:43.840 | and all these other protocols were saying,
00:15:45.720 | we're gonna do it, or it's gonna be heterogeneous future.
00:15:48.680 | Instead, it was Berkeley Unix and the TCP/IP stack
00:15:52.560 | that dated back to the ARPANET that won.
00:15:54.960 | And I think we knew it.
00:15:56.480 | We all knew it at SGI, but the salespeople didn't.
00:15:59.320 | And so they kept trying to get multiple network stacks
00:16:02.120 | interoperating, but in the end, it won.
00:16:04.400 | And so that was the internet.
00:16:06.520 | And it was email and texty, and it was used then,
00:16:09.000 | very texty.
00:16:09.840 | And then Tim Berners-Lee did his thing,
00:16:12.580 | but I don't think I was paying attention.
00:16:14.160 | And I think the date when he first did it,
00:16:16.440 | or when he wrote the famous email,
00:16:17.840 | it's been pushed back to '89.
00:16:19.620 | But I noticed a mosaic in '93,
00:16:21.720 | because one of the things that Mark Andreessen
00:16:24.480 | and Eric Bina did at NCSA was they innovated
00:16:28.240 | on the early HTML standard.
00:16:31.360 | They, in particular, Mark sent this email saying,
00:16:33.080 | hey, everybody, we think you should be able
00:16:34.400 | to put an image in a page.
00:16:36.280 | And you know when he sent that,
00:16:37.640 | Eric Bina had already written the code.
00:16:39.080 | And I talked to Tim Berners-Lee more recently,
00:16:41.920 | just a few years ago, and he was like,
00:16:43.120 | oh, we had another way of doing it.
00:16:44.280 | And it didn't work out, 'cause Mark shipped his in mosaic.
00:16:47.960 | And this convinced me of several things.
00:16:50.040 | One, the internet meant there was a huge
00:16:53.160 | first mover advantage, and being fast,
00:16:56.440 | getting on first, mattered a lot.
00:16:58.160 | And so Richard Gabriel of Scheme and Poetry fame
00:17:01.880 | has written about this, the famous essay.
00:17:03.080 | - Poetry, what's poetry?
00:17:04.760 | - Well, he's a poet.
00:17:06.000 | - Oh, actual poetry.
00:17:07.160 | He's like talking about some kind of subject.
00:17:08.320 | - No, no, I mean, he's the founder of Lucid,
00:17:10.160 | which is where Jamie Zawinski worked before Netscape.
00:17:12.840 | And Lucid was doing compilers, and Lucid Emacs,
00:17:16.280 | which was a fork of Emacs, famously Jamie fighting
00:17:19.480 | against Richard Stallman, Stallmax.
00:17:22.640 | And so Richard Gabriel, very brainy computer guy,
00:17:25.240 | but also a poet, but he wrote a nice essay
00:17:27.320 | that gets abused all the time.
00:17:28.920 | In fact, Jamie's put a kind of warning
00:17:30.440 | in front of his version of it on his site, JWZ.org,
00:17:33.320 | called Worse is Better.
00:17:34.360 | And this is about survival advantage of software
00:17:38.240 | in the network world, in my opinion.
00:17:39.760 | It's about Unix, it started out being framed
00:17:42.640 | as Unix and Lisp, good news, bad news,
00:17:44.600 | because all the Lisp people, the MIT people,
00:17:46.560 | were like, oh, the crown jewel scheme,
00:17:50.320 | this Fabergé egg, or Common Lisp, this giant cathedral.
00:17:53.760 | Of course we're gonna win, this is civilization.
00:17:55.680 | And those farmers in New Jersey, to borrow from Sopranos,
00:17:59.080 | those hicks down at Bell Labs, they're just,
00:18:02.440 | there's nothing sound there, it's all hacking.
00:18:04.160 | - Yeah.
00:18:05.240 | - Well, guess what won?
00:18:06.800 | - Wow, so you're saying this is a fundamental principle
00:18:11.080 | of the internet is moving fast winds.
00:18:14.760 | - You could say in almost any network system,
00:18:16.920 | like in biological evolution, you see successful alleles
00:18:19.760 | sweep populations, and they don't always have,
00:18:22.000 | they aren't free of flaws, they,
00:18:24.840 | heterozygous advantage, right?
00:18:26.320 | You can get, both parents give you the gene variant
00:18:30.160 | and you get sickle cell anemia, right?
00:18:31.760 | But if one of them does, you're more resistant to malaria.
00:18:34.640 | And so this isn't a beautiful process,
00:18:38.120 | except at large scale, and then you realize that
00:18:40.440 | because it moves fast and can adapt, it can win.
00:18:44.200 | And people still struggle with this.
00:18:46.560 | I used to struggle with this, because JavaScript was done
00:18:48.800 | in such a hurry, and the force of web compatibility
00:18:52.040 | meant early mistakes couldn't be fixed.
00:18:55.200 | And even the standards process injected new mistakes,
00:18:57.640 | as it will, but often standards bodies go back
00:19:00.360 | and making compatible changes.
00:19:01.640 | You can't do that with the web.
00:19:03.040 | It's more like, again, like biology,
00:19:05.600 | you preserve what still works.
00:19:07.080 | You don't wanna break ATP metabolism or whatever.
00:19:10.320 | So you have to kind of resign yourself to the reality
00:19:15.120 | of worse is better being enshrined
00:19:19.960 | in actual design points you might not like.
00:19:23.080 | And that happened with JavaScript, and I'm way over it,
00:19:25.760 | but it also, I think, was a huge advantage,
00:19:28.720 | which is why JavaScript has kind of swept
00:19:31.160 | a lot of programming domains.
00:19:33.400 | People will say, "Oh, it's not because of merit."
00:19:34.840 | Well, you're right, but we also improved it over time
00:19:36.880 | in the standards body.
00:19:37.720 | I spent 20 years doing that.
00:19:39.320 | And you don't get that choice.
00:19:41.760 | It's like, I'm not saying that that was the best language.
00:19:45.360 | I'm just saying that was the right time to do it.
00:19:47.400 | And I like to say the alternative was not to do it.
00:19:50.280 | I could have told Netscape, "I can't do this.
00:19:52.120 | "It's too rushed."
00:19:53.480 | And it would have been Visual Basic Script,
00:19:55.240 | and it would have been bad.
00:19:58.040 | - So that's a good way to present the alternative.
00:19:59.800 | But so it was a Netscape, and you have written it
00:20:03.040 | in how many days, and why was it only that many days,
00:20:05.880 | and what was the goal and the underlying principles
00:20:08.880 | in your mind at the time?
00:20:09.720 | - So the whole, I'm sort of describing worse is better
00:20:11.760 | in a frenetic way because it fit the model of Netscape.
00:20:15.000 | When it was known that Jim Clark and Mark Inveas
00:20:19.000 | were founding Netscape, and they did the first release
00:20:21.400 | in 1994, that browser took over from Mosaic.
00:20:24.840 | In fact, that's why Mozilla is called that.
00:20:27.120 | It's the Mosaic killer.
00:20:28.240 | It's like the giant monster that kills Mosaic.
00:20:30.120 | - That's awesome.
00:20:30.960 | - And they knew that, it wasn't that, again,
00:20:34.160 | it's not like you're doing advanced scientific research
00:20:36.200 | that is changing the world.
00:20:37.360 | You're more like taking down the last iteration
00:20:41.000 | of the browser Mark did, which had images,
00:20:43.160 | and other importances before he stopped working on it,
00:20:45.880 | and you're making Netscape the new thing that has images,
00:20:49.040 | plugins, which was the way to do video back in the day.
00:20:51.680 | It had something that's kind of died now
00:20:53.200 | for tiled windows called frames and framesets.
00:20:56.880 | - Oh, yeah, yeah, yeah, yeah.
00:20:57.920 | - HTML tables, that was new.
00:20:59.280 | Eric Bina did tables in Netscape 1.1.
00:21:01.640 | So when I got there, they were heading toward IPO.
00:21:05.040 | Clark wanted to IPO early.
00:21:06.480 | I think his instinct was right,
00:21:07.640 | and that kicked off the whole dot-com era.
00:21:10.280 | There was a recession in the US in '91.
00:21:13.280 | You can see old Law & Order reruns
00:21:15.140 | where they talk about the recession,
00:21:16.520 | how hard it's hitting New Yorkers.
00:21:18.080 | And after that, Greenspan really goosed things
00:21:20.440 | at the Federal Reserve, and technology had been
00:21:23.160 | sort of fermenting in a way that came together
00:21:25.800 | with the internet, and Netscape made it possible
00:21:28.720 | to do pets.com, to do eBay, to get people to recognize
00:21:33.160 | a URL on a billboard and then type it in when they get home.
00:21:36.040 | And that was huge.
00:21:37.320 | That was so fast moving a rocket that Mark
00:21:42.120 | and the engineering team there thought,
00:21:45.080 | we need to make this a programmable browser,
00:21:47.920 | not just a document viewer, not just a video.
00:21:50.840 | - So it was all HTML with images and tables,
00:21:53.800 | and also, like you said, frames.
00:21:55.280 | - Early plugins.
00:21:56.120 | - There's no dynamic element at all.
00:21:57.800 | - Yeah, the most dynamism you get was from a plugin,
00:21:59.680 | which there were a few of them then.
00:22:01.640 | Flash didn't exist at that point.
00:22:03.960 | It was, I think--
00:22:05.000 | - Java Applets yet, or no?
00:22:07.400 | - Well, that's the thing.
00:22:08.240 | We did the deal with Sun.
00:22:09.440 | In fact, I was recruited to go do Scheme in the browser.
00:22:12.560 | Remember Guy Steele and Gerald Sussman's
00:22:14.800 | beautiful Lisp variant?
00:22:16.760 | I was gonna do it in the browser
00:22:17.920 | because my friends from SGI thought,
00:22:19.480 | hey, we like Scheme, you like Scheme.
00:22:20.920 | And I'm like, I hardly ever use Scheme.
00:22:22.140 | It's not really used in industry,
00:22:23.400 | except in sort of silos.
00:22:25.000 | But I like it.
00:22:27.080 | Okay, I'll come do Scheme in the browser.
00:22:29.760 | I have a slide from my 2017 talk
00:22:32.720 | where I have Bruce Willis crawling through the duct
00:22:34.640 | in Die Hard.
00:22:35.480 | He's like, come out to the coast, have a lot of fun.
00:22:38.280 | Come on, do Scheme in the browser.
00:22:40.560 | But when I got there, there was no Scheme in the browser
00:22:42.160 | because they'd started a deal with Sun Microsystems.
00:22:45.240 | And my best contact there was Bill Joy,
00:22:47.040 | who I admired as a Berkeley Unix founder and Sun founder.
00:22:50.560 | And Bill got the idea of making the browser programmable too.
00:22:53.880 | And so the main idea was to put the Java VM,
00:22:57.200 | which at that point was not really easy to embed,
00:23:00.360 | into Netscape, including the Netscape version on Windows
00:23:04.220 | that was still most popular,
00:23:05.600 | which was the 16-bit Windows 3.1, which was going away.
00:23:09.520 | Microsoft was coming out with Windows 95
00:23:11.320 | and everyone was afraid they were gonna do
00:23:13.560 | Internet Explorer, I guess, two at that point,
00:23:16.160 | three the next year.
00:23:17.040 | They already bought or invested in somehow Spyglass,
00:23:20.920 | this other company that shot out from NCSA
00:23:24.440 | at University of Illinois.
00:23:26.360 | And in fact, Microsoft had tried to buy Netscape
00:23:29.720 | in late '94, before I got there.
00:23:31.360 | And I heard about this later.
00:23:32.240 | I heard they offered way too little money.
00:23:35.000 | And so Jim Barksdale and Jim Clark said,
00:23:37.360 | "Get out of here," in a pound of sand.
00:23:39.760 | But then they realized, oh, this is going to hurt us
00:23:43.740 | because now they're gonna copy us.
00:23:45.480 | Didn't happen right away.
00:23:46.320 | I'm not sure when Gates' Internet Tidal Wave memo
00:23:49.080 | was written.
00:23:50.240 | That's the famous memo he wrote when Bill Gates realized
00:23:53.160 | that Microsoft was going down this old copy AOL path
00:23:56.840 | or copy CompuServe path, a project called Blackbird,
00:24:01.100 | presumably after the SR-71, I don't know.
00:24:03.240 | But they were gonna make a dial-up service
00:24:05.360 | with a custom content language stack and custom rendering.
00:24:09.040 | It wasn't the web.
00:24:10.000 | They could have content partners.
00:24:13.200 | They have a lot of money.
00:24:14.400 | But it still wasn't to scale the web.
00:24:15.920 | It wasn't gonna be compelling.
00:24:16.880 | And Gates realized this, and he turned the company
00:24:19.480 | on a dime, and they couldn't buy Netscape.
00:24:22.400 | Again, I'm not sure of the timing.
00:24:23.320 | So they decided to copy it.
00:24:24.540 | And once we realized that, everybody inside Netscape
00:24:27.400 | felt even more urgency and more of a frenetic mood.
00:24:30.920 | And so my chance to do Scheme disappeared
00:24:33.620 | when the Java deal started brewing.
00:24:35.840 | But there was still a chance to do a companion language
00:24:38.840 | to Java because Java is a compiled language.
00:24:42.620 | It's evolved and improved quite a lot since then too.
00:24:44.960 | But it was for serious advanced programmers
00:24:48.560 | that cost a certain salary or hourly rate.
00:24:51.400 | And people observed, Bill Joy observed,
00:24:53.760 | and Mark Andreessen and I observed,
00:24:55.760 | that in a mature stack like Microsoft,
00:24:57.900 | you really benefit from having a scripting language
00:25:00.020 | like Visual Basic, which became Visual Basic Script
00:25:03.000 | in IE3, but didn't take over and kill JavaScript,
00:25:07.120 | that you need two languages.
00:25:08.360 | One is for the component writers
00:25:10.160 | who are higher priced and more expert.
00:25:12.560 | And the other is for scripters,
00:25:17.000 | certified public accountants, designers,
00:25:19.480 | graphic designers with some programming inclination.
00:25:21.720 | Anybody, amateurs, doesn't matter.
00:25:23.460 | There's a much more demotic approach there
00:25:26.600 | for programming the components together,
00:25:28.640 | gluing them together.
00:25:29.880 | Some people say duct tape language, which I don't really like.
00:25:32.800 | But we saw, Bill Joy and Mark Andreessen and I,
00:25:36.080 | we saw the need for a companion language.
00:25:38.040 | And the gleam in our eye was to call it JavaScript.
00:25:40.400 | I didn't like it, that was marketing's plan.
00:25:42.480 | Mark called it Mocha, which I liked.
00:25:45.080 | And Netscape Marketing, I think, didn't like that.
00:25:47.080 | So they said, "Oh, there's some trademark
00:25:48.440 | "in some software somewhere that uses Mocha,
00:25:50.740 | "so we can't use that."
00:25:52.120 | And they tried LiveScript in August and that didn't last.
00:25:54.960 | And then finally, we got the trademark license
00:25:56.680 | in December, 1995.
00:25:58.720 | But the work I did to prove that it could be done
00:26:01.620 | was important because I came in in April
00:26:05.200 | and even then Netscape was growing so fast
00:26:08.320 | that they couldn't find an open hiring requisition
00:26:11.280 | in the client team for me.
00:26:12.320 | So they hired me into the server team.
00:26:14.280 | And I worked for a month on server team
00:26:16.680 | on what became HTTP/1/1.
00:26:18.600 | So I was actually, I had done protocol work
00:26:20.280 | at Silicon Graphics with Greg Chesson,
00:26:22.640 | former Bell Labs intern, grad student intern,
00:26:25.360 | who knew all the Unix founders.
00:26:27.040 | And Greg was very interested in taking protocols
00:26:30.920 | to the next level with VLSI
00:26:32.840 | 'cause he thought that CPUs wouldn't scale up.
00:26:35.480 | He was mistaken in that, unfortunately.
00:26:37.480 | Moore's law more than kept up.
00:26:39.060 | And you have gigabit ethernet running
00:26:41.400 | with conventional processors.
00:26:42.520 | But I worked on protocols at SGI
00:26:45.680 | as well as Unix kernel hacking and NFS and things like that.
00:26:49.000 | So I came into Netscape to work on the server side
00:26:53.060 | for a month, but I was thinking the whole time,
00:26:55.280 | what should this language be like?
00:26:56.360 | Should it be easy to use?
00:26:58.480 | Might it syntax even be more like natural language
00:27:00.680 | like HyperTalk, which is Bill Atkinson's language
00:27:04.840 | in HyperCard, if you have ever used HyperCard
00:27:07.320 | on an early Mac.
00:27:08.800 | And I thought, well, I'd like to do that,
00:27:12.080 | but my management is saying make it look like Java,
00:27:15.160 | which looks like C from a distance.
00:27:17.480 | - What does that mean?
00:27:18.480 | Is it braces we're talking about visually?
00:27:20.400 | Does it mean like, what, management,
00:27:23.040 | do they understand what--
00:27:24.160 | - They don't, marketing didn't know,
00:27:25.520 | but management did, like the rickshaw of engineering knew.
00:27:28.460 | And we had a plan even that was,
00:27:31.720 | if you have this companion language,
00:27:32.920 | you're going to glue things together
00:27:34.560 | between Java and JavaScript.
00:27:35.720 | So you're going to have commerce in memory,
00:27:38.200 | in the heap with data types.
00:27:40.240 | So you're going to want some of the data types in Java
00:27:42.760 | to reflect in the JavaScript.
00:27:43.880 | You're going to want the primitive types that Java,
00:27:46.120 | unfortunately, severed from objects.
00:27:47.520 | So at least some of them, double, let's call it
00:27:50.880 | in Java's terms, from the C term for double precision,
00:27:53.720 | floating point, or strings, or Booleans, and objects.
00:27:58.720 | And so right away, there was this constraint
00:28:03.960 | that looking like Java meant kind of the C curly brace
00:28:07.520 | syntax, but also some of the data types and objects.
00:28:09.840 | - Like objects and so on, all that kind of stuff.
00:28:11.520 | - Dotted columns.
00:28:12.360 | - Comparison operator.
00:28:13.200 | - Garbage collection, all that stuff.
00:28:15.480 | Even the bitwise operators and the shift operators,
00:28:17.640 | including the unsigned right shift,
00:28:19.580 | which Java had because it didn't have unsigned integer types.
00:28:22.720 | It said if you want to do unsigned operations,
00:28:24.600 | use an operator.
00:28:25.440 | And that turned out to be important much later.
00:28:27.320 | I'll tell that story five times.
00:28:28.560 | But JavaScript inherited a set of,
00:28:33.980 | operators, the expression grammar,
00:28:36.340 | the statement grammar up to a point from Java.
00:28:39.380 | But I wanted a functional language.
00:28:40.740 | I wanted a little bit of Scheme,
00:28:42.840 | even though it wasn't as clean as Scheme.
00:28:44.620 | - So you had a love, sorry to interrupt,
00:28:46.140 | you had a love for Scheme and Lisp,
00:28:47.660 | that functional language landscape.
00:28:49.740 | - Yes, I wanted first class functions.
00:28:51.620 | Because I saw the need for callbacks in the browser,
00:28:54.000 | where it's a single threaded program.
00:28:55.940 | All the early browsers were single threaded.
00:28:57.380 | And it's the right model for users.
00:28:58.640 | Most users weren't ready for mutual exclusion
00:29:00.620 | and threading.
00:29:01.680 | So in a single threaded world,
00:29:03.660 | you cannot block the user interface.
00:29:05.420 | So you have to use a callback and run later.
00:29:07.500 | And without getting too fancy
00:29:09.900 | and trying to capture the continuation,
00:29:11.620 | like call CC does in Scheme,
00:29:13.340 | I thought I'll just make it easy to have fun arcs,
00:29:16.620 | first class functions you pass downward
00:29:18.860 | and it can be called back.
00:29:20.660 | And Java didn't have that at the time.
00:29:23.660 | It took forever to get proper first class functions,
00:29:27.300 | lambdas now into Java, Java seven or eight, I think.
00:29:30.740 | - It did have concurrency, right?
00:29:32.120 | - Yes.
00:29:32.960 | - From the very beginning.
00:29:33.780 | But you were thinking that the JavaScript in the browser
00:29:36.200 | would not have the luxury of being concurrent.
00:29:39.400 | - That's right.
00:29:40.240 | And the reason was,
00:29:41.080 | Java was gonna run in the plugins.
00:29:42.560 | We could fork threads and go to town.
00:29:44.600 | But the main action in the browser
00:29:46.920 | was in the single threaded program,
00:29:48.280 | in the single Unix process on Unix or Windows.
00:29:51.920 | And it was where you had to service the event loop
00:29:54.440 | and then go do things.
00:29:56.180 | Respond to the network, lay out some HTML,
00:29:58.600 | render it, turn widths into heights
00:30:01.100 | by filling containers, boxes,
00:30:03.180 | the early, what became the CSS box model.
00:30:06.060 | And run scripts to make the thing livelier,
00:30:09.580 | respond to user input.
00:30:11.340 | And all that event driven programming
00:30:14.180 | was in part like HyperCard
00:30:16.060 | because HyperCard had this on event name syntax.
00:30:19.420 | And so that's why you have in JavaScript on click
00:30:21.640 | run together as the name of the event handler.
00:30:24.080 | And there's some funny ones on mouse over and on mouse out.
00:30:27.060 | People still complain about those.
00:30:28.180 | But there are many more events now
00:30:30.460 | over the years standardized.
00:30:31.580 | But it was a mix of event driven,
00:30:33.940 | single threaded programming
00:30:34.900 | because it had to run in the main thread of the browser
00:30:38.140 | where the action is.
00:30:38.980 | And Java never got there,
00:30:40.660 | which meant Java could not interact easily
00:30:42.620 | or quickly or in a nested way with the document,
00:30:46.680 | with the objects reflected from the HTML document,
00:30:49.140 | with the tables and forms and so on.
00:30:51.180 | And that is one of the reasons I think JavaScript survived
00:30:54.460 | and Java kind of died.
00:30:55.300 | Java was in this plugin prison.
00:30:56.900 | It essentially was confined to a rectangle,
00:30:58.700 | the app with rectangle.
00:30:59.860 | And while we even built a next year,
00:31:02.660 | Nick Thompson, a friend from SGI,
00:31:04.820 | who was an intern grad student at CMU at the time,
00:31:08.580 | built the first version of Live Connect
00:31:10.220 | to glue Java and JavaScript together
00:31:12.580 | to deliver on that vision where you do have commerce
00:31:14.620 | between the data types in the heap.
00:31:16.780 | - Did it work?
00:31:18.820 | - It worked, but Java was in charge.
00:31:21.220 | JavaScript was in charge
00:31:22.180 | and Java was just these components, these helper.
00:31:24.380 | - You might as well do everything in JavaScript.
00:31:25.900 | - What happened over time.
00:31:26.740 | It's like an evolutionary filter.
00:31:27.940 | It just kind of, who needs the plugin?
00:31:29.580 | And in fact, Sun mismanaged Java as a plugin.
00:31:33.020 | They thought, oh, Netscape was giving us
00:31:35.500 | the distribution vehicle and we don't care
00:31:37.700 | about the browser, it's just about getting Java out there.
00:31:39.700 | And that was a big miscalculation.
00:31:41.220 | They then tried, because Microsoft's killing Netscape
00:31:43.820 | after a few years, they tried getting into Microsoft.
00:31:46.140 | And you may remember there was a Sun-Microsoft deal
00:31:48.500 | which famously blew up.
00:31:50.660 | And Microsoft kicked Java out of Windows.
00:31:54.820 | And that's when they really pulled the trigger.
00:31:56.420 | I think they already evaluated it and liked it
00:31:58.140 | on Anders Helsberg's .NET and C#
00:32:01.740 | and decided we're gonna just not have Java.
00:32:04.620 | We don't want any of that Sun stuff.
00:32:06.460 | We don't want the patent risk.
00:32:07.540 | We don't want, I'm not sure what the fights were about.
00:32:10.100 | There was some patent angle to it, I think.
00:32:12.300 | And up till then, Microsoft had been using Java components
00:32:16.940 | like in Outlook Web Access, which had a lot of JavaScript
00:32:20.820 | to be a Hotmail-like user interface.
00:32:23.100 | They had to call the mail server through HTTP
00:32:27.740 | and they used a Java object to do this.
00:32:31.340 | And when they gave the boot to Sun,
00:32:33.820 | they suddenly other, the left-hand gave the boot
00:32:37.260 | and the right-hand said, "We better do something else
00:32:39.140 | in Outlook Web Access.
00:32:40.060 | What are we gonna do?"
00:32:40.900 | And they said, "Let's just add an ActiveX component,"
00:32:43.620 | which is their own native way
00:32:45.380 | of embedding things in languages.
00:32:46.900 | And we'll make it, it'll be what became XML HTTP request,
00:32:51.980 | which is now a web standard for calling asynchronously.
00:32:55.100 | And it's been replaced by the Fetch API
00:32:57.060 | in HTML5 or HTML living document.
00:32:59.500 | But this whole lineage goes back
00:33:01.100 | to Java being successfully the loser and getting kicked out.
00:33:05.100 | And after Microsoft kicked it out, it was a plugin
00:33:07.680 | and you would find it required for like smart card banking
00:33:11.020 | in the Nordic countries where that was mandated by law
00:33:14.700 | but really didn't get used much.
00:33:16.380 | Or there were pilots who used it for flight information.
00:33:21.560 | But Flash, which Netscape could have bought
00:33:24.180 | but unfortunately didn't.
00:33:25.540 | - Unfortunately didn't?
00:33:26.380 | - Yeah, we would have screwed it up.
00:33:28.100 | - What year are we talking about with Flash?
00:33:29.540 | - I think after the IPO, so it was probably late '95.
00:33:32.180 | - Flash was around, was it Adobe?
00:33:34.140 | No, it wasn't.
00:33:34.980 | - No, it was called Future Splash
00:33:36.380 | and it was these brothers, Jonathan Gay,
00:33:38.700 | I think his name was.
00:33:39.540 | He came knocking and the marketing guy at Netscape
00:33:43.540 | who was screening the technology partners
00:33:45.820 | or wannabe acquisitions was brutal
00:33:47.780 | and just everybody wanted to get in on the Netscape
00:33:50.300 | stock gravy train and he sent them packing
00:33:52.480 | and they ended up selling to Macromedia
00:33:55.120 | and Macromedia was where Flash was created.
00:33:57.360 | And the good thing about Macromedia was it was a tool company
00:34:02.000 | so it invested in the best ideas, I think,
00:34:05.800 | which are still somewhat lost to us of Flash.
00:34:08.120 | The timeline, animation is sort of an immutable function
00:34:12.500 | over time.
00:34:13.560 | - They had the tooling around that too,
00:34:14.920 | like the Dreamweaver, there's a Flash--
00:34:17.240 | - Flash Director, there were a bunch of them.
00:34:18.840 | - Yeah, I mean, yeah, that was a great--
00:34:20.880 | - Flash Builder was one of the last ones.
00:34:22.800 | These tools were used by real artists
00:34:25.400 | and special effects people and designers.
00:34:27.440 | All the restaurant websites around 2005 were done in Flash
00:34:30.880 | which was, we were trying to do HTML5 at the same time
00:34:34.080 | that was the Firefox era.
00:34:35.080 | We were trying to make the web capable enough
00:34:37.640 | you didn't need Flash but if you recall,
00:34:39.400 | you go to a restaurant and it's like,
00:34:41.080 | this is kind of like a game or something.
00:34:42.400 | It's like a Flash, all the font looks small.
00:34:44.640 | - You didn't like Flash from the beginning.
00:34:45.920 | You're like, this doesn't feel right.
00:34:47.800 | - Not really, I actually admire Flash's technology
00:34:50.040 | and I'm pretty pragmatic about these things
00:34:51.740 | and I realized that it doesn't matter
00:34:54.880 | if you're dealt a bad hand like JavaScript was a rush job
00:34:58.320 | or if you have Flash as a plugin
00:35:00.280 | and you can invest in the tools and make it pretty good.
00:35:03.680 | You should make it better for your users
00:35:05.760 | and grow it as best you can.
00:35:07.040 | And what happened with the browser
00:35:08.760 | due to Microsoft's monopoly abuse
00:35:11.080 | for which they were convicted and even after that
00:35:15.100 | until I think Firefox and then Chrome
00:35:17.480 | was people kept saying, oh, the web can't do X,
00:35:19.960 | it can't do Y.
00:35:21.280 | We'll have to have a plugin.
00:35:22.280 | We'll have to have a new approach.
00:35:23.720 | We'll clean the slate and have a new web
00:35:26.900 | and everyone who said that failed
00:35:29.000 | and the reason they failed is because there's too much value
00:35:31.740 | in the web, this huge network
00:35:34.120 | and the worse is better principle
00:35:35.760 | means that you can not only start bad
00:35:37.900 | which they all sneer at but get on first
00:35:40.880 | and get wide distribution, get sort of evolutionary advantage
00:35:44.560 | and priority of place but you can also improve it over time.
00:35:49.360 | And so if you're gonna improve Flash
00:35:51.120 | and for some reason Flash is now out of favor,
00:35:53.040 | Steve Jobs said you can't have Flash on the iPhone.
00:35:55.040 | That was probably the death knell.
00:35:56.760 | Put your energy into JavaScript and that happened, right?
00:35:58.880 | So we did things at Mozilla with Adobe to improve
00:36:02.440 | which bought my Macromedia to improve Flash
00:36:04.880 | and to improve the version of JavaScript that was in Flash.
00:36:07.560 | We tried to standardize that.
00:36:09.040 | - Oh, that's right.
00:36:09.880 | - I'm getting ahead of myself.
00:36:10.720 | - You can program Flash. - ES4, yeah.
00:36:12.040 | - That's right.
00:36:13.200 | Can we just rewind to the magical,
00:36:15.200 | like it's a special moment in the history
00:36:18.600 | of all of computing.
00:36:20.200 | We'll talk about it later but it's arguable,
00:36:22.880 | it's possible that the entirety of the world
00:36:25.320 | will run in JavaScript at some point.
00:36:27.280 | So it's like those days, it would be interesting
00:36:31.280 | if you could just describe actually zooming in
00:36:34.800 | on how the cake was baked from the several days
00:36:39.800 | that you were working on it, what was on your mind,
00:36:43.360 | how much coffee were you drinking,
00:36:45.400 | were you nervous, freaking out?
00:36:47.360 | - I'll try to remember it.
00:36:48.360 | I mean, you're right, there were these pregnant moments
00:36:50.240 | you see in hindsight, maybe they're overrated
00:36:52.240 | but like Hegel sees Napoleon on horseback at Jena
00:36:55.800 | and says, "There's the world spirit on horse."
00:36:59.240 | And I knew that there was a chance to do it, Mark knew,
00:37:05.080 | and he was my executive sponsor
00:37:08.000 | and he was the one sort of brainstorming
00:37:10.840 | how the JavaScript should be right there in the page.
00:37:13.400 | That was important for him to say that
00:37:14.800 | 'cause I thought so too but a lot of people were like,
00:37:17.320 | "Oh, you can't write programming language
00:37:18.680 | "in the middle of the markup."
00:37:20.120 | And indeed there are problems, if you did it naively,
00:37:22.000 | you'd see the code laid out as like random gibberish.
00:37:25.340 | So I had to figure out how to hide that,
00:37:26.640 | that was a challenge.
00:37:28.160 | - Is that a breakthrough idea?
00:37:29.840 | I mean, so you and Mark thinking about this idea
00:37:32.600 | that you just inject code in the middle of the markup.
00:37:36.160 | - Of the webpage, yeah, it was considered kind of heretical.
00:37:38.040 | There was an SGML guru, I forget his name,
00:37:40.160 | but he corresponded with me and at first he was angry.
00:37:42.120 | He's like, "You should have used a marked section,
00:37:44.680 | "why didn't you use a marked section?"
00:37:45.960 | And I said, "Well, SGML marked sections
00:37:47.680 | "are not part of HTML by the way,
00:37:48.900 | "and they're not supported in the browser."
00:37:50.640 | And so I did some hack that was equivalent
00:37:52.560 | and over time you could do the proper SGML thing.
00:37:55.320 | But eventually he came around and it was again
00:37:58.240 | sort of evolutionary necessity,
00:37:59.680 | it was almost like introgression,
00:38:00.880 | like the idea which Lin Margulies I think helped get across
00:38:07.000 | that we have to consider mutualism biology
00:38:10.640 | that maybe mitochondria were ancient prokaryotes
00:38:14.080 | that got into the cell and became beneficial.
00:38:17.400 | Somehow the same sort of thinking applies,
00:38:21.200 | you have to embed JavaScript in HTML.
00:38:23.040 | It's gonna be a good virus.
00:38:24.480 | - It won't hurt you.
00:38:25.320 | - So the code becomes data in the sense
00:38:27.400 | it just gets carried along.
00:38:30.040 | But is there the side of the,
00:38:32.760 | so you were focusing on the Netscape at that time,
00:38:35.080 | doesn't the browser have to support,
00:38:37.080 | interpret correctly this mix of HTML and whatever code?
00:38:41.440 | - I had to hide it from old browsers including Netscape 1.1
00:38:43.800 | which was predominant then.
00:38:45.140 | So I used an HTML comment,
00:38:48.000 | but inside the container that comment lived in,
00:38:50.360 | the script tag, which is a new element,
00:38:51.980 | I could make different semantics in Netscape 2
00:38:54.640 | where those HTML comment delimiters
00:38:57.040 | instead of being multi-line brackets
00:38:58.520 | became one line or essentially one line.
00:39:00.680 | - So you wrote, so JavaScript was written,
00:39:02.560 | the programming language was written as a comment.
00:39:05.040 | - Yeah, comment for old browsers
00:39:06.120 | and a set of brackets that were ignored
00:39:08.800 | with real code for new.
00:39:10.120 | And it was this two-way comment hiding hack, as I called it,
00:39:13.480 | that was absolutely necessary for us to get off the ground.
00:39:15.720 | We couldn't have bootstrapped JavaScript without it.
00:39:17.680 | We didn't have scripts that were loaded
00:39:19.480 | from a separate file.
00:39:20.320 | The only scripts in Netscape 2 were inline in the document.
00:39:22.920 | - What were the challenges here?
00:39:24.840 | Like what, you know, typing,
00:39:27.420 | what were the choices you were thinking about?
00:39:30.200 | - Garbage collection. - Was garbage collection.
00:39:31.640 | - I didn't have time to write a garbage collector,
00:39:33.000 | so I just, I didn't at first.
00:39:34.680 | So the thing was using essentially arenas
00:39:36.920 | or what GNU calls obj pools
00:39:39.160 | and just would run out of memory eventually.
00:39:41.680 | And I added reference counting in a hurry
00:39:43.560 | after the 10 days in which I hacked.
00:39:45.360 | So after I was in the server team doing HTTP 1.1
00:39:48.120 | and thinking about the language,
00:39:49.640 | I finally got transferred to the client team in early May.
00:39:52.320 | And that's when I, you know, I got the go sign from Mark
00:39:55.280 | and it was like, we can't wait
00:39:57.280 | because people inside Netscape are doubting,
00:39:59.360 | even people inside Sun are definitely doubting.
00:40:01.880 | Bill Joy was the champion, but he was like alone in that
00:40:04.960 | in seeing there was a role for JavaScript
00:40:07.240 | as the, as I call it, the sidekick language,
00:40:10.560 | robbing the boy hostage.
00:40:11.960 | (laughing)
00:40:13.080 | Frank Miller put it in the Dark Knight Returns
00:40:16.360 | that there was this silly little language
00:40:18.640 | that would be the glue language
00:40:19.480 | and it could become important over time.
00:40:20.960 | And you were better off having that complementarity,
00:40:23.880 | that pairing of languages,
00:40:25.120 | just like Microsoft stacked it
00:40:26.960 | with Visual C++ and Visual Basic.
00:40:28.880 | - So what was the big moment of I'm done?
00:40:33.120 | - So I had to do a demo.
00:40:34.320 | I forget the dates.
00:40:35.480 | I think I, for a history of programming languages paper
00:40:38.680 | that Alan Weissbrock did with my help,
00:40:40.840 | he did a lot of the writing.
00:40:42.720 | I think it was the 10 days from like Thursday evening
00:40:47.440 | through to the following weeks, you know,
00:40:50.800 | the whole of that week and then into the Monday.
00:40:52.440 | - Did you get sleep?
00:40:53.280 | - Not, not enough.
00:40:54.400 | And I was really going fast
00:40:56.280 | because I'd already used a lot of C compiler
00:41:00.080 | and front-end compiler knowledge
00:41:02.320 | that I'd gained from undergraduate school.
00:41:04.680 | When I started getting into computing
00:41:06.560 | as a renegade physics major,
00:41:10.040 | people were formalizing more efficient bottom-up grammars,
00:41:14.640 | parsers for bottom-up languages.
00:41:17.040 | Really, LALR1 was the big thing.
00:41:19.520 | And I studied all this and learned how to parse them.
00:41:22.440 | And in the end, if you're doing C languages,
00:41:25.100 | you often do what Dennis Ritchie did anyway,
00:41:28.640 | which is a recursive descent parser.
00:41:31.280 | You can hand code it.
00:41:32.200 | And I did that for JavaScript in a blazing hurry.
00:41:36.280 | Mostly got it right.
00:41:37.360 | Didn't have precedence inversion problems or other bugs,
00:41:40.160 | but I copied a lot from Java and C.
00:41:43.160 | And I tried to keep things simple.
00:41:45.240 | Like the equality operator in those 10 days sprint
00:41:49.400 | between two objects of different dynamic type said,
00:41:52.280 | "No, they're not equal.
00:41:53.120 | Their types are different."
00:41:54.320 | And then after that, I had internal early adopters
00:41:57.660 | and they were using JavaScript to match a number
00:42:01.260 | against a database field that had been stringized.
00:42:03.920 | And they said, "Oh, can't we just have implicit conversion?"
00:42:05.920 | And like an idiot, I agreed.
00:42:07.700 | I gave them what they wanted.
00:42:08.620 | I was trying to please them and get adoption.
00:42:10.640 | And that broke what equivalence relation nature
00:42:15.640 | there was to the double equal.
00:42:19.600 | There's some edge cases with not a number
00:42:22.360 | that break that at two.
00:42:23.320 | But it really broke it.
00:42:25.040 | Having implicit conversions in the operator
00:42:26.960 | is something that people still roast me over.
00:42:29.320 | - So let's talk about two things.
00:42:31.720 | One, it sounds like the comparison operator,
00:42:34.280 | the equality operator is the thing that you regret.
00:42:38.760 | So maybe can you--
00:42:39.600 | - Making it sloppy.
00:42:40.600 | - Making it sloppy.
00:42:41.440 | So what is the biggest thing you regret in those 10 days?
00:42:45.200 | And what is the biggest thing you're proud of?
00:42:47.480 | - So that making it sloppy came after the 10 days.
00:42:49.680 | And my lesson there, which I've tweeted is,
00:42:51.880 | when people come to you saying,
00:42:53.080 | "Can you please make it sloppy or add this cute feature?"
00:42:56.080 | The answer should be no.
00:42:57.640 | And I should have known that 'cause I think Niklaus Wirth,
00:43:00.120 | one of my heroes, said,
00:43:01.120 | "The essence of design is leaving things out."
00:43:03.640 | But during the 10 days, I also, like I said,
00:43:06.180 | I was in such a hurry, I left out garbage collection.
00:43:08.560 | Came back to haunt me,
00:43:09.400 | but I got reference counting in in time
00:43:11.240 | that people weren't running out of memory right away
00:43:14.400 | on long-lived JavaScript.
00:43:16.080 | - Wait, what happens when you don't have
00:43:17.000 | garbage collection and you have objects?
00:43:18.520 | - Well, you just run out of memory.
00:43:20.160 | (Lex laughs)
00:43:21.000 | And you know, at first, you write a short script
00:43:24.120 | and the page doesn't last long or it doesn't do a lot,
00:43:25.920 | and it's okay.
00:43:26.740 | - Oh, I see, yeah, yeah, yeah.
00:43:27.580 | - But if you're writing a game or something
00:43:28.600 | and you're doing event-based allocation,
00:43:30.600 | you run out of memory.
00:43:31.640 | And this was noticed in the summer of 1995,
00:43:34.320 | and people were like, "What's going on?"
00:43:35.560 | I was, "Oh yeah, I better go back and do reference counting."
00:43:38.600 | And then the problem with reference counting is
00:43:40.200 | you're writing the language in the runtime in C,
00:43:43.160 | an unsafe language, and if you're reference counting
00:43:45.760 | and you overflow the counter, you mismanage it
00:43:48.060 | so it goes high, it gets stuck high,
00:43:49.600 | you leak memory again and you run out.
00:43:51.560 | If you underflow it, you pre-memory that's still in use.
00:43:56.200 | And even then, we knew what all the security hackers
00:44:00.120 | came to know, that you therefore have
00:44:02.600 | potentially a remote code execution vulnerability.
00:44:05.840 | 'Cause this was before things like
00:44:08.120 | non-executable heap memory and
00:44:11.120 | stack defenses against taking over memory.
00:44:14.800 | So if you can, from the remote side,
00:44:17.780 | write some HTML and JavaScript that just happens
00:44:19.900 | to exploit a bug in memory safety,
00:44:21.820 | like it causes JavaScript to underflow a reference counter,
00:44:24.960 | and the script still has its hands on that object
00:44:27.560 | and it's trying to call a method on it,
00:44:29.040 | and there's some kind of lookup function table
00:44:30.680 | in the object, but you've managed to stuff the heap
00:44:34.620 | with strings that forwards their own lookalike
00:44:37.160 | for the function table, you can call some other code.
00:44:41.360 | And this was a problem right away.
00:44:43.400 | So security, JavaScript upped the ante.
00:44:46.280 | Java had this problem too, but in its own VM.
00:44:48.840 | And it just was a separate headache for Sun to worry about.
00:44:53.440 | We had this problem in Netscape right away.
00:44:55.280 | So Netscape 2 came out after my 10 days,
00:44:58.340 | and after these follow-on work to embed JavaScript
00:45:02.640 | better in the browser and to add garbage collection
00:45:05.120 | through reference counting, really,
00:45:06.320 | I call it reference counting, and get it shipped.
00:45:09.660 | We had a bunch of dot releases where we fixed
00:45:11.400 | security bugs like maniacs. (laughs)
00:45:13.560 | - But what is the thing you're,
00:45:16.000 | you know, when you sit back on a porch
00:45:18.360 | and just look out into the sunset,
00:45:20.000 | what are you most proud of from those 10 days?
00:45:21.960 | - I think the first class functions, Sean.
00:45:23.560 | I think, especially since Java didn't have it
00:45:25.640 | and it was somewhat unusual.
00:45:27.600 | - Scheme made it in somehow at the end of the day.
00:45:30.640 | - In spirit, in spirit.
00:45:31.480 | I mean, people complain because Scheme has,
00:45:33.440 | you know, minimalism.
00:45:34.840 | It has six or seven special forms.
00:45:37.000 | It has hygienic macros.
00:45:38.720 | It has call CC.
00:45:39.680 | It has sort of a beautiful, complete set of forms
00:45:44.680 | to make the Lambda calculus pleasant to use in practice.
00:45:48.640 | And JavaScript is, you know,
00:45:51.640 | kind of a multi-paradigm or Schembolic. (laughs)
00:45:56.120 | - Just on a small tangent, you mentioned Mark Andreessen.
00:45:59.400 | It sounds like, and Bill Joy, but staying on Mark,
00:46:03.400 | it sounds like he had an impact on you
00:46:06.520 | in that he sort of believed in what you were doing there.
00:46:09.120 | Can you talk about like what role Mark had in your life?
00:46:11.920 | - Yeah, we would meet at the Pinsla Creamery
00:46:15.880 | in downtown Palo Alto.
00:46:17.720 | And Mark was just fresh out of, you know, grad school
00:46:19.960 | or whatever he was doing.
00:46:20.880 | And he was a big dude and he got fitter later.
00:46:25.280 | He had hair.
00:46:26.120 | He would order giant milkshakes and burgers.
00:46:28.800 | And we would meet there and brainstorm about what to do.
00:46:31.040 | And it was very direct because we didn't have much time.
00:46:34.020 | Sort of, we didn't talk about it,
00:46:36.280 | but the implication was Microsoft was coming after us.
00:46:39.080 | Mark was saying things boldly, pre-IPO,
00:46:41.760 | like Netscape plus Java kills Windows, right?
00:46:44.320 | - Wow, it's ambitious.
00:46:45.640 | - Make a browser programmable,
00:46:46.840 | it becomes the new runtime for programs.
00:46:49.400 | It's the meta OS or it's the replacement OS.
00:46:52.000 | - But he still saw value in JavaScript.
00:46:54.280 | - Yes, even though he was saying that
00:46:56.000 | and Java was the big name, hence the trademark license,
00:46:59.800 | he saw JavaScript as important.
00:47:01.360 | And he even thought, what if we got,
00:47:03.720 | I told this in other interviews, I can say it,
00:47:05.040 | he thought, what if we had my friend Kip Hickman,
00:47:07.660 | who'd been at Netscape from the beginning
00:47:09.520 | and who was a kernel hacker at SGI when I joined,
00:47:13.080 | he started writing his own JVM
00:47:14.880 | before we consummated the Sun deal
00:47:16.400 | and got our hands on their code.
00:47:17.960 | And the Java compiler, Java C,
00:47:20.480 | which Arthur Van Hoff had written, very nice code,
00:47:23.200 | was all written in Java, it was self-hosted
00:47:24.960 | or so-called bootstrap.
00:47:26.480 | And so we could use that as soon as Kip's Java VM
00:47:29.320 | could run the bytecode from the Sun JVM
00:47:34.320 | running the self-hosted compiler to emit the bytecode.
00:47:37.520 | So once we could bootstrap into Kip's VM,
00:47:39.420 | we wouldn't need Sun.
00:47:40.300 | And Mark was like, well, maybe we can just ditch Sun,
00:47:44.380 | we'll have Kip's Java VM, we'll have your JavaScript VM.
00:47:47.340 | Now we need graphics.
00:47:48.220 | So Mark was thinking far ahead
00:47:49.600 | because he knew you could do things with HTML and images,
00:47:53.380 | but at some point you really want--
00:47:54.900 | - Like dynamo graphics or three-dimensional?
00:47:57.340 | - Like even SGI had already started its downfall
00:47:59.920 | because the first four VLSI team there
00:48:02.940 | had gone off to do 3DFX and all these other companies
00:48:05.380 | that made the graphics card on your PC, right?
00:48:07.480 | Doom was big and Quake.
00:48:09.360 | And so we were all playing Quake.
00:48:10.660 | I was old, so I was terrible.
00:48:12.860 | But why not put that graphics capability on the web?
00:48:16.360 | And in fact, it finally happened at Mozilla
00:48:18.680 | with Firefox era with Vlad Vukicevic
00:48:21.480 | taking OpenGL ES and reflecting it as WebGL.
00:48:24.380 | But OpenGL ES is the mobile version of OpenGL,
00:48:27.960 | which is a standard based on SGI GL.
00:48:30.300 | So this whole lineage of graphics libraries
00:48:32.760 | or really graphics languages for what became the GPU.
00:48:36.260 | And Mark was thinking ahead.
00:48:37.300 | He's like, "We need graphics too."
00:48:38.540 | And I thought, "Okay, I can try to get somebody
00:48:40.300 | I knew at SGI, but he's a grad student at MIT.
00:48:42.860 | He was studying under Barbara Liskov.
00:48:44.500 | He laughed when he heard about this later.
00:48:46.140 | Andrew Myers, he's at Cornell, long time.
00:48:48.420 | I think he's a full professor.
00:48:50.100 | And Mark said, "Great, we'll get him."
00:48:51.740 | And I'm like, "I'm not sure he's gonna come.
00:48:53.140 | We'll throw money, we'll stock options."
00:48:55.260 | We never did it.
00:48:56.120 | And they did the Sun deal.
00:48:57.580 | So Kip Nobly put aside his own JVM
00:49:00.900 | and we used the Sun JVM.
00:49:02.860 | So that was an ambitious period.
00:49:03.980 | And Mark was very generative because he was pushing hard.
00:49:06.620 | He was ambitious and he wanted to have Netscape
00:49:11.180 | possibly be in control of the ball.
00:49:13.660 | - Maybe you can speak to this dance
00:49:16.860 | of Netscape versus Internet Explorer.
00:49:20.500 | You've thrown some loving words towards Microsoft
00:49:25.500 | throughout this conversation,
00:49:26.700 | but that's a theme with, I mean,
00:49:28.440 | Steve Jobs had a similar sort of commentary.
00:49:31.260 | From a big sort of philosophical principle perspective,
00:49:34.500 | can you comment on the approach that Microsoft has taken
00:49:37.780 | with Internet Explorer from IE1 to Edge today?
00:49:42.100 | Is there something that you see as valuable
00:49:45.380 | that they're doing in the occasional copying
00:49:48.380 | and that kind of stuff?
00:49:49.580 | Or is the world worse off because Internet Explorer exists?
00:49:54.580 | - So I'm gonna segment this into historical eras
00:49:57.620 | because I think Microsofters today with Satya
00:49:59.560 | is quite a different company
00:50:00.620 | and what they're doing with Edge is different.
00:50:02.340 | But back then, Gates, aggressive character,
00:50:06.160 | not really original in my view, not an originator.
00:50:09.660 | Steve Jobs famously said once, "He doesn't have any taste."
00:50:12.420 | And I don't mean this in a small way.
00:50:13.780 | He has no taste.
00:50:15.060 | You can see this.
00:50:16.540 | Apple at the time had beautiful typography
00:50:19.340 | and ligatures and kerning and the fonts looked great.
00:50:22.580 | And Windows had this sort of ugly system font
00:50:25.220 | that was carefully aligned with pixels
00:50:26.940 | so it didn't get anti-aliased.
00:50:28.660 | - What is it?
00:50:29.500 | I'm sorry to keep interrupting.
00:50:30.320 | Why was Internet Explorer winning
00:50:32.380 | throughout the history of these competitions?
00:50:34.300 | - Distribution.
00:50:35.220 | Distribution matters more than anything.
00:50:36.620 | And this is why even now we're seeing
00:50:39.820 | in the browser wars, Edge doing better
00:50:41.660 | because it's being foisted on people of Windows.
00:50:43.460 | We have Windows 10 boxes at home.
00:50:45.220 | We have some Windows 7 boxes or laptops we keep running too
00:50:48.220 | because we don't connect them to the internet generally.
00:50:50.860 | But once you have that operating system to hold,
00:50:56.140 | you can force Edge.
00:50:57.820 | And Apple did it with Safari too.
00:50:59.500 | It's not unique to Microsoft.
00:51:01.340 | - That's sad.
00:51:02.180 | - But distribution matters.
00:51:03.660 | And that's why I think IE was going to win.
00:51:07.060 | That's why everybody at Netscape felt we're doomed.
00:51:09.580 | This was something Michael Toy and Jamie Woodson were doomed.
00:51:12.900 | But for a while there, we had a chance
00:51:14.700 | and we innovated in Netscape too.
00:51:16.060 | We did a big platform push.
00:51:17.540 | Java and JavaScript and plugins, more plugins,
00:51:21.740 | and more HTML table features.
00:51:25.140 | And really started making a pre-arable stack
00:51:28.700 | out of what were pretty static web languages.
00:51:30.820 | And even in the beta releases of Netscape,
00:51:33.220 | two people were using JavaScript
00:51:34.460 | to build what you would call single page applications
00:51:36.620 | like Gmail.
00:51:37.740 | And they were using JavaScript locally to compute things
00:51:40.380 | and to call the server on a hidden frame in the background.
00:51:43.660 | So it was prefiguring a lot of what came later as AJAX
00:51:46.860 | or dynamic JavaScript, dynamic HTML.
00:51:48.620 | - So people saw that, I mean--
00:51:49.740 | - Even then they saw it, yeah.
00:51:50.900 | - That's kind of, I don't know, from my perspective,
00:51:53.820 | that seems quite brilliant.
00:51:54.940 | It seems like really innovative
00:51:56.580 | that you would have code run in the browser.
00:51:59.220 | - It did impress me with something,
00:52:01.380 | which I learned later about from Eric von Hippel of MIT,
00:52:04.020 | which is user innovation networks, lead user effects.
00:52:07.260 | That throwing out JavaScript,
00:52:09.180 | even though we weren't doing open source,
00:52:10.460 | we were doing beta releases early
00:52:12.300 | and permissively with Netscape.
00:52:14.340 | Getting early developer feedback, absolutely critical.
00:52:17.180 | I loved it.
00:52:18.020 | I did some of that with SGI,
00:52:19.140 | with some of the products I worked on,
00:52:20.260 | but it really came to the fore in Netscape.
00:52:21.860 | And that culminated in Mozilla,
00:52:23.740 | where you're dealing with developers all the time
00:52:25.700 | and early adopters, lead users.
00:52:27.200 | But the lead users helped improve JavaScript,
00:52:29.800 | even in those last few betas,
00:52:31.540 | where I could hardly change things.
00:52:32.620 | I was under pretty rigid change control.
00:52:34.540 | - So we're talking about just a small collection
00:52:36.220 | of individuals that are just like up front--
00:52:38.260 | - A guy named Bill Dortch,
00:52:39.380 | you can find his work in the web archive,
00:52:40.900 | still from 1996.
00:52:41.940 | It's a single page application.
00:52:43.240 | It's an artist gallery of mountain art.
00:52:46.300 | - He used JavaScript.
00:52:47.140 | - It doesn't quite work.
00:52:47.960 | He uses JavaScript locally.
00:52:48.800 | He uses a local database.
00:52:50.540 | What you would think of now is JSON,
00:52:52.180 | but it's all pure JavaScript code,
00:52:54.260 | a bunch of objects being constructed.
00:52:55.820 | - That's so cool.
00:52:57.460 | So how is, if you can do sort of a big,
00:53:00.780 | sweeping progress of JavaScript,
00:53:03.220 | how has JavaScript changed over the years,
00:53:05.380 | in your view, from those early 10 days,
00:53:07.320 | with a quick addition of garbage collection
00:53:09.460 | and fixes around security?
00:53:11.140 | How has this evolution, that now it's taken over the world?
00:53:14.140 | - It's been a bumpy ride,
00:53:16.340 | because the standards body got shut down after Microsoft,
00:53:19.900 | I think, took over the web,
00:53:21.540 | and then felt punished by the US v. Microsoft
00:53:24.220 | antitrust case.
00:53:25.380 | - Can you speak to the standard body?
00:53:27.380 | - That was a fun ride, too,
00:53:28.260 | because Netscape had taken the lead with the web
00:53:32.300 | and HTML innovations like frames and framesets tables.
00:53:37.100 | And the W3C was sort of off,
00:53:38.740 | even then, sort of in SGML land,
00:53:40.460 | heading toward XML la-la land.
00:53:43.100 | I'm gonna be a little harsh on it.
00:53:44.340 | - What's SGML?
00:53:45.180 | I'm sorry.
00:53:46.000 | - SGML was the precursor markup language to HTML,
00:53:48.900 | or it was sort of the more extensible
00:53:51.020 | standard generalized markup language.
00:53:54.140 | It was a-- - XML-like.
00:53:55.820 | - Pointy brackets, but it had all sorts of elaborate syntax
00:53:58.540 | for doing different semantics.
00:54:00.940 | And this is why I think TBL and others
00:54:03.780 | who wanted to do the semantic web
00:54:05.580 | then took XML forward.
00:54:08.340 | But they had this, or some of them anyway,
00:54:10.420 | had this strange idea that they could replace the web
00:54:12.340 | with XML, or that they would upgrade the web to be XML.
00:54:15.740 | And it couldn't be done.
00:54:17.260 | Worse is better had concrete meaning.
00:54:19.540 | The web was very forgiving of HTML,
00:54:22.660 | including sort of minor syntax errors
00:54:25.220 | that could be error corrected.
00:54:26.500 | Like error correction isn't generally done
00:54:28.180 | in programming languages because--
00:54:29.380 | - Right.
00:54:30.220 | That's another amazing thing about HTML,
00:54:31.860 | is like it's more like biology than programming.
00:54:34.820 | - Yeah, exactly.
00:54:36.100 | And so XML was, in its standard form,
00:54:40.060 | super strict and could never have admitted
00:54:42.580 | the kind of users who were committing these errors.
00:54:44.460 | And the funniest part was Microsoft said,
00:54:46.540 | "Hey, we're doing XML."
00:54:47.660 | But the way they put it in Internet Explorer
00:54:49.580 | under the default media type,
00:54:51.540 | put it through the HTML error corrector.
00:54:53.220 | (laughing)
00:54:54.060 | - Oh, wow.
00:54:55.020 | - So they kind of bastardized it
00:54:56.340 | to make it popular and usable and accessible.
00:54:58.620 | And so XML as a pure thing was never gonna take over.
00:55:03.620 | And W3C was kind of not fully functional
00:55:07.220 | because Netscape wasn't cooperating with them.
00:55:09.780 | We thought about where to take JavaScript
00:55:11.180 | and we realized, our standards guru, Carl Cargill,
00:55:13.980 | realized there was a European standards body
00:55:17.140 | that had already given Microsoft fits
00:55:18.820 | by standardizing parts of the Windows 3.1 API,
00:55:22.580 | which European governments insisted on.
00:55:24.020 | They said, "Microsoft, we can't use your operating system
00:55:26.180 | "without some standards."
00:55:27.620 | And Microsoft said, "Here's our docs."
00:55:29.660 | And the government said, "No, we need a European standard."
00:55:32.460 | So this body called
00:55:33.420 | the European Computer Manufacturers Association, ECMA,
00:55:37.500 | which eventually became global
00:55:38.580 | and became a proper noun instead of an acronym.
00:55:40.980 | - Right, it's just one capital E now
00:55:43.260 | with a lowercase CMA.
00:55:44.660 | - Right.
00:55:45.500 | And as one of the early Microsoft guys I met
00:55:47.580 | when we first convened a working group
00:55:50.260 | to talk about JavaScript said,
00:55:51.340 | "It sounds like a skin disease."
00:55:53.420 | - But it gave, I mean, maybe you'll speak to that,
00:55:56.140 | but it gave the name to JavaScript of ECMAScript.
00:55:58.980 | - That was the standard name
00:55:59.820 | because Java was a trademark of Suns.
00:56:02.820 | They were so aggressive,
00:56:03.700 | they were sending cease and desist letters
00:56:05.820 | to people whose middle European heritage
00:56:08.500 | meant their surname was Javanko
00:56:10.780 | and they called their website javanko.com
00:56:12.860 | and Sun would send them a letter saying,
00:56:14.580 | "You're using J-A-V-A at the start of your domain name.
00:56:16.700 | "You must cease and desist."
00:56:18.900 | - I love marketing more than anything else in this world.
00:56:22.020 | So ECMAScript and now is popularly named as ES plus version.
00:56:27.020 | - I would say people use JS more than anything.
00:56:29.860 | People still say JavaScript.
00:56:31.100 | JavaScript is in all the books.
00:56:32.380 | - So I mean, when you're referring to it,
00:56:33.700 | it's usually JavaScript
00:56:34.860 | and when you wanna refer to a version of JavaScript,
00:56:37.300 | you'll say ES6, ES5.
00:56:39.140 | - Yes, or now they've gone to years,
00:56:40.820 | which is kind of confusing
00:56:41.820 | 'cause it's an offset of 2009.
00:56:45.500 | ES6 is ES2016.
00:56:49.220 | - Yeah, it doesn't match the years perfectly.
00:56:52.700 | Yeah, so what were the choices made
00:56:55.660 | and how did JavaScript evolve here?
00:56:57.980 | - So we took this new standards body,
00:57:01.060 | which we thought sort of a proven record
00:57:04.340 | of standing up to Microsoft,
00:57:05.380 | but Microsoft sent a lot of people.
00:57:07.540 | They sent some people who were pretty good
00:57:10.540 | and then when they realized that I was there
00:57:12.940 | and Netscape was not gonna just bend over
00:57:15.220 | and do whatever they wanted,
00:57:16.380 | they sent somebody really good.
00:57:17.300 | He was a smart guy.
00:57:18.140 | He did a lot of the work on the first draft of the spec,
00:57:21.020 | Sean Katzenberger, he's left Microsoft.
00:57:22.780 | He even did what I sort of did.
00:57:25.260 | He told his bosses, stop bugging me to do other things.
00:57:27.980 | I'm focused on this
00:57:28.940 | 'cause it took a lot of focused work
00:57:30.580 | to create the first draft of the spec.
00:57:31.940 | And I was still holding,
00:57:33.540 | I was spending almost all the plates.
00:57:34.900 | I had like part-time help in certain areas
00:57:37.220 | and on the front end integrations,
00:57:38.740 | I had the front end guys.
00:57:40.100 | But I couldn't take as much time as Sean was
00:57:42.620 | to write the draft spec,
00:57:43.660 | but I had to participate
00:57:44.660 | because I was essentially helping write down
00:57:46.880 | what the language did.
00:57:48.020 | And in areas where we didn't like what it did
00:57:50.180 | and Microsoft didn't agree,
00:57:51.620 | we sometimes got away with slight changes.
00:57:54.580 | And that's the story of standards.
00:57:55.780 | You have different implementations
00:57:57.980 | and depending on their market power,
00:57:59.820 | they interoperate where you have agreement
00:58:01.820 | and where they don't,
00:58:02.780 | the dominant one usually sets the de facto standard.
00:58:05.900 | And then you should probably reflect that
00:58:07.500 | into the de jure standard.
00:58:09.340 | And this happened with JavaScript.
00:58:11.060 | Over time as Netscape went down and Microsoft went up,
00:58:14.140 | we did the first edition of the standard codified in 1997.
00:58:18.180 | In France, we had a trip to Nice,
00:58:20.540 | which was very memorable.
00:58:22.140 | - For any interesting reason or just because it's Nice?
00:58:24.540 | - And ECMA's European and IBM and others were there.
00:58:28.980 | Mike Kalashaw, an IBM fellow was a British.
00:58:31.340 | And the guy who ran ECMA at the time,
00:58:34.460 | Jan van den Bel was quite a raconteur
00:58:37.740 | and a very fun guy.
00:58:39.060 | And he had us out for the great,
00:58:41.540 | "Fui de mer," the bouillabaisse.
00:58:43.500 | - Was the standardization process beautiful or painful
00:58:46.140 | that those early days, you as a designer of the language?
00:58:48.500 | - It was painful because it was rushed.
00:58:50.140 | Now, Guy Steele was contributed by Sun.
00:58:52.420 | So even more than Sean,
00:58:53.620 | you had this giant brain, Guy Steele helping,
00:58:55.980 | bringing some of that scheme magic.
00:58:57.220 | He even brought Richard Gabriel for fun.
00:58:59.500 | Richard wrote the fourth clause of the ECMA standard,
00:59:02.900 | which was kind of an intro to what JavaScript's all about.
00:59:05.260 | So we had some really good people.
00:59:07.220 | And we didn't fight too much.
00:59:09.100 | There was some tension where I was fixing bugs
00:59:11.460 | and I was late to a meeting.
00:59:12.700 | And Sean Katzenberger of Microsoft was actually mad.
00:59:14.980 | Like, "Where is he? We need him."
00:59:16.580 | And when I got there,
00:59:18.620 | I saw that only he saw this sort of off by one bug
00:59:21.860 | and somewhere in the spec.
00:59:22.920 | And then I saw it too.
00:59:23.980 | And I said, "There's a fence post bug there."
00:59:25.260 | And then we kind of locked eyes
00:59:26.980 | and we realized we were on the same page.
00:59:28.460 | And we kind of, he wasn't mad anymore.
00:59:30.260 | - What were the features that are being struggled over
00:59:33.020 | and debated and thought about?
00:59:34.980 | - It was mainly writing down what worked
00:59:36.500 | and what we thought should work in the edge cases
00:59:38.420 | that didn't interoperate or that seemed wrong.
00:59:41.540 | But we were already laying the groundwork
00:59:43.100 | for the future editions that I was already implementing.
00:59:46.220 | I was still trying to lead the standard
00:59:48.100 | by using the dominant market power
00:59:50.100 | to write the code that actually shipped.
00:59:52.500 | So the de facto standard would lead the de jure standard.
00:59:54.740 | And I was putting in the missing function forms
00:59:58.220 | that I didn't have time for in the 10 days.
01:00:00.500 | - So this is the engineering mindset
01:00:02.180 | versus the theoretician.
01:00:03.500 | So you didn't want to create the perfect language,
01:00:05.120 | but one that was popular and shipped
01:00:06.940 | and all that kind of stuff.
01:00:07.780 | - And you could say there was,
01:00:08.620 | I was standing on the shoulders of giants.
01:00:09.940 | So there was a staged process where I had to hold back
01:00:12.500 | things that were well designed by others
01:00:15.220 | in other languages that I could imitate.
01:00:17.260 | But I couldn't do them all in the 10 days.
01:00:18.540 | So they came in in 1996 and '97.
01:00:22.820 | And they came into the third edition of the standard,
01:00:25.140 | which was finalized in 1999.
01:00:27.680 | But at that point, Netscape had been sold to AOL
01:00:30.460 | and was, which was a decent exit considering.
01:00:33.140 | And had previously been mercilessly crushed.
01:00:37.400 | Netscape was selling the browser along with server software
01:00:40.680 | that it had acquired after its IPO.
01:00:42.760 | And Microsoft was just underpricing it.
01:00:44.560 | So there was no way to compete with that.
01:00:47.480 | Microsoft was also making Internet Explorer
01:00:51.440 | the default browser in Windows,
01:00:53.140 | which is called tying in antitrust law.
01:00:55.560 | And they were doing even more brutal things.
01:00:57.140 | There's a famous investor, he did very well on Google.
01:01:00.340 | So he's a billionaire, Ram Shriram.
01:01:01.800 | He was sales guy or head of sales at Netscape.
01:01:04.680 | And he got off the phone looking ashen faced
01:01:07.920 | after Compaq called and said,
01:01:09.620 | "Microsoft just told us they're gonna pull
01:01:12.000 | "our Windows license if we ship Netscape
01:01:13.800 | "as the default browser."
01:01:15.080 | - Wow.
01:01:15.920 | So there is some bullying going on.
01:01:17.440 | - It was totally immaterial in the antitrust case.
01:01:19.720 | But JavaScript escaped into the standard setting
01:01:23.080 | where there was fairly good cooperation.
01:01:24.900 | Microsoft had a really good guy on it.
01:01:26.880 | And Guy Steele was there for a time.
01:01:29.440 | And there was some good work.
01:01:30.920 | But after the antitrust case and Netscape
01:01:35.200 | kind of dissolving into AOL
01:01:37.480 | and not really going anywhere quickly,
01:01:38.920 | Mozilla took years to really bring up,
01:01:40.940 | the standard froze.
01:01:43.400 | And by 2003, even though they'd been sort of noodling around
01:01:46.300 | with advanced versions, JavaScript 2,
01:01:48.880 | I'd given the keys to the kingdom
01:01:50.280 | to another MIT grad, Baltimore Horwatt.
01:01:53.040 | Very big brain, still at Google, I think.
01:01:54.880 | He won the Putnam in '86.
01:01:56.600 | So he's, yeah, very mathematical.
01:01:58.360 | - Legit.
01:01:59.600 | - He designed the successor language, JavaScript 2,
01:02:02.960 | but it only showed up in mutated form
01:02:06.600 | in Microsoft's ASP.NET server side.
01:02:09.560 | And it didn't last there.
01:02:11.120 | And it showed up in Flash.
01:02:12.320 | And that's what became ActionScript 3.
01:02:14.640 | - Ah, ActionScript.
01:02:15.960 | Interesting.
01:02:16.800 | And then Flash was declined.
01:02:18.720 | And so how did we arrive at ES6,
01:02:21.280 | where it's like, there's so many,
01:02:24.080 | where everyone, okay, there's this history of JavaScript
01:02:27.200 | that people were, it was just like, cool,
01:02:29.200 | when you're having beers to talk crap about JavaScript.
01:02:32.520 | Everyone loves to hate, like people who are married say,
01:02:35.280 | ah, marriage sucks, is they just wanna let off some steam,
01:02:38.880 | even though everyone uses the language.
01:02:40.880 | But ES6, it's become this,
01:02:43.480 | it fixed major pain points, I think.
01:02:49.200 | - It added things to the language
01:02:50.400 | and added something that was already ES5 strict mode,
01:02:53.600 | but made it implicit in class bodies and module bodies.
01:02:57.280 | It was a big jump, but it accumulated
01:02:59.480 | some of the ES4 designs that we'd done with Adobe
01:03:03.640 | for what we hoped would be the fourth edition of ECMAScript
01:03:07.680 | that were supposed to fold in some of these old JavaScript,
01:03:10.520 | two ideas that had come into ActionScript 3.
01:03:13.080 | So you look at the family tree and you see these forks,
01:03:15.240 | and the main ones are the ones that go into Adobe Flash,
01:03:20.240 | acquired from Acromedia,
01:03:22.040 | and the one that went into the server side
01:03:23.560 | of Microsoft's stack, which kind of died.
01:03:27.060 | And then trying to bring them back into the standard,
01:03:28.840 | and not quite succeeding, ES4 was mothballed.
01:03:32.240 | But all the good parts that everyone liked
01:03:34.300 | made it into ES6.
01:03:35.800 | And so that was a success.
01:03:37.000 | And I said earlier, I had the wrong year,
01:03:38.320 | I think it's 2015, so it's off by--
01:03:40.360 | - For ES6.
01:03:41.200 | - Yeah, it was done, finalized in 2015.
01:03:44.280 | It took a little longer than we hoped,
01:03:45.560 | but 'cause ES5 was 2009,
01:03:48.560 | and that was a smaller increment from ES3.
01:03:51.540 | We skipped four again, we mothballed it.
01:03:53.520 | And we had a split in the committee
01:03:55.480 | where some people said, ES4 is too big,
01:03:57.480 | we're gonna work on incremental improvements,
01:03:59.540 | no new syntax in particular, they promised.
01:04:02.580 | Not quite true, but they added a bunch of interesting APIs,
01:04:06.300 | Alan Weir-Sprock, my co-author of the Hubble paper.
01:04:09.880 | And he was at Microsoft at the time,
01:04:11.140 | I ended up hiring him at Mozilla,
01:04:12.300 | he wanted to get to Mozilla and keep doing
01:04:15.260 | the sort of editor job of the JavaScript standard,
01:04:19.660 | ECMAScript.
01:04:21.300 | And when we got ES6 done, it was a little late,
01:04:24.640 | 2015, and we switched to year numbers.
01:04:27.180 | So people still call it ES6, I call it ES6.
01:04:30.100 | But if you remember, off by nine, plus 2000.
01:04:33.100 | - Yeah, I mean, ES6 is such a big job.
01:04:35.780 | I mean, like you said, there's a thread
01:04:37.620 | that connects all of it, but ES6 is one
01:04:39.260 | that's like, became this language
01:04:41.100 | that almost feels ready to take over the world completely.
01:04:45.180 | - More programming in the large features,
01:04:46.660 | more features you need for larger teams.
01:04:49.380 | - Software engineering.
01:04:50.300 | - Microsoft did something smart too,
01:04:52.240 | Anders and company, Luke Hoban, who's left Microsoft,
01:04:56.240 | also did TypeScript.
01:04:57.800 | And they realized something, I think,
01:05:00.400 | that Gilad Brak has also popularized,
01:05:02.760 | and he was involved in Dart at Google.
01:05:05.720 | If you, don't worry about soundness in the type system,
01:05:08.840 | you don't try to enforce type checks
01:05:10.920 | at runtime in particular, just use it
01:05:12.280 | as sort of a warning system, a tool time type system,
01:05:15.040 | you can still have a lot of value for developers,
01:05:17.680 | especially in large projects.
01:05:19.280 | So TypeScript's been a roaring success for Microsoft.
01:05:21.240 | - What do you think about TypeScript?
01:05:24.120 | Is it adding confusion or is it ultimately beneficial?
01:05:27.360 | - I think it's beneficial.
01:05:28.200 | Now, it's technically a superset of JavaScript,
01:05:30.920 | so of course I love it.
01:05:32.080 | (laughs)
01:05:33.360 | The shortest JavaScript program
01:05:35.560 | is still a TypeScript program.
01:05:36.640 | Any JavaScript program is a TypeScript program,
01:05:38.520 | which is brilliant 'cause then you can start
01:05:40.020 | incrementally adding type annotations,
01:05:41.800 | getting warnings, learning how to use them.
01:05:44.440 | Microsoft's had to kind of look around corners
01:05:47.160 | at the standards body and guess how their version
01:05:49.920 | of modules or decorators should work.
01:05:52.480 | And the standards body then may change things a bit.
01:05:55.400 | So I think they're obligated with TypeScript
01:05:57.640 | either to carry their own version
01:05:59.320 | or to bring it back with incompatible changes
01:06:01.680 | towards the standard over time.
01:06:03.120 | And I think they've played generally fair there.
01:06:05.440 | There's some sentiment that,
01:06:06.480 | why don't they standardize TypeScript?
01:06:07.980 | Well, they've been clear they don't want to.
01:06:09.920 | They have a proprietary investment, it's valuable,
01:06:11.880 | they have control of the ball.
01:06:13.440 | And in some ways you can say the same thing
01:06:15.840 | to any of the other big companies in the standards body,
01:06:18.120 | why doesn't Google standardize its stuff?
01:06:20.600 | - So you think it'll continue being
01:06:22.280 | like a kind of a dance partner to JavaScript,
01:06:24.640 | to the base JavaScript?
01:06:25.880 | - There's a hope that at some point,
01:06:27.640 | if they keep reconverging it and the standard
01:06:29.800 | doesn't break them and goes in a good direction,
01:06:32.040 | we will get at least the annotation syntax
01:06:34.800 | and some semantics around them.
01:06:37.040 | Because when you're talking about type annotations,
01:06:39.020 | they're generally on parameters and return values
01:06:42.360 | and variable declarations, they're cast operators.
01:06:45.560 | You want that syntax to be reserved
01:06:47.280 | and you want it to work the same in all engines.
01:06:50.000 | And this is where ideas like GILAD's
01:06:51.560 | pluggable type systems might be good,
01:06:54.240 | though then you could create the same problem
01:06:55.840 | you have with Lisp and Scheme,
01:06:56.960 | where there's a bunch of macro libraries
01:06:58.560 | and they don't agree and you have conflicts between them.
01:07:01.720 | But pluggable type systems could be one way to standardize.
01:07:04.960 | - What do you think about the giant ecosystem
01:07:07.040 | of frameworks in JavaScript?
01:07:09.840 | It feels like, because, I mean,
01:07:12.840 | this is a side effect of how many people use JavaScript,
01:07:16.040 | a lot of entrepreneurial spirit,
01:07:18.960 | like create their own JavaScript frameworks.
01:07:22.320 | And they're actually awesome in all different ways.
01:07:27.280 | And this is an interesting question
01:07:31.200 | about almost like philosophically
01:07:33.200 | about biological system and evolution,
01:07:35.280 | all that kind of stuff.
01:07:36.160 | Do you see that as good or should it,
01:07:38.600 | should some of them die out quicker?
01:07:40.400 | - I think that maybe they should.
01:07:41.880 | Now jQuery was a very clever thing.
01:07:44.840 | John Resig made this library that was sort of query and do
01:07:47.600 | and blended sort of CSS selector syntax
01:07:50.000 | with JavaScript sort of object graph or DOM querying
01:07:53.000 | and made it very easy for people to do things
01:07:54.920 | almost like they were learning jQuery as its own language,
01:07:57.680 | domain-specific language.
01:07:58.960 | And that I think reflected in part
01:08:02.080 | the difficulty of using the document object model,
01:08:04.960 | these APIs that were originally designed in the '90s
01:08:07.040 | for Java as well as JavaScript.
01:08:08.440 | They were very object-oriented or even procedural.
01:08:11.720 | They were very kind of verbose.
01:08:13.360 | And it took like a constructor call
01:08:15.440 | and three different hokey-pokey dances to do something,
01:08:18.400 | whereas in jQuery, it's just one line.
01:08:20.720 | So that fed back finally into the standards.
01:08:24.520 | It didn't mean we standardized jQuery.
01:08:25.960 | It wasn't quite that concise.
01:08:27.120 | But you find now with the modern standards
01:08:29.680 | that we were working on in the HTML5 sort of effort,
01:08:34.680 | that things became simpler,
01:08:35.840 | the fetch API and the query selector API,
01:08:38.840 | document.querySelector.
01:08:40.120 | A lot of things can be done now in raw JavaScript
01:08:42.560 | that you would make more concise and terse in jQuery,
01:08:46.640 | but it's not bad.
01:08:48.000 | It's pretty good.
01:08:48.840 | Whereas in the old DOM of 15 years ago,
01:08:51.120 | it was just too verbose.
01:08:51.960 | - So maybe the frameworks were born
01:08:53.800 | because JavaScript lacked some of the features of jQuery.
01:08:59.000 | And so now that JavaScript is swallowing what jQuery was,
01:09:03.520 | then the frameworks will,
01:09:05.240 | only the ones that truly add value will stick around
01:09:07.840 | and the other ones will die out.
01:09:09.000 | - And that highlights also this division
01:09:10.680 | between the core language JavaScript,
01:09:12.320 | which can show up in other places
01:09:13.600 | like Node.js on the server side
01:09:15.680 | and the browser specific APIs
01:09:17.680 | or the document object model APIs,
01:09:19.720 | which are even managed by the W3C,
01:09:21.560 | the standards body that was off in XML
01:09:23.800 | while I land on we were doing
01:09:25.320 | real JavaScript standards in ECMA.
01:09:26.960 | And you have this division of labor,
01:09:30.280 | division of responsibility and division of style
01:09:33.240 | and sort of aesthetics and also speed.
01:09:37.240 | So the document object model really stagnated
01:09:39.600 | after Microsoft kind of de-invested in the web.
01:09:43.560 | And Microsoft did something in their haste
01:09:45.880 | in the spirit of Netscape,
01:09:46.880 | doing things quickly and getting on first called DHTML.
01:09:49.760 | And some of their innovations
01:09:51.320 | that were like an alternative document object model
01:09:53.680 | didn't really get standardized until HTML5
01:09:56.840 | when we pragmatists set up for at the time,
01:10:00.040 | Ian Hickson, who went to Google, Apple and Mozilla said,
01:10:03.640 | "XML is not gonna replace HTML.
01:10:07.160 | HTML4 is too old.
01:10:08.720 | Let's standardize HTML5 based on all this good stuff,
01:10:12.160 | including that DHTML variant, dynamic HTML.
01:10:15.000 | - HTML5, it feels like to me,
01:10:17.240 | maybe you can correct me,
01:10:18.120 | like a beautiful piece of design work.
01:10:21.120 | It's not often with web stuff,
01:10:24.880 | you have this breath of just like,
01:10:27.320 | oh, whoever did this, this just feels good.
01:10:31.320 | What are your thoughts about HTML?
01:10:34.280 | Am I being too romantic?
01:10:35.840 | - A little bit, a little bit.
01:10:36.800 | - Are there flaws, fundamental flaws to it
01:10:38.680 | that I'm just not aware of?
01:10:40.080 | - My old friend Hicksey did a great job.
01:10:42.560 | He was another renegade physics student.
01:10:45.760 | And he was basically a QA guy at opera,
01:10:48.000 | but he obviously trained physics student
01:10:52.520 | and someone who could write, a Britisher.
01:10:54.720 | He developed test suites
01:10:57.840 | and he started thinking about them more axiomatically.
01:11:00.920 | Now this can be good because you can sort of systematize
01:11:03.960 | in a way that makes a better HTML,
01:11:06.000 | or you can get caught in the pragmatism of saying,
01:11:08.080 | well, we have to handle all of these edge cases,
01:11:09.840 | so we're just gonna have sort of a test matrix.
01:11:12.560 | And if the matrix is large,
01:11:14.000 | it will not be beautiful by many people's lights.
01:11:15.880 | Everyone likes to minimize along their preferred dimensions,
01:11:19.320 | the seven special forms and scheme or whatever.
01:11:21.680 | But reality is HTML needs to be big.
01:11:26.680 | It's kind of shambolic, it's a creative multi-paradigm.
01:11:30.400 | And Hicksey did a good job, I would say, with a bunch of it.
01:11:34.380 | Other people came in in the spirit of Ian Hickson
01:11:36.640 | to do HTML5 work and they've carried on that effort.
01:11:40.240 | And so it's a mix of pragmatism,
01:11:42.640 | de facto standards from the past being sort of combined
01:11:46.280 | or written down for the first time,
01:11:47.580 | and then rethought in a way that has a simpler syntax,
01:11:50.300 | like the fetch API instead of XMLHTTP request.
01:11:54.400 | - This video too as well,
01:11:55.440 | it ultimately, it feels like, maybe you can correct me,
01:11:58.080 | it feels like it was the nail in the coffin of Flash.
01:12:01.200 | - Steve Jobs saying no Flash on the iPhone,
01:12:03.040 | in my opinion, was the actual stake to the heart.
01:12:05.460 | But, well, I'm not sure what trope you wanna use.
01:12:09.160 | Flash was a zombie until just this year, right,
01:12:12.080 | or last year, I think last year was the end of Flash
01:12:14.160 | in main browsers.
01:12:15.240 | But Jobs really did the death blow.
01:12:18.280 | And yet, you're right, we had to make HTML5 competitive.
01:12:23.040 | I still don't think we got that beautiful
01:12:24.960 | timeline animation.
01:12:26.760 | - The timeline thing, so you like the time,
01:12:28.600 | I mean, me from, I used to animate all kinds of stuff
01:12:31.880 | inside Flash, plus there's a programming element.
01:12:34.920 | It was a little bit, I don't know if you can comment
01:12:38.220 | on that, but to me, it was a little bit like
01:12:39.860 | go-to statement, like in a sense that
01:12:42.640 | it was a little bit too chaotic.
01:12:44.900 | Like it didn't, that OCD part of me as a programmer
01:12:48.360 | wasn't satisfied by Flash.
01:12:50.180 | It feels like there was bugs that were introduced
01:12:52.760 | through the animation process that I couldn't debug easily.
01:12:55.340 | - Yes, I heard that too.
01:12:56.620 | I didn't use it, so I'm doing the grass is greener thing
01:12:59.260 | here.
01:13:00.100 | The thing I liked about the animation model
01:13:02.100 | was that it was this immutable function of time,
01:13:03.900 | so you could time warp and you could,
01:13:06.220 | if you dodged these bugs or worked carefully,
01:13:08.320 | you could really make it sing in ways that I think
01:13:10.660 | still a little challenging with web animation standards,
01:13:14.620 | but, or just using raw canvas and WebGL.
01:13:18.140 | But there's so many tools now that maybe it doesn't matter.
01:13:20.740 | And yet we had to do video, we had to do WebGL
01:13:25.740 | and then evolve it.
01:13:27.820 | We had to do web audio.
01:13:30.060 | But once we did all these things that helped Flash die,
01:13:34.140 | thanks to Steve Goves, we had something that
01:13:37.380 | people didn't realize.
01:13:39.580 | We had that vision that Mark and Jason had,
01:13:41.180 | this graphics capable to the metal, portable runtime.
01:13:46.180 | And we at Mozilla realized this and we saw JavaScript
01:13:51.600 | was something that you could compile to.
01:13:53.340 | Adobe had somebody in the Adobe labs doing this too.
01:13:55.620 | He had a project called Alchemy.
01:13:57.220 | We had somebody who's now at Google,
01:13:59.020 | Alon Zakai, who did his own LLVM based compiler
01:14:03.220 | that would take C or C++ and it would emit JavaScript.
01:14:06.140 | And you would think this is crazy.
01:14:07.620 | You're going from this sort of machine types,
01:14:09.820 | low level, controlled memory allocation language
01:14:13.080 | to this garbage collected dynamically typed,
01:14:16.340 | high level, higher level language.
01:14:18.020 | But Alon sort of just phenomenologically carved nature
01:14:22.420 | of the joint and found the forms
01:14:23.700 | that were fast in JavaScript.
01:14:25.580 | And then with Dave Herman, who I'd recruited
01:14:28.220 | from Northeastern University, who was a type theorist,
01:14:31.220 | and Luke Wagner, who's still at Mozilla,
01:14:33.800 | who was the compiler guy and the JIT guy,
01:14:36.820 | they figured out how to codify what Alon had done
01:14:40.180 | into a typed subset of JavaScript called Asm.js.
01:14:44.260 | And this is a strange thing to think about
01:14:45.660 | because it doesn't have new syntax.
01:14:47.260 | The types are casts that occur in dominator positions
01:14:52.260 | in the control flow graph.
01:14:54.140 | So it's like a hack on JavaScript and it's a subset.
01:14:56.740 | And it uses those bitwise operators
01:14:58.380 | that I talked about copying from Java
01:15:00.420 | to basically cast numeric types,
01:15:04.480 | which are double precision point into integers.
01:15:06.980 | And so inside JavaScript,
01:15:08.940 | in the kernel semantics are integers.
01:15:11.700 | And if you use these operators,
01:15:13.040 | if a compiler emits them in the right places,
01:15:15.580 | you can then treat them as typed values,
01:15:18.500 | typed memory locations, and you can type check your program.
01:15:22.380 | You can not only type check it, you can compile it.
01:15:24.940 | This is all in sort of linear time.
01:15:26.420 | Oh, and you can compile it
01:15:29.020 | to have deterministic performance.
01:15:30.420 | It doesn't touch the garbage collector.
01:15:32.580 | It calls a bunch of functions that come from the C functions
01:15:35.460 | or C++ code that you're compiling.
01:15:37.460 | And you can make the epic Unreal Engine
01:15:40.940 | go in 30 frames a second.
01:15:43.580 | And when we did this in 2013 in the fall,
01:15:46.860 | Tim Sweeney, I bet, didn't think it could be done quickly.
01:15:50.140 | He thought it would take years.
01:15:51.540 | And the team went to Raleigh to Epic,
01:15:54.060 | and in four days they had Unreal Engine ported
01:15:57.420 | by pressing a compile button.
01:15:59.940 | But they had to have WebGL, which came from OpenGL,
01:16:03.180 | ES came to OpenGL, which came from Silicon Graphics GL.
01:16:05.980 | They had to have Web Audio, so they could map OpenAL,
01:16:09.420 | which was another audio library standard,
01:16:11.000 | to Web Audio, which was kind of a Chrome idiosyncratic thing.
01:16:14.000 | But they could make it work.
01:16:16.260 | And they had to have Asm.js for fast C++ to JavaScript.
01:16:21.060 | And if you didn't have that fast compiler step,
01:16:25.220 | the JavaScript you'd write by hand
01:16:27.340 | trying to do an Unreal game would be too big and too slow.
01:16:29.780 | It would touch the garbage collector.
01:16:31.380 | It would not keep up with 30 frames a second
01:16:33.220 | on the 2013 hardware.
01:16:35.600 | So we demoed that at,
01:16:37.000 | this must have been fall 2012 now that I think about it,
01:16:40.420 | 'cause we demoed it at GDC, Game Developer Conference 2013,
01:16:44.420 | and people were stunned.
01:16:45.420 | That's like Unreal Engine, Unreal Tournament,
01:16:47.380 | running in my browser window.
01:16:48.860 | No plugin, no Flash, no Java, no--
01:16:52.660 | - So were those the early days of,
01:16:54.460 | because JavaScript now is able to run basically on par
01:16:58.380 | with a lot of the C++.
01:17:01.420 | - Yeah, and even before then,
01:17:02.820 | you had the fast JavaScript VMs in 2008 when Chrome came out.
01:17:06.560 | Just before it came out, Mozilla,
01:17:08.740 | my friend Andreas Gal and I and others
01:17:11.700 | hacked out TraceMonkey, our trace-based JIT.
01:17:14.460 | The SquirrelFishExtreme team at Apple did their JIT.
01:17:18.740 | And we were all competing
01:17:19.700 | on these crazy performance benchmarks.
01:17:21.900 | It was a little bit too much tuning of the benchmark.
01:17:23.540 | But JavaScript started getting fast,
01:17:25.220 | and developers started noticing it.
01:17:26.700 | But it was still kind of its own high-level language
01:17:29.780 | with garbage collection.
01:17:30.780 | The Asm.js step helped us go further,
01:17:33.260 | because until we really proved the concept,
01:17:37.100 | people were still saying, "Well, JavaScript's okay.
01:17:39.320 | "It's getting faster thanks to V8."
01:17:41.020 | Everybody gave Google credit, especially Google.
01:17:43.300 | But we need something to kill Flash.
01:17:44.940 | Let's use a portable native client code
01:17:47.300 | that Google had acquired, Native Client,
01:17:49.300 | which is a separate lineage for taking basically C code,
01:17:52.940 | compiling it into a software fault isolated container
01:17:56.260 | of some sort, using some kind of virtualization technique.
01:17:59.740 | And maybe it can even be in process
01:18:01.620 | and still be memory-safe.
01:18:02.540 | That would be awesome.
01:18:03.380 | But they ended up using process isolation, too,
01:18:04.780 | and that kind of weakened it.
01:18:06.300 | And in the end, it was like portable native client,
01:18:08.540 | okay, meet the new boss, same as the old boss.
01:18:11.060 | This is the Google Flash, right?
01:18:13.260 | But when we did Asm.js
01:18:15.060 | and we showed Unreal Engine working,
01:18:17.180 | I think it was only a matter of time
01:18:18.660 | before Google threw in the towel.
01:18:19.820 | And in fact, everybody agreed in spring of 2015,
01:18:23.140 | we're gonna take what was proven by Asm.js
01:18:25.500 | and make a new syntax, a binary syntax that's efficient,
01:18:29.460 | that loads into the same JavaScript VM
01:18:31.580 | that JavaScript loads into.
01:18:32.620 | So there'll be two source languages,
01:18:34.100 | one VM, very important, one garbage collector,
01:18:36.220 | one memory manager, one set of compiler stages.
01:18:40.800 | And that's called WebAssembly.
01:18:42.300 | And that's the successor to Asm.js.
01:18:44.260 | And it's important that it have binary syntax
01:18:46.340 | because at the end of the day, especially on mobile,
01:18:48.780 | if you're downloading JavaScript,
01:18:50.100 | even if you're using LZ compression on the wire,
01:18:52.040 | that's cool, but you've got to blow it out into memory
01:18:53.900 | and then parse the silly eight character function keyword
01:18:56.860 | that I picked when I should have used something shorter.
01:19:00.780 | I picked it because of awk, the Unix tool.
01:19:03.300 | So anyways.
01:19:05.380 | - I'm not following, I want to,
01:19:06.220 | but I'm not following the awk thread.
01:19:07.940 | - Yeah, don't worry about it.
01:19:09.780 | - Is it surprising to you that
01:19:12.260 | how damn fast JavaScript is these days?
01:19:14.660 | I mean, 'cause you've been through the whole journey.
01:19:16.820 | I know every step of the way, but is it like,
01:19:19.660 | I mean, it feels incredible.
01:19:22.140 | - It does, but I knew, so the funny thing is,
01:19:24.220 | computer science is this big karmic wheel, right?
01:19:26.820 | Wheel of Fortuna.
01:19:27.900 | And in the, it was about the '97,
01:19:32.420 | I was loaned by Netscape to do due diligence for Sun
01:19:37.060 | in their acquisition of Animorphic,
01:19:39.260 | which was David Unger and friends,
01:19:43.860 | people, Craig, I'm forgetting his name,
01:19:46.220 | he went to Microsoft.
01:19:47.660 | These Stanford language buffs who had taken Smalltalk
01:19:51.140 | and then David created Self
01:19:53.460 | as a simpler sort of Smalltalk language
01:19:56.220 | and made really fast, just-in-time compiling VMs for them.
01:20:00.580 | And they, well ahead of Java Hotspot or JavaScript V8
01:20:05.580 | or any of these modern VMs,
01:20:07.620 | figured out how to make dynamic code fast
01:20:10.740 | because Smalltalk is dynamic language, right?
01:20:13.060 | It has classes, it has, I think,
01:20:15.060 | more lockdown declarative syntax than JavaScript,
01:20:17.380 | but it's fundamentally dynamic, you don't declare the types.
01:20:20.980 | But you could infer the types as the program runs
01:20:24.140 | and you start to form these ideas
01:20:26.080 | about what types are actually flowing
01:20:27.600 | through key operations and you form little
01:20:30.580 | so-called polymorphic inline caches
01:20:32.720 | that are optimized machine code.
01:20:35.660 | The cache is the machine code that assumes,
01:20:38.300 | does a quick check to make sure the type is right,
01:20:40.140 | and if it's not right, it bails to the interpreter.
01:20:42.380 | If it is right, you go pretty fast.
01:20:44.500 | And that short test is a predicted branch,
01:20:47.100 | so things are pretty quick.
01:20:48.620 | All that amazing stuff I knew about in the '90s
01:20:51.340 | and I didn't have time to do it
01:20:53.780 | and Anamorphic got bought by Sun and they did Hotspot.
01:20:57.220 | And you needed that even in Java because at scale,
01:21:00.060 | Java has some dynamic aspects due to invoke interface.
01:21:04.340 | You can have basically collections of Java code
01:21:06.720 | where you don't know at the time each module
01:21:10.900 | or package is compiled exactly what's being called,
01:21:13.900 | what subclass or what implementation
01:21:16.300 | of an interface is being called.
01:21:17.820 | And so you want to optimize using this sort
01:21:19.580 | of dynamic polymorphic caching there too.
01:21:21.740 | And they did that and Hotspot is an amazing beast.
01:21:24.620 | I've met like 13 people who all claim they created it.
01:21:27.740 | I think one of them may deserve credit more than others.
01:21:30.540 | But I didn't get to do that in JavaScript
01:21:34.660 | and when we knew that Google was going
01:21:38.060 | to do their own browser, which we knew at Mozilla around 2006
01:21:41.060 | I also met the team that did V8.
01:21:45.180 | And it turns out it was Lars Bach
01:21:46.620 | who was one of the young engineers from Anamorphic
01:21:49.300 | who got acquired by Sun.
01:21:50.660 | And so Lars is like one of the world's expert
01:21:52.940 | on these kinds of virtual machines
01:21:54.940 | and he picked my brains about JavaScript.
01:21:56.780 | I could tell he didn't like it at the time
01:21:58.100 | but he had to do it.
01:22:00.460 | - Oh, really, interesting.
01:22:01.380 | - Yeah, in 2006 launch at Google's campus.
01:22:03.620 | And then I had another friend who was DevRel at Chrome
01:22:07.020 | and he said, yeah, we don't know what they're doing.
01:22:08.300 | This is getting 2007 to fall, getting toward 2008.
01:22:11.980 | We're trying to get Chrome out
01:22:12.980 | and we don't know what's going on with the V8 team.
01:22:14.460 | They're off in Aarhus, Denmark,
01:22:16.860 | rewriting their engine four times, which is good.
01:22:19.260 | That's the right way to do this kind of development.
01:22:22.260 | They were learning JavaScript, including all its quirks
01:22:24.260 | which they came to hate, the fire of a thousand suns
01:22:26.980 | which is one of the reasons that Lars and company
01:22:28.860 | did Dart, their own language.
01:22:30.900 | But they also made the language fast.
01:22:32.860 | And meanwhile, we knew this was happening.
01:22:35.220 | So we got our act together with TraceMonkey,
01:22:38.460 | our tracing JIT at Mozilla.
01:22:40.060 | And Apple, I think, was also aware.
01:22:41.820 | And so they were doing their own JIT.
01:22:42.980 | So the era of JIT-ed fast JavaScript in 2008
01:22:46.420 | had this prehistory going back to Smalltalk itself
01:22:49.540 | and anamorphic.
01:22:50.940 | And again, the lineage is interesting
01:22:53.060 | 'cause you had Lars at anamorphic
01:22:54.460 | and then he ends up at Google.
01:22:55.940 | - Yeah, and today we have an incredibly fast language
01:23:00.140 | that like you said, still, without hate, you can't have love.
01:23:04.740 | So I think there's both love and hate for this dance,
01:23:09.740 | this rich, complex dance of JavaScript
01:23:12.060 | throughout its history.
01:23:12.900 | - There's a dialectic for sure.
01:23:15.300 | - Today, JavaScript is the most popular language
01:23:18.940 | in the world.
01:23:20.120 | Why, by many measures, why do you think that is?
01:23:24.220 | Is there some fundamental ideas
01:23:28.420 | that you've already spoke to a little bit
01:23:29.700 | but sort of broader that you think
01:23:31.380 | is the most popular language in the world?
01:23:32.820 | - So I think I did, by doing first class functions
01:23:36.220 | and taking the good parts of the C operator hierarchy
01:23:40.780 | and just keeping things simple enough,
01:23:44.060 | maybe it could have been simpler,
01:23:45.060 | but I had to make it look like Java
01:23:47.340 | and interoperate with Java,
01:23:48.740 | that there was inherent goodness,
01:23:52.820 | Aristotelian quality there.
01:23:54.380 | And people perceive that
01:23:56.060 | even through all the quirks and warts.
01:23:57.700 | And then over time, working on it with the standards body,
01:23:59.900 | working on it not only as a core language,
01:24:02.760 | but in the context of HTML5 and making the browser better,
01:24:06.620 | listening to developers, thinking about,
01:24:08.940 | this is something that Nick Thompson wrote nicely about
01:24:11.460 | on the Hacker News, I was very flattered.
01:24:12.580 | He said, "Java was this thing
01:24:14.220 | "where the experts were writing the code
01:24:15.900 | "and it was compiled and you had to declare all your types.
01:24:17.920 | "And Sun didn't really give a damn about
01:24:20.860 | "the average programmer who wanted to build real web apps,
01:24:23.720 | "dynamic things."
01:24:25.020 | And I was in there meanwhile doing a bunch of people's jobs,
01:24:28.800 | making JavaScript survive those early years
01:24:31.540 | when it was kind of touch and go, right?
01:24:33.580 | JavaScript was considered a Mickey Mouse language.
01:24:36.100 | It was for annoyances like the scrolling text
01:24:38.620 | at the bottom of the browser in the status bar.
01:24:40.780 | But I kept listening to developers,
01:24:42.440 | working with them and trying to make it run
01:24:45.420 | in that single threaded event loop in a useful way.
01:24:47.680 | And I think that forged something
01:24:49.840 | that people have come to love.
01:24:51.160 | Now you don't always love the best thing, right?
01:24:53.660 | I talked about, Shakespeare,
01:24:56.060 | sunnet about, "I'm Mr. Sizer, nothing like the sun."
01:25:00.140 | Or the scene from Josh Whedon's film,
01:25:03.780 | Serenity at the end where the actual piece in the score
01:25:07.700 | by David Newman is called Love,
01:25:09.020 | where Captain Mal is teaching River Tam
01:25:12.820 | about how to pilot a ship.
01:25:13.840 | And she's a super genius, super soldier.
01:25:15.340 | She knows how to do it already.
01:25:17.100 | And he's basically talking about how you have to love
01:25:19.460 | the ship because if you don't, it's gonna kill you.
01:25:22.020 | And then the piece falls off the ship.
01:25:23.820 | It's kind of like JavaScript.
01:25:25.220 | You have to love it.
01:25:26.900 | You have to love it because now people say,
01:25:28.920 | "Ah, we're stuck with it
01:25:30.260 | 'cause it got this priority of place."
01:25:31.620 | - But there's love underpinning that.
01:25:33.320 | And actually, listening to developers,
01:25:35.860 | that's kind of beautiful.
01:25:36.700 | There's most successful products in this world
01:25:41.100 | with all the messes, with all the flaws.
01:25:43.060 | Perhaps the flaws themselves are actual features,
01:25:45.320 | but that's a whole nother, that's a discussion about love.
01:25:48.140 | But underneath it, there's something
01:25:50.180 | that just connects with people.
01:25:52.380 | - And it has to keep connecting.
01:25:53.440 | If JavaScript kind of went off in this,
01:25:55.620 | people sometimes complain about ES6.
01:25:57.300 | Oh, you put classes in JavaScript.
01:25:58.660 | I hate classes.
01:25:59.500 | You've ruined it.
01:26:00.400 | But it's not true.
01:26:01.380 | It's a dynamic language.
01:26:02.620 | Smalltalk had classes.
01:26:04.780 | Python has classes.
01:26:06.040 | There are lots of Lisp variants that had classy systems.
01:26:10.080 | Common Lisp.
01:26:12.700 | So people who don't reject it based on some sort
01:26:16.740 | of fashion judgment do use it
01:26:21.020 | and do interact with the standards body.
01:26:23.340 | The standards body is competing browser vendors mainly,
01:26:25.800 | but also now big companies that use JavaScript heavily
01:26:28.440 | the PayPal's and other such companies, Salesforce.
01:26:32.940 | And they have to cater to web developers.
01:26:36.260 | They have to hire developers who know JavaScript.
01:26:38.980 | They have to keep their engines up to the latest standard.
01:26:43.060 | And this creates all this sort of social structure
01:26:45.860 | around JavaScript that is unusual.
01:26:47.780 | I mean, you get C++ buffs that follow the inner workings
01:26:51.380 | of C++, what is it now?
01:26:54.420 | 21 something.
01:26:55.900 | I don't know.
01:26:56.740 | I've lost track.
01:26:57.560 | But it's a more rarified group.
01:26:58.980 | It's more like the old language, gray hairs.
01:27:02.820 | Whereas JavaScript is a younger
01:27:04.500 | and more vibrant and large crowd.
01:27:07.380 | - There's a community feel to it.
01:27:09.260 | There's a echoes, perhaps I don't wanna draw
01:27:12.180 | too many similarities.
01:27:13.940 | Maybe you can comment on it.
01:27:15.420 | There's a C++ is like Wall Street
01:27:18.980 | and the JavaScript is like Wall Street bets
01:27:21.220 | from the recent events.
01:27:22.620 | It's like, there's a chaotic community of all.
01:27:24.940 | And there's some power from that distributed crowd
01:27:28.800 | of people that ultimately--
01:27:30.240 | - It's more demotic.
01:27:31.120 | It's more of the people.
01:27:32.640 | It lets people in without requiring these credentials.
01:27:35.840 | I remember in the late 90s into the noughties,
01:27:38.400 | people were all getting Java credentials.
01:27:39.880 | And I knew people and friends knew people
01:27:42.640 | who became Java programmers.
01:27:44.120 | And you knew they really should have been
01:27:45.320 | like nature guides or pilots.
01:27:47.200 | They hated programming, but they thought,
01:27:49.000 | I gotta make money.
01:27:49.840 | I'm gonna become a Java programmer.
01:27:51.740 | - Do you have some, because it's such a monumental moment
01:27:54.920 | in our current history as a quick aside,
01:27:58.080 | do you have thoughts about this huge distributed,
01:28:02.200 | crowdsourced financial happenings with Wall Street bets?
01:28:06.600 | - Yeah.
01:28:07.440 | - That's like nobody could have,
01:28:08.500 | well, you could have predicted,
01:28:09.700 | but the scale and the impact of this kind
01:28:12.080 | of emergent behavior from independent parties
01:28:15.000 | that could happen.
01:28:15.840 | - Like I said, my own experience with the dismal science
01:28:19.900 | as with physics led me to reject a lot of bad models.
01:28:22.520 | And economics was always compromised by politics,
01:28:26.280 | political economy.
01:28:27.400 | You could also argue that it was,
01:28:29.480 | it used to be a branch of moral philosophy.
01:28:31.020 | So it was concerned with the good and it became divorced
01:28:33.960 | and became sort of in this quasi Newtonian way,
01:28:36.600 | just about everything's just running by itself.
01:28:39.160 | Don't worry about it.
01:28:40.280 | This monopoly is crushing your Netscape company,
01:28:42.080 | but that's just nature.
01:28:43.760 | - And economics couldn't,
01:28:45.200 | or doesn't really have good models
01:28:46.620 | for the Wall Street bets subreddit.
01:28:49.000 | - They know how to squeeze a short, right?
01:28:52.320 | So the amazing thing is you have Robinhood app,
01:28:56.480 | which was again, supposedly for the demos, for the people,
01:29:00.760 | and eliminated the fee through various kinds of straddles
01:29:05.160 | or some kind of spread operation
01:29:09.240 | that helped them eliminate the fee or eat the fee.
01:29:11.880 | And in fact, as a broker in these days,
01:29:14.560 | because it takes two days to settle,
01:29:15.840 | there's counterparty risk as they found out.
01:29:18.640 | And so the Wall Street bets people,
01:29:23.400 | the memes are like the Terminator robot
01:29:25.700 | with $600 STEMI check and the hedge funds
01:29:30.160 | the little girl hiding under the desk.
01:29:32.400 | There is a problem, which I talked about
01:29:36.040 | in the recent podcast, which I'm conscious of
01:29:38.280 | from the history of the web.
01:29:39.320 | And that is, you could say it's monopoly,
01:29:41.240 | which antitrust wasn't enforced
01:29:42.960 | after US Microsoft for a long time.
01:29:45.120 | And a lot of this was due to the money interests
01:29:48.000 | buying control of politicians.
01:29:50.880 | And in Plato's five regimes, that's oligarchy.
01:29:54.400 | That's where we are.
01:29:56.160 | And now we're seeing a fight against the oligarchs.
01:29:58.720 | I don't know if it'll work,
01:29:59.560 | but you're definitely seeing it.
01:30:00.760 | And it's also kind of hackerish, right?
01:30:02.360 | It's got a hacker ethos.
01:30:04.320 | Hey, Robinhood, no fees.
01:30:05.640 | Oh, interesting.
01:30:06.460 | Hey, I can buy a fraction of a share in this thing,
01:30:09.560 | or I can keep buying with my stimulus check.
01:30:12.240 | So I mentioned Hegel seeing Napoleon on the horse.
01:30:16.920 | Hegel also talked about the cunning of reason,
01:30:19.160 | that you have this sort of God sees history in full,
01:30:23.040 | and if you believe in God, or we don't know the future,
01:30:25.880 | but there's always this sort of fly in the ointment,
01:30:28.320 | this unintended consequence that confounds
01:30:32.080 | the best plans of the powers that be.
01:30:35.600 | And we're living through it.
01:30:37.000 | I'm glad it's not street warfare or mechanized warfare,
01:30:41.480 | 'cause it has been in the past.
01:30:44.760 | It's more like soft power.
01:30:47.120 | - Yes.
01:30:47.960 | - And people are fighting back.
01:30:49.360 | - Do you think it's possible,
01:30:51.760 | so JavaScript used to be for the front end of the web.
01:30:56.760 | It's now increasingly so being used for backend,
01:31:01.600 | like running stuff that's like behind the scenes.
01:31:06.080 | And it's also starting to be used quite a bit
01:31:10.260 | for things like TensorFlow.js.
01:31:12.240 | So starting to actually use these heavy duty applications
01:31:16.040 | that are using neural networks, machine learning,
01:31:17.680 | and so on in the browser.
01:31:19.380 | Is it possible in 10, 20, 30 years
01:31:24.120 | that basically most of the world runs on JavaScript?
01:31:28.640 | - This is a dystopia and a nightmare to some people.
01:31:31.240 | (Dave laughs)
01:31:33.160 | When we did Asm.js and WebAssembly,
01:31:34.920 | I would joke and meme people with scenes like
01:31:37.360 | Neo waking up in his pod in the Matrix,
01:31:39.520 | and he's all skinny and weak and hairless.
01:31:41.920 | And you realize in the future that you're living
01:31:46.720 | in some simulation that it's all running on JavaScript,
01:31:49.160 | and you just scream forever.
01:31:50.600 | It's possible.
01:31:52.840 | Gary Bernhardt does these funny talks.
01:31:54.840 | He did Wat.js, and then he did this
01:31:56.880 | Life and Death of JavaScript, I think it's called,
01:31:59.560 | where he took some clever ideas
01:32:02.000 | that actually have a thread of credibility to them.
01:32:05.320 | But I mentioned software fault isolation.
01:32:09.200 | In the old days when we were using computers,
01:32:10.600 | we said we're gonna use the Unix monolithic monitor,
01:32:14.120 | and it's the privileged program.
01:32:15.980 | This is before you even had hardware rings of protection.
01:32:18.400 | Those, some of the early '60s operating systems
01:32:20.440 | used hardware protection zones.
01:32:22.680 | But Unix is privileged, and the program
01:32:25.920 | that runs user code in a process is hosted.
01:32:30.440 | It's the guest in the host, and you get to suspend it.
01:32:33.640 | You get to kill it.
01:32:35.240 | If it crashes, it doesn't take down the whole OS.
01:32:37.280 | It's a wonderful idea.
01:32:39.360 | But the call into the kernel is expensive,
01:32:42.640 | the system call, so-called.
01:32:43.800 | And this has even been optimized now
01:32:45.160 | for things like getting the time of day
01:32:46.300 | so it doesn't actually enter the kernel.
01:32:48.300 | And meanwhile, hardware architectures
01:32:52.760 | and virtualization techniques have gone
01:32:54.420 | in a different direction, even to the point
01:32:56.360 | where you can do software fault isolation very cheaply
01:32:58.800 | without entering the operating system kernel.
01:33:00.720 | And so you get unikernels and exokernels
01:33:02.880 | and very lightweight VMs.
01:33:04.320 | And so Gary took this idea and said,
01:33:07.520 | JavaScript will take over computing
01:33:09.160 | because the system call boundary's too expensive,
01:33:11.640 | so everything ends up in JavaScript
01:33:12.920 | with these lighter-weight isolation enforcement mechanisms.
01:33:16.880 | It's not totally beyond belief.
01:33:18.560 | It'd be WebAssembly, too.
01:33:20.880 | - It's nice to ask you sort of for advice.
01:33:25.280 | There's so many people that are interested
01:33:26.920 | in starting to learning about programming,
01:33:29.120 | getting into this world.
01:33:30.320 | Is there some number of languages,
01:33:34.960 | three to five programming languages
01:33:36.440 | that you would recommend people learn,
01:33:38.200 | or maybe a broader advice
01:33:41.680 | on how to get started in programming?
01:33:43.920 | - Well, so you asked about machine learning,
01:33:45.360 | and JavaScript is a general-purpose language,
01:33:47.800 | and it's a language that's not that great
01:33:52.800 | for doing matrix operations
01:33:56.260 | or doing parallel programming, I would say,
01:33:59.600 | without using some extensions or some libraries
01:34:02.080 | that have some magic in them.
01:34:03.560 | So if someone wanted to learn,
01:34:06.720 | there are amazing languages in sort of the APL family
01:34:11.040 | that are very useful for, I would say, linear algebra,
01:34:14.000 | which gets to a lot of the kernels in machine learning.
01:34:16.760 | And so APL had like J and then K,
01:34:19.940 | and they're K variants
01:34:22.160 | because the guy that did K is still going,
01:34:24.600 | and they're proprietary, but he's still innovating there.
01:34:27.480 | Python is used.
01:34:30.360 | So people talk about TensorFlow.js.
01:34:31.680 | Well, it's not that surprising
01:34:33.400 | 'cause Python was heavily used for machine learning,
01:34:36.320 | and Python was always, you know,
01:34:38.680 | they didn't have this fast just-in-time compiler tradition.
01:34:41.480 | There were some projects that tried this,
01:34:43.120 | and some of them were interesting.
01:34:45.280 | PyPy was interesting.
01:34:46.240 | But the philosophy with Python was,
01:34:49.960 | oh, you need to go fast, write a C plugin,
01:34:51.720 | and drop into C code.
01:34:53.040 | So I think people should look at multiple languages
01:34:57.480 | because there are different tools in the belt.
01:34:59.480 | If you're trying to do supervision or rapid prototyping,
01:35:02.800 | you want a dynamic language.
01:35:03.920 | You wanna throw things together and see what works.
01:35:06.520 | If you are trying to go down to the metal very fast,
01:35:09.280 | well, I'm an old C hacker,
01:35:10.720 | but I was also the executive sponsor of Rust at Mozilla,
01:35:14.280 | and Rust has now escaped from that sort of nest
01:35:17.880 | where it was born to be adopted by a bunch of companies
01:35:21.440 | to have a foundation in the works.
01:35:23.200 | Some of the key core team members
01:35:24.760 | are working now at Amazon and other places.
01:35:27.660 | So it looks like Rust has reached escape velocity.
01:35:30.080 | And Rust is an interesting language
01:35:31.360 | because one of our goals there,
01:35:33.040 | one of the reasons I sponsored it was,
01:35:34.480 | we were all tired of seeing
01:35:35.640 | those remote code execution vulnerabilities
01:35:38.080 | due to C and C++.
01:35:40.160 | And we thought, can we have a sort of safety property
01:35:43.800 | through a type and effect system or an ownership system?
01:35:46.880 | And Rust has that.
01:35:48.280 | And that ownership system is interesting
01:35:49.960 | because it doesn't just give you memory safety.
01:35:52.120 | There's a sort of theorem for free,
01:35:53.460 | a dual that falls out for protection against data races.
01:35:57.160 | So Rust is better for low-level programming.
01:35:59.720 | You delimit your unsafe code where you do have to be unsafe,
01:36:02.880 | and you can prove certain facts about memory safety
01:36:05.280 | and race condition avoidance.
01:36:08.800 | And so I think people should learn these new languages.
01:36:11.320 | I think Go is a great language.
01:36:13.320 | I admire the Unix people who did that.
01:36:16.480 | Ken Stoll was involved, Rob Pike, of course,
01:36:19.040 | David, what's his name, and other people.
01:36:23.400 | Go is a huge success, really, on the server side,
01:36:27.080 | mainly where you have a lot of networking to do.
01:36:30.120 | And it's garbage collected, but it's also very pragmatic.
01:36:33.800 | It has that sort of C flavor.
01:36:35.400 | As an old C hacker, I can't get used to the fact
01:36:37.040 | that they swapped the type and declarator
01:36:39.600 | in the declaration order.
01:36:41.160 | - I haven't used Rust, but this is one of the most respected
01:36:44.200 | and loved languages currently, so it's interesting.
01:36:46.280 | - Yeah, and it's still young.
01:36:47.400 | You look at these things,
01:36:48.400 | JavaScript is now considered old.
01:36:50.140 | - It's gone through so many versions
01:36:52.520 | that you can fall in love with it all over again.
01:36:54.880 | - 25 plus years, it's an adult.
01:36:57.760 | (laughing)
01:36:58.760 | It should be out of the house.
01:36:59.800 | But it could be around another 25 years.
01:37:03.420 | Cannot rule it out.
01:37:04.260 | So Rust could be around for a long time.
01:37:06.280 | The longer you're around, the more likely you're Lindy
01:37:08.920 | and you're around your wife.
01:37:10.400 | - A lot of people ask me,
01:37:11.600 | I'm often torn between recommending either Python
01:37:15.800 | or JavaScript as the first language to play with,
01:37:18.080 | because it's difficult,
01:37:20.880 | because it's so easy to do JavaScript incorrectly.
01:37:24.840 | It's much easier to do it correctly these days,
01:37:29.440 | or like well, like learn about programming.
01:37:31.640 | But the cool thing about JavaScript
01:37:33.940 | is that you can create stuff
01:37:36.120 | that will put a smile on your face.
01:37:38.120 | Like as a developer, you can create stuff
01:37:41.440 | and it'll visually look like something and it'll do stuff.
01:37:44.200 | And it makes you feel good.
01:37:45.720 | It makes you fall in love with programming.
01:37:47.320 | With Python, you could do the same.
01:37:48.700 | It's a little slower.
01:37:49.540 | And with C++, it takes five to 10 years
01:37:51.560 | to write a program that actually does something.
01:37:54.100 | So like there's that tension between,
01:37:56.800 | is JavaScript the right first step or is it Python?
01:37:59.640 | And I've been going back and forth on those two.
01:38:01.880 | - I have my Python, right?
01:38:02.760 | It came from a lineage of ABC,
01:38:05.280 | which was a pedagogical language in the Netherlands.
01:38:08.600 | And it was a good teaching language too.
01:38:14.560 | I think it is a good teaching language.
01:38:17.980 | And it's a little more restrictive
01:38:19.120 | in that if you misspell something
01:38:21.960 | in a way that JavaScript might let run,
01:38:25.200 | let reach run time, it'll get stopped
01:38:26.880 | at syntax check in Python.
01:38:30.600 | That's good for beginners.
01:38:31.700 | I think the sloppiness that some people object to,
01:38:34.760 | like people were just tweeting at me,
01:38:37.160 | having just learned JavaScript.
01:38:38.640 | They said, "I can take a number and I can index into it
01:38:41.120 | "and get undefined out of it as a property."
01:38:42.880 | And why is that?
01:38:43.800 | A number is not an object.
01:38:44.840 | And I explained why it is.
01:38:46.200 | 'Cause like in Java, the primitive types,
01:38:48.340 | which unfortunately are not objects,
01:38:49.840 | can be automatically boxed or wrapped by an object.
01:38:53.260 | And I made that implicit.
01:38:55.440 | In Java, it's typed and you have to declare things
01:38:58.220 | and you'll get type errors.
01:39:00.480 | But there are cases in Java where you get auto-boxing
01:39:03.080 | or auto-wrapping 'cause you've declared that you want it.
01:39:06.020 | In JavaScript, it just happens.
01:39:07.540 | And so once I explained it, I'm like, "Oh, wow, I get it."
01:39:10.300 | But it also means that you can commit a blunder that just--
01:39:13.640 | - You don't get punished for it, you don't detect.
01:39:15.340 | - You get an undefined value
01:39:16.800 | and you don't know where it came from.
01:39:17.840 | - Right.
01:39:18.680 | I've been reading a lot about military history recently.
01:39:23.360 | And one way to paint the picture of browsers,
01:39:26.760 | internet browsers, is through the various wars
01:39:29.280 | throughout its history.
01:39:30.620 | I don't know if that's a useful way to look at it,
01:39:32.300 | but we've already talked a little bit about Netscape
01:39:34.660 | and Internet Explorer in the early days.
01:39:38.400 | Can you tell the story of the different wars,
01:39:41.260 | if that's at all an interesting way to look at it,
01:39:43.440 | of the '90s and to today?
01:39:46.460 | - Yeah, so I mentioned that Microsoft,
01:39:49.120 | which was convicted for it, did abuse its monopoly,
01:39:51.520 | but they had a pretty good team by the time they did IE4.
01:39:55.120 | And Netscape, unfortunately, I was like second floor
01:39:57.920 | and I was friends with all the first floor people,
01:39:59.520 | the front end guys who did the JavaScript event hookup
01:40:02.720 | and things like that, that team was fairly burnt out.
01:40:07.560 | And I think having gone public,
01:40:10.880 | the upper management wanted to buy a bunch of companies
01:40:13.320 | to try to go head to head with Microsoft.
01:40:15.360 | Didn't work, but buying a bunch of companies
01:40:17.760 | usually doesn't work.
01:40:19.360 | I think the modern sort of approach roughly
01:40:22.800 | is like Mark Zuckerberg took,
01:40:25.280 | which is to keep them at arm's length
01:40:26.880 | and let them do their thing.
01:40:28.320 | And now that he's pulling WhatsApp in
01:40:29.920 | and people are fleeing it
01:40:31.440 | because it's tied into the ad surveillance.
01:40:33.480 | But for a while they were keeping it separate.
01:40:36.920 | It really does work 'cause you bought it for its value,
01:40:39.000 | it's complimentary and you're not messing with it.
01:40:41.080 | With Netscape, when they bought a bunch of companies,
01:40:43.560 | they had some of the first floor people
01:40:45.440 | or the founders burned out.
01:40:46.920 | They had newcomers who wanted their turn to do the browser
01:40:51.400 | and they hadn't really done browsers or understood them.
01:40:54.400 | And so Netscape 4 was originally supposed to be 3
01:40:57.320 | and it was so late, they renumbered it.
01:40:58.800 | We did a 3 release, Jamie and a few others
01:41:01.400 | put some extra effort into secure MIME
01:41:03.640 | was supported in the mail, built-in mail program.
01:41:07.960 | And Netscape 4 was late and it was only on Windows at first
01:41:11.840 | and Microsoft had really started doing better.
01:41:14.880 | Like they do, they copy and the first version is trash
01:41:17.280 | and the second one, you're starting to feel threatened.
01:41:19.040 | The third one, you can tell what's gonna happen
01:41:21.400 | and the fourth one's good.
01:41:22.440 | - And plus there's the benefit, like you said,
01:41:24.200 | that it comes as a default browser.
01:41:26.080 | - Yes, and yet Netscape's screwing it up
01:41:28.760 | and Microsoft really putting some quality people on it.
01:41:32.520 | IE 4 was good, on Windows it was good.
01:41:34.200 | And they did the dynamic HTML innovations,
01:41:37.040 | they, Scott Isaacs, my old buddy,
01:41:39.680 | a former accountant who programmed in BASIC
01:41:42.360 | and became what Microsoft calls a program manager,
01:41:45.520 | which is kind of an elevated position.
01:41:47.000 | It's, you can be a programmer or an engineer track
01:41:50.520 | but you switch to it and you sort of lead a lot of design
01:41:53.440 | and standards efforts.
01:41:54.680 | And so Scott Isaac put in a lot of those funky DHTML APIs
01:41:58.920 | that didn't quite have the same flavor
01:42:01.000 | as the stuff that I did.
01:42:02.520 | And neither of them was like the later
01:42:04.200 | sort of verbose Java like DOM W3C standardized.
01:42:08.560 | But IE 4 was pretty darn good.
01:42:10.560 | I remember a friend, Scott Furman and I
01:42:12.480 | got invited by Scott Isaacs to Gordon Beers in San Jose.
01:42:16.680 | They were doing a preview of IE 4, this must have been 1997.
01:42:21.520 | And Scott said, yeah, we've got,
01:42:24.120 | here's the new graphics stuff we're doing.
01:42:25.560 | We've got something like your Netscape layers.
01:42:28.240 | We've got VML, a vector markup language.
01:42:31.800 | We can do like virtual reality
01:42:33.440 | and Scott and I looked at each other
01:42:34.920 | and said, we're doomed, right?
01:42:36.840 | Microsoft was starting to fire on all cylinders.
01:42:38.800 | So I have to give them credit for that
01:42:40.440 | even though they abused their market power.
01:42:42.960 | And maybe I shouldn't give them credit
01:42:44.320 | for having the resource to hire talented people
01:42:45.920 | but they did a credible job on IE 4.
01:42:48.880 | What really was bad was that phase of the browser wars
01:42:51.920 | ended with monopoly and perhaps due to the antitrust case,
01:42:56.080 | perhaps due to regulation in Europe,
01:42:58.140 | perhaps just due to Microsoft
01:43:00.560 | not liking dealing with standardization.
01:43:03.120 | They let it rot.
01:43:05.440 | They just abandoned it, IE 5, 5.5, IE 6 later,
01:43:10.440 | but these were not well-maintained.
01:43:12.320 | They had a lot of security bugs.
01:43:14.400 | - And it was really closed and outdated too,
01:43:16.680 | even though it was getting updated, it's just weird.
01:43:19.040 | - Browsers like Mozilla and then Firefox were adding tabs.
01:43:22.120 | Opera had a version of tabs and they didn't add tabs
01:43:25.960 | and they pop up blocking,
01:43:27.560 | something I should have done from the start.
01:43:28.840 | People realized that you can tell
01:43:30.160 | when the user clicks something
01:43:31.520 | and it goes in JavaScript to open a little window
01:43:34.280 | that you can sort of inspect the stack
01:43:36.200 | and see that the click originated that
01:43:38.120 | and it's probably okay.
01:43:39.400 | Whereas if you're just loading a script
01:43:40.800 | and it opens a new window, that's a spam technique
01:43:43.840 | and you should block it.
01:43:45.180 | - Tabs were a brilliant innovation.
01:43:47.360 | Like you said, Opera had it,
01:43:48.360 | but I remember I fully switched to Firefox the moment.
01:43:52.040 | I remember the moments of first using tabs in Firefox
01:43:57.040 | and not liking it for the first few minutes
01:44:00.160 | and then like, wait a minute.
01:44:02.400 | - You get the groove, yeah.
01:44:03.240 | - You get the groove and you understand.
01:44:05.520 | So that timing, what year was this?
01:44:08.520 | Because also as a aspiring web designer, I use table.
01:44:13.320 | So we didn't mention layout or CSS much.
01:44:16.240 | There's also a change in the way
01:44:18.520 | like the frames were going away.
01:44:21.040 | So there's a change in the way websites looked
01:44:23.600 | and behaved and all that kind of stuff.
01:44:25.240 | - CSS finally, which Microsoft embraced with IE4
01:44:28.400 | and Netscape never really did, right?
01:44:30.680 | CSS became a better standard over time
01:44:33.440 | for doing table layout that relieved you of the need
01:44:36.600 | to use what are called spacer GIFs, spacer GIFs, right?
01:44:40.280 | Images you would throw into space out tables.
01:44:42.880 | The typographic power of the web has gotten better,
01:44:47.440 | but it's still not on the level of PDF
01:44:49.320 | and you can't do advanced typography,
01:44:51.560 | but it's gotten really better.
01:44:53.160 | And even then tables were getting better.
01:44:54.920 | If you were using Firefox, that would have been 2004
01:44:57.280 | 'cause it was called Firebird until earlier that year.
01:45:00.240 | - No, yeah, I think it wasn't.
01:45:01.840 | - 2003. - Well, I don't remember.
01:45:03.640 | It was a Firebird, which had tabs.
01:45:06.120 | - We had tabs the whole way.
01:45:07.080 | So it started out as Mozilla/browser in 2002,
01:45:10.440 | became Phoenix.
01:45:12.080 | There's a BIOS that has an embedded version of IE
01:45:14.680 | and they said, "We're called Phoenix Technologies.
01:45:16.360 | "You can't use Phoenix."
01:45:17.600 | And so we said, "Okay, we'll call it Firebird."
01:45:19.160 | And then this Australian-centered
01:45:21.200 | open source database project started really
01:45:24.080 | like in the true Mad Max style, just screaming at us,
01:45:27.120 | saying, "You can't use Firebird."
01:45:28.320 | And I had to sort of be the ambassador.
01:45:30.440 | I said, "Okay, we're gonna rename it."
01:45:31.280 | And they're like, "We don't believe you.
01:45:32.120 | "You shouldn't have used it.
01:45:32.960 | "We hate you."
01:45:33.800 | And then we renamed it to Firefox.
01:45:36.080 | And they're like, "Oh, we love you."
01:45:38.040 | And then I haven't heard of them ever since.
01:45:40.080 | But Firefox was a clever name.
01:45:41.740 | We had to think of something distinctive.
01:45:43.600 | We wanted to keep the fire going.
01:45:45.720 | And it turns out there's a red panda, right,
01:45:48.160 | it's a nickname for.
01:45:49.440 | - So that's the second set of browser wars.
01:45:51.200 | - Second browser war.
01:45:52.040 | - So how did you, how was Firefox born?
01:45:57.000 | How's Mozilla born?
01:45:58.640 | Is there a--
01:45:59.600 | - There's a long story there too.
01:46:01.020 | So Netscape got acquired by AOL,
01:46:02.960 | which as I say was a reasonable happy ending
01:46:05.460 | for a lot of people because Netscape otherwise
01:46:07.600 | was gonna go out of business
01:46:08.440 | because Microsoft was just killing its market.
01:46:10.700 | There was no way to charge for a browser.
01:46:12.480 | Windows came with IE.
01:46:14.760 | IE 4 was pretty good and Netscape 4 wasn't that good.
01:46:17.560 | It took a while to get better.
01:46:19.060 | But the Netscape executive said,
01:46:22.260 | "Let's do an open source escape pod."
01:46:25.640 | And like in Star Wars and New Hope,
01:46:27.120 | the gunner won't shoot it 'cause there's no life forms
01:46:29.240 | on board, right?
01:46:30.160 | It's not a threat.
01:46:31.400 | And so we did Mozilla in 1998 and it looked like
01:46:35.400 | it was going to initially just give the world
01:46:38.480 | an open source browser.
01:46:40.080 | But it's really hard to get people to work
01:46:41.960 | on this sort of hairball that had been hacked up
01:46:43.880 | over by that point four years.
01:46:46.060 | It also couldn't have the crypto module
01:46:49.080 | for secure sockets, so-called,
01:46:50.960 | or now transport layer security.
01:46:52.900 | That was an electronic munition.
01:46:54.320 | We were not allowed to release that
01:46:56.040 | in the full 1024-bit key strength.
01:47:00.400 | And yet people, one of whom I happened to meet previously
01:47:05.000 | at SGI when I went on a sales support engineering trip,
01:47:08.900 | Tim Hudson in Brisbane, Australia,
01:47:11.020 | and Eric A. Young did what became OpenSSL.
01:47:16.020 | It was called SSLEAY after Eric's initials.
01:47:19.440 | And Tim and Eric took their OpenSSL
01:47:23.100 | outside of the purview of the NSA
01:47:25.360 | and the Department of Commerce,
01:47:27.200 | and they stuck it into Mozilla's code.
01:47:28.880 | And that was perhaps the best hack that was done
01:47:31.000 | in the first few months after we open sourced the browser.
01:47:34.460 | We had other problems.
01:47:35.360 | The politics inside Netscape were riven
01:47:37.320 | by these acquisitions.
01:47:38.280 | So the one acquisition that kind of messed up Netscape 4
01:47:41.520 | also wanted to keep doing a proprietary mail
01:47:44.280 | and groupware program, not Jamie Zawinski's mail program
01:47:48.780 | that was in Netscape 2 and 3.
01:47:50.080 | And they held it back from open source.
01:47:51.800 | So we didn't have a mail program, it was just a browser.
01:47:54.320 | We didn't know what AOL would do to us.
01:47:56.720 | Turns out they didn't interfere with us for a long time.
01:47:59.280 | But Netscape wasn't the best steward of Mozilla.
01:48:03.000 | We were operating Mozilla as a pirate ship
01:48:05.320 | without a legal entity.
01:48:06.400 | So most of us worked for Netscape
01:48:08.900 | under a separate organization.
01:48:10.920 | And initially the first engineering manager, Tom Paquin
01:48:15.920 | of Netscape was the Mozilla founding manager.
01:48:19.360 | But he left pretty quickly.
01:48:20.840 | And he left me as the acting manager,
01:48:23.120 | which is more like method acting in my case.
01:48:25.520 | And that was my first management stint.
01:48:28.800 | But then someone who'd written the licenses, Mitchell Baker,
01:48:32.960 | she was a lawyer at Netscape.
01:48:34.120 | She was involved in the open source license decision-making
01:48:38.200 | and the actual writing and construction of those licenses.
01:48:40.400 | That was Mitchell's job.
01:48:41.880 | Netscape public license
01:48:43.000 | and the truly open Mozilla public license.
01:48:45.680 | And there were two because Netscape needed,
01:48:47.400 | because of some encumbered code, needed some special rights,
01:48:49.560 | but that went away over time.
01:48:51.080 | Mitchell was always interested in Mozilla
01:48:52.840 | and she came back from maternity leave.
01:48:54.200 | And she said, "I'll be the manager if you want."
01:48:55.920 | And Jamie and I said, "Sure."
01:48:57.640 | And then Jamie quit.
01:48:58.480 | He quit after a year.
01:48:59.400 | He said, "This didn't work.
01:49:00.840 | I'm sorry."
01:49:01.680 | He acted like it was a total failure
01:49:04.360 | because Mozilla didn't restart the browser market.
01:49:08.080 | But there's no way it could have.
01:49:09.280 | Netscape was still shipping variants of Netscape 4,
01:49:13.760 | which was based on the old code.
01:49:15.720 | Mozilla was trying to re-architect code
01:49:18.400 | to make greenfield for developers.
01:49:19.880 | So it was one of my big goals.
01:49:20.920 | It wasn't a technical goal so much as, again, a social goal.
01:49:24.160 | People wanted a more standard spaced browser.
01:49:26.400 | They wanted less of a hairball that had been hacked on
01:49:29.400 | by ex-grad students starting four years prior.
01:49:32.040 | So we said, "We're gonna make a modular code base.
01:49:35.120 | We're gonna use a variant or an open source version
01:49:37.560 | of Microsoft's component object model,
01:49:40.000 | has reference counting and standardized V tables,
01:49:43.480 | virtual calls and C++.
01:49:45.240 | And we're gonna use JavaScript.
01:49:47.360 | We're gonna have a bridge between those two
01:49:48.720 | so you can script those components
01:49:50.160 | just like Java components.
01:49:51.560 | We're going to make a portable front end
01:49:54.800 | with a markup language for the user interface.
01:49:57.200 | Not tables, not HTML, but custom menus
01:50:00.400 | and dropdowns and toolbars."
01:50:02.880 | And that was called Zool, XML user interface language.
01:50:06.080 | And some real talent on the Netscape side
01:50:07.720 | delivered that, Dave Hyatt, who was instrumental in Zool,
01:50:11.320 | Chris Watterson, Joe Hewitt, Blake Ross.
01:50:15.680 | And Blake was an intern.
01:50:17.800 | He was like a high school aged intern at Netscape.
01:50:20.480 | And at some point we were innovating rapidly
01:50:23.920 | in the Mozilla world and Netscape was still caught up
01:50:26.960 | in this management mess from these acquisitions.
01:50:29.360 | And it wasn't delivering.
01:50:30.440 | And every year they were wondering if AOL was gonna come
01:50:32.800 | and start beheading the executives
01:50:34.280 | 'cause it didn't do anything useful.
01:50:36.080 | And there was this thought,
01:50:36.920 | you should take the Netscape browser engine
01:50:38.920 | and put it in the Windows AOL client,
01:50:40.720 | which was the dial-up client that all the increasingly aging
01:50:43.600 | users of AOL were using.
01:50:45.400 | Never happened.
01:50:46.240 | It would have been too big a change.
01:50:48.120 | So it wasn't clear why AOL bought Netscape,
01:50:49.760 | but as I said, they left it alone,
01:50:50.880 | but Netscape didn't leave Mozilla alone.
01:50:53.280 | And so in 2001, Mitchell called me up and said,
01:50:58.280 | "I'm no longer employed."
01:50:59.800 | And I was like, "What, you quit?"
01:51:00.840 | And no, no, this wasn't my choice.
01:51:02.320 | And there was a layoff, which maybe accidentally
01:51:05.280 | or on purpose got rid of Mitchell.
01:51:06.800 | But the funny thing was we had an open source project.
01:51:08.640 | We had a lot of the engineers on staff on our side
01:51:11.200 | and we had people we'd hired through the Mozilla community
01:51:15.200 | who were top-notch.
01:51:16.280 | They'd risen, they came in high quality,
01:51:18.640 | they knew the code, and they actually were better
01:51:20.440 | than the average or median hire of Netscape.
01:51:23.320 | And so the funny thing was the executive
01:51:26.920 | who thought they'd gotten rid of Mitchell on the layoff,
01:51:29.920 | on the next week's community call around Mozilla
01:51:32.640 | and what to do, there's Mitchell.
01:51:34.240 | And so this showed you can kind of transcend
01:51:36.760 | your boundaries of corporate open source
01:51:40.400 | if you get a project that has enough loyalty,
01:51:42.680 | even among the paid staff.
01:51:43.760 | 'Cause we had outside people contributing.
01:51:45.520 | We had people at Red Hat and a few other places,
01:51:47.920 | but the majority of the hackers were employed by Netscape.
01:51:50.560 | But a lot of them at that point had come from the community
01:51:53.440 | and others got the community and wanted to work with it.
01:51:55.920 | And it was really the weakest engineers at Netscape
01:51:57.840 | who didn't like Mozilla and didn't like the crucible
01:52:01.040 | of competing with the better programmers.
01:52:04.160 | - So if the project is good enough, it will rise,
01:52:06.600 | the Phoenix will rise out of the--
01:52:08.160 | - That's exactly right.
01:52:09.000 | And so we had this Mozilla code base
01:52:10.840 | that was getting better.
01:52:11.680 | In fact, I think at some point in 2002,
01:52:13.480 | when we declared Mozilla 1.0, I engineered a roadmap
01:52:17.320 | that successively through similar sort of six week,
01:52:20.040 | five week releases, like we all do
01:52:21.840 | with browser releases nowadays,
01:52:23.400 | Chrome does and Firefox braved us three weeks.
01:52:26.520 | We got to a point where we said, you know what?
01:52:29.640 | It doesn't suck.
01:52:30.480 | This is like the 1.0 that you want to release
01:52:33.160 | because if you hold it back any longer to polish it,
01:52:35.280 | you're denying others the ability to use it.
01:52:36.920 | It's like Pro Engineer, the mechanical CAD tool,
01:52:39.320 | embedded the code, they embedded the layout engine.
01:52:43.600 | And Mozilla 1.0 was like a Netscape communication suite.
01:52:46.920 | We had at that point gotten male people
01:52:49.520 | to reintegrate mail and news,
01:52:51.120 | and we had an editor for HTML.
01:52:53.560 | And it felt like a 90s suite, suite where.
01:52:56.560 | And it felt kind of bloated.
01:52:58.760 | And the people who were taking that Mozilla open source
01:53:02.080 | and then adding Netscape flavor to it
01:53:04.960 | were not calling the shots right.
01:53:06.480 | And they were also under ALS thumb a little bit
01:53:08.400 | in that they said, well, we should probably put
01:53:10.440 | the ALS instant messenger chicklet on the toolbar.
01:53:13.080 | And we should put the ICQ,
01:53:14.920 | the other messaging system that ALS had acquired.
01:53:17.240 | We should put the ICQ button on the toolbar.
01:53:19.520 | And pretty soon Netscape looked like a bit of a NASCAR
01:53:23.440 | badged version of Mozilla.
01:53:24.960 | And that also made Mozilla more popular.
01:53:27.080 | And yet they had contrived to fire or lay off the leader.
01:53:32.080 | And we'd carried on with an open source structure
01:53:38.440 | where Mozilla was still, you know, Mitchell was calling
01:53:40.800 | sort of management or project level shots.
01:53:44.400 | And I was calling technical shots.
01:53:46.040 | And we had a popular suite, but we thought,
01:53:51.040 | why not make it just a browser?
01:53:52.640 | Because it'll be simpler, it'll do one job well.
01:53:55.480 | And even then we can strip it down by having extensions.
01:53:58.720 | So Dave Hyatt and Blake Ross, the high school aged intern,
01:54:03.640 | did the first version, which was called Mozilla/browser.
01:54:07.200 | It was a small group of us, Ian Hicks and Asa Dotsler,
01:54:09.880 | me and Joe Hewitt and Hyatt and Blake.
01:54:14.280 | And Hyatt was really the senior hacker.
01:54:16.480 | He'd done all these things like amazing cross-platform menus
01:54:20.440 | through the user interface, market language.
01:54:23.440 | And he knew how to do tab browsing.
01:54:24.680 | He'd implemented it natively on Mac OS at the time
01:54:28.200 | in Camino, originally called Camara.
01:54:31.840 | He'd written multiple implementations,
01:54:34.240 | which was a thing programmers should do.
01:54:36.280 | It's like the V8 team did for those missing years
01:54:38.400 | when the rest of the Chrome team's like, where's V8?
01:54:41.000 | In fact, Dave's wife, Rebecca, told me a story
01:54:44.400 | about when they were at UIUC,
01:54:45.800 | they were also University of Illinois grad students.
01:54:49.400 | There was an assignment, it was a programming assignment,
01:54:51.240 | it was supposed to be due at the end of the semester.
01:54:53.240 | And Dave's friend was this, I'm gonna go think
01:54:56.800 | and I'm gonna design and I'm gonna make this platonic,
01:55:00.080 | perfect form of the program.
01:55:01.240 | And then I'm gonna write it at the end when it's due.
01:55:03.560 | And Hyatt just went in there and started hacking.
01:55:05.080 | And he wrote one version, he wrote a second version,
01:55:06.640 | a third version, end of the semester comes around,
01:55:09.240 | the friend's not doing too well.
01:55:11.160 | It wasn't perfect and it wasn't written.
01:55:13.000 | I'm not sure how that story ended for him,
01:55:14.800 | but Dave's version was a fifth iteration, it was great.
01:55:18.080 | And so he'd done that with everything you need
01:55:20.680 | in a tabbed browser.
01:55:21.640 | And this really showed well in Phoenix,
01:55:24.320 | what we called Phoenix and had to rename two more times.
01:55:27.120 | And Blake went to Stanford, he became a Stanford student
01:55:32.240 | and couldn't work on it.
01:55:34.000 | Dave Hyatt went to Apple in 2001.
01:55:36.560 | He was one of the founding Safari team members.
01:55:39.520 | - Interesting, wow.
01:55:40.440 | - But he was still blogging about tabbed browsing.
01:55:43.480 | I think Apple at some point said--
01:55:44.320 | - Did Safari have tabbed browsing?
01:55:46.080 | - Yeah, but it was because of Hyatt.
01:55:48.160 | Hyatt was quite a feather in their cap.
01:55:49.760 | Don Melton, who had been the engineering manager
01:55:53.360 | for Safari from the beginning, had been in that scape also.
01:55:56.480 | And so this is a diaspora of talent.
01:55:58.920 | And yet Hyatt was still kind of writing blog posts
01:56:01.520 | about how to do tabs right.
01:56:03.200 | And at some point Apple said, "Don't blog about that.
01:56:05.240 | "That's our proprietary tab technology."
01:56:07.560 | And it's like, "No, it's not.
01:56:08.480 | "It was an opera and I've refined it."
01:56:10.400 | So we had to replace people.
01:56:12.680 | And we had Ben Goodger, a New Zealander,
01:56:17.120 | we hired at Netscape, and he stepped in
01:56:18.920 | to be the Firefox lead.
01:56:21.240 | And we also had this weird circumstance
01:56:23.320 | where AOL finally did notice that Netscape
01:56:26.880 | was kind of an albatross, that they bought it
01:56:28.960 | for no particular benefit.
01:56:31.040 | And even then the AOL politics were also heinous,
01:56:33.840 | sort of East Coast politics.
01:56:35.320 | I remember taking two trips there
01:56:36.640 | 'cause I was a principal engineer.
01:56:37.760 | And so us principal engineers got trotted out
01:56:39.520 | to do dog and pony shows in Dulles, Virginia.
01:56:42.720 | And the AOL opera management was very East Coast in flavor.
01:56:46.360 | And they were at that time merging with Time Warner,
01:56:49.040 | which did not go well.
01:56:50.480 | So one of these years we went out there
01:56:51.960 | and we were all doing dog and pony shows.
01:56:53.400 | And there were these characters
01:56:55.040 | that were sort of like marketing guys,
01:56:56.320 | one of them was wearing a cravat,
01:56:57.640 | and one was named Reggie.
01:56:59.400 | And they were very you rather than non-you,
01:57:04.400 | or they were like what's Stillman's Metropolitan film,
01:57:08.240 | UHB, urban haute bourgeoisie.
01:57:13.240 | They were haute bourgeoisie, they were funny,
01:57:17.400 | and they were kind of useless and kind of preppy.
01:57:20.080 | And then the next year we went back and I said,
01:57:21.680 | where's Reggie?
01:57:22.520 | And it's like, oh, Reggie's not here anymore
01:57:24.080 | 'cause Time Warner realized that the merger
01:57:26.240 | wasn't in their interest either.
01:57:27.440 | And then the sort of knives came out.
01:57:29.080 | And these mergers rarely work, right?
01:57:31.760 | This is very difficult.
01:57:32.600 | You get these giant companies
01:57:33.760 | and they think there's gonna be synergy.
01:57:35.240 | That was the late '90s with Watchword.
01:57:37.280 | And there wasn't synergy with AOL buying Netscape,
01:57:39.280 | and there wasn't synergy with Time Warner and AOL.
01:57:41.200 | - But did AOL ever really work?
01:57:42.960 | Was it ever really cool?
01:57:44.240 | Like the same kind of fire and excitement
01:57:46.440 | that Firefox eventually created,
01:57:48.720 | was that ever there in AOL?
01:57:51.080 | - AOL was the right time to do a dial-up service
01:57:55.000 | that got distribution by basically
01:57:56.640 | leaflet-bombing compact disks on the country.
01:58:00.680 | And they beat out CompuServe and the other ones, Prodigy,
01:58:05.520 | and then the web happened.
01:58:06.920 | And so you had almost like this isolated continent,
01:58:10.920 | like some of the evolutionary biologists I follow
01:58:14.160 | make fun of the funny large marsupial mammals of Australia,
01:58:19.160 | how silly they are.
01:58:21.560 | - So AOL's like Australia.
01:58:23.080 | (Lex laughing)
01:58:23.920 | - And you saw it over time because they kept aging
01:58:26.420 | and they were using AOL to get online
01:58:28.200 | and they couldn't really use a web browser.
01:58:30.480 | And it became sort of a valued cohort
01:58:33.440 | 'cause they still have relatively high socioeconomic status
01:58:36.320 | and they have grandchildren, but it's going away.
01:58:38.480 | It's dying at some point.
01:58:39.520 | - Towards the end of the aughts, that decade,
01:58:42.160 | and then to the decade 2010 plus,
01:58:46.040 | that Firefox became this incredible,
01:58:48.680 | I forget when Chrome came out, but--
01:58:50.280 | - 2008, September.
01:58:51.120 | - 2008, but Firefox was the sexy, cool thing
01:58:55.120 | that represented a lot of the cutting edge technologies
01:58:57.540 | and all that kind of stuff.
01:58:58.380 | - Web 2, it was amazing.
01:59:00.180 | Tim O'Reilly and John Battelle did the first Web 2
01:59:02.900 | conference, which eventually became huge
01:59:04.460 | and they split it, but that was in 2004.
01:59:06.700 | That's right when Firefox was out.
01:59:08.580 | Craigslist was huge, it was killing classified revenue
01:59:11.700 | for newspapers, but there was just this ferment.
01:59:14.460 | People starting--
01:59:15.300 | - Wikipedia along there somewhere?
01:59:16.700 | - Gmail was already done and it was an impressive web mail.
01:59:19.860 | There were others before it like Hotmail,
01:59:21.180 | but Gmail was really impressive from Google.
01:59:22.940 | And Google Maps, people started seeing what could be done.
01:59:26.040 | They thought, how can you drag the map around
01:59:28.120 | and how does that work?
01:59:29.720 | And it was all JavaScript and images.
01:59:31.520 | - Gmail was 2003, four?
01:59:34.520 | - Yeah, I think it actually started quite early.
01:59:36.240 | It might have been 2002 or three, but by the time
01:59:38.460 | we started dealing with Google and Firefox
01:59:40.120 | to get the search deal, which was the main revenue source
01:59:42.520 | for Mozilla, and still is, 2004, early,
01:59:46.600 | Sergey Brin's, one of his trusted engineer guys,
01:59:49.760 | Fritz Schneider, made contact with me at Mozilla
01:59:51.960 | and we started talking and we realized search
01:59:55.420 | and browser need each other.
01:59:57.020 | And this is deeply true, right?
01:59:58.500 | This is still true.
01:59:59.820 | This is why a lot of the search engines
02:00:01.180 | have their own browsers.
02:00:02.300 | - Yeah, so in case people don't know,
02:00:03.700 | the main revenue source for the browser
02:00:05.620 | is the default search engine, which is kind of incredible
02:00:08.620 | to think about, that that is a revenue source.
02:00:11.500 | It's a little bit sad.
02:00:12.620 | - Yeah, it leads to this capture or kill effect
02:00:14.620 | where you have the search engine own its own browser
02:00:17.060 | and other browsers may struggle to get distribution,
02:00:21.300 | we talked about it earlier.
02:00:22.640 | - So where, and you said you've figured out
02:00:26.820 | that Google's working on its own browser at some point.
02:00:29.780 | - 2006, yeah.
02:00:30.760 | - 2006, so would you say Firefox versus,
02:00:33.260 | was Internet Explorer part of the war here
02:00:35.420 | or was it Firefox versus Chrome?
02:00:37.320 | - So Firefox didn't quite cause Microsoft
02:00:39.560 | to reconvene, they did do IE7, and I remember
02:00:43.760 | being on a plane back from the standards meeting,
02:00:46.240 | JavaScript standards meeting from Seattle, from Redmond,
02:00:49.000 | and there was some Microsoft guy in front of me,
02:00:52.120 | turns out my wife knew him from her past life
02:00:54.920 | before we married, and he was just this bearded big guy
02:00:58.200 | and he was like, we should have just killed Firefox
02:01:00.920 | in the cradle, all we needed to do was add popup blocking
02:01:03.520 | and tabs and we could have made Internet Explorer
02:01:05.560 | kill Firefox, and it's like, shoulda, coulda, woulda, pal,
02:01:07.840 | and I was right behind him overhearing this.
02:01:10.320 | But they didn't, they were slow and IE7 wasn't that great,
02:01:13.520 | and what really got them started, I think, was Chrome.
02:01:18.440 | And I talked to Larry Page in 2005, I think I said,
02:01:22.800 | we're talking about the Firefox relationship,
02:01:24.500 | but he was also saying, what about WebKit?
02:01:26.120 | This was Apple's version of the old KHTML engine
02:01:30.480 | from Linux, the KDE side of Linux, that was used
02:01:34.640 | in the Conqueror browser, also with Ks,
02:01:36.880 | that Apple had forked, and in 2005 was when Apple's
02:01:41.240 | principals, including Dave Hyatt, Maciej Stachowiak,
02:01:43.400 | some of my friends who are still there, said,
02:01:45.200 | we must stop patch bombing this poor KHTML project,
02:01:48.560 | we should make a proper Mozilla-like organization,
02:01:50.920 | WebKit.org, now it wasn't a separate non-profit
02:01:53.340 | or anything, it was still Apple, it was Apple-controlled,
02:01:55.240 | but they made their fork first class and they made it
02:01:58.960 | be something that they all worked in and lived in,
02:02:01.440 | and that was before Chrome, and then Chrome,
02:02:04.080 | Larry Page said, what about WebKit?
02:02:05.680 | I said, yeah, it's nice, I have friends who work on it,
02:02:08.000 | you might use that if you do your own browser,
02:02:09.560 | why don't you do your own browser?
02:02:10.480 | Don't worry about Firefox, you should do your own browser,
02:02:12.920 | you can have your own opinion of how it should work,
02:02:15.280 | and sure enough, they did, so by 2006, we knew
02:02:18.400 | they'd been working on it, some of my friends
02:02:20.160 | who'd been at Netscape did the original demo,
02:02:22.440 | and the demo wasn't what you thought,
02:02:24.020 | it didn't have the fast JavaScript yet,
02:02:25.360 | that was still off in Denmark on a farm.
02:02:28.520 | - Did it have tabs?
02:02:30.520 | - It had tabs, 'cause all browsers had tabs at this point,
02:02:32.800 | and it had this software fault isolation I mentioned,
02:02:37.480 | it was through process isolation, so in theory,
02:02:41.120 | each tab has its own operating system process,
02:02:43.600 | and so what's gonna take your tab down?
02:02:45.640 | Well, WebKit has bugs that can crash it,
02:02:48.440 | but Flash was still big then, all the restaurant sites,
02:02:50.840 | remember, and Flash crashed a lot, so the demo
02:02:54.320 | that I heard about, my friends at Netscape,
02:02:56.520 | as a lot of people did, inside Google was the sad tab,
02:03:00.500 | they showed an early version of Chrome,
02:03:02.160 | which is just this bare bones tab browser,
02:03:04.240 | they loaded a site with a known Flash vuln,
02:03:06.720 | and then suddenly, Flash crashes, and everyone expected
02:03:09.240 | the whole browser to go down, but instead,
02:03:11.320 | you got this little sad face in the tab,
02:03:13.120 | and you could reload it, and there it is again,
02:03:14.800 | so this was an improvement, it was a real move for security,
02:03:18.760 | it was based on a company they acquired called Green Border,
02:03:22.720 | they had some really big brains, like Olfar Erlingson,
02:03:25.080 | I think was involved, and they had done some exotic
02:03:28.160 | security stuff, but they ended up simplifying it
02:03:30.080 | to this process isolation, and it was good,
02:03:34.980 | and Firefox didn't have it at the time,
02:03:36.760 | so we were still struggling with security bugs.
02:03:39.700 | So we knew Chrome was coming, but it took two more years
02:03:43.920 | to come out, and we were still getting the Google search
02:03:47.960 | revenue, and we were still making Google the default engine,
02:03:51.840 | and Firefox was still growing, Firefox grew,
02:03:54.000 | I think until 2011, that was when it peaked,
02:03:56.860 | and as it started falling, it was because of Chrome.
02:03:59.840 | Chrome came out in 2008, and it was a comic book
02:04:02.880 | that leaked accidentally, that showed some of the people
02:04:04.800 | who worked on it, Lars Bach was in there, and so on.
02:04:07.240 | It was kind of soft launch, because they didn't market
02:04:10.040 | it heavily, they didn't push distribution,
02:04:12.560 | but Google had reason to worry about distribution,
02:04:14.800 | because Microsoft was doing a search engine,
02:04:18.760 | Bing, since 2007, in fact, when they came out with Bing,
02:04:22.000 | Google was worried that Microsoft would just brute force
02:04:25.200 | switch the default browser in everyone's Internet Explorer,
02:04:28.840 | or even Firefox on Windows, to Bing from Google,
02:04:32.520 | and Microsoft wasn't, I think, ready to dare
02:04:35.760 | the antitrust cops that way, even though
02:04:37.680 | they'd gone to sleep, and I don't think
02:04:40.360 | Bing was ready, either, but just in case it happened,
02:04:44.000 | Sundar Pichai, who rose very well based on this work,
02:04:47.760 | was sort of in charge of getting distribution deals,
02:04:50.600 | and he got Google Toolbar, and Google Desktop Search
02:04:54.920 | distribution, and if you remember those pieces of software,
02:04:56.800 | those were like desktop extensions, toolbars,
02:05:00.680 | or operating system extensions for doing desktop search
02:05:03.080 | in your local files, kind of like--
02:05:03.920 | - Oh, that's right. - Mac OS Spotlight.
02:05:05.880 | - Sadly died out. - It all died,
02:05:07.800 | and there were some features that we still missed
02:05:09.200 | that didn't make it into Chrome,
02:05:10.520 | but Sundar got OEMs to bundle those,
02:05:13.960 | and then he got enough of those deals
02:05:15.440 | that by 2007 or '08, Google felt, well,
02:05:18.400 | if Microsoft does the worst and tries to force Bing,
02:05:21.800 | we can reach in and reset it with that point of presence.
02:05:25.400 | So that was good for Sundar's career,
02:05:27.240 | and it was good for Google, but it never came to pass
02:05:29.160 | that they had to defend.
02:05:30.720 | Microsoft was still slow, and by the time they saw
02:05:34.240 | Chrome come out, then they did what would have been IE9,
02:05:37.360 | and then they said, we're gonna have a fast
02:05:38.720 | JavaScript engine to Chakra, Chakra Core,
02:05:41.360 | and they did okay.
02:05:43.160 | They were another process-isolated,
02:05:46.240 | fast JavaScript browser, tab browser.
02:05:48.960 | - So it sounds like there's a deep,
02:05:51.320 | fundamental coupling of search engine and browser
02:05:53.640 | that's mixing this whole thing up,
02:05:55.760 | and obviously Firefox doesn't have a search engine
02:05:59.960 | that's like, I mean, you're partnering with somebody
02:06:03.680 | with a search engine, with Yahoo or with Google or so on.
02:06:08.680 | - They tried Yahoo.
02:06:09.600 | That was unfortunate because I think,
02:06:11.400 | even though Marissa Mayer talked about it,
02:06:14.600 | she never pulled it off.
02:06:15.800 | They never restored the search team
02:06:18.320 | that had been laid off.
02:06:19.560 | I believe Carol Bartz was running Yahoo
02:06:21.440 | when Carol said, I've gotta get rid of
02:06:23.320 | one of the three expensive things.
02:06:24.520 | I'm gonna get rid of search.
02:06:25.920 | And those researchers went to Google and Microsoft,
02:06:29.760 | and there was no way to put Yahoo search back together.
02:06:32.480 | So when Firefox tried switching all their users
02:06:36.000 | who'd stuck with a default from Google to Yahoo,
02:06:38.840 | like mid-December 2014, a bunch of users said,
02:06:41.880 | what just happened to my Firefox?
02:06:44.040 | And others didn't notice right away,
02:06:45.280 | but over time they did, and so over the next year,
02:06:48.280 | the traffic just went away for Yahoo,
02:06:51.320 | and yet they were obliged, I understand it,
02:06:54.160 | I don't have inside knowledge, but this is leaked out,
02:06:56.640 | and Danny Sullivan's written about it,
02:06:58.320 | search engine, and I think the deal
02:06:59.920 | was like fixed payments to Mozilla.
02:07:01.480 | So Mozilla was getting a bunch of money for traffic
02:07:03.480 | that wasn't staying because users were resetting
02:07:05.880 | their default, and this shows how defaults are important,
02:07:09.200 | but they have to be good enough
02:07:10.520 | that the user doesn't override them.
02:07:12.560 | And a lot of the commercial value in popular apps
02:07:16.600 | is what are the default settings?
02:07:18.040 | What is the default search?
02:07:20.120 | - But oftentimes there's something, just like you said,
02:07:21.840 | I mean, if there's something compelling,
02:07:25.040 | that also can beat out the default,
02:07:27.240 | like tab browsing and so on.
02:07:29.040 | And that's where, I mean, we'll talk about Brave browser.
02:07:32.320 | It feels like now we're in this third stage
02:07:36.200 | where there's Chrome, Firefox, Edge, I guess it's called,
02:07:41.200 | and Brave, and these all seem like really exciting,
02:07:48.240 | I don't know, innovative browsers.
02:07:50.560 | They're all kind of copying off of each other,
02:07:52.240 | picking up the good stuff.
02:07:53.760 | - There's evolution again,
02:07:54.640 | especially on tracking protection.
02:07:56.240 | So privacy is this sort of global wave that's rising.
02:08:00.240 | I like to call it a wave
02:08:03.360 | because it's a large, somewhat chaotic structure.
02:08:07.040 | It's not a unitary good.
02:08:08.600 | You can't say I'm buying privacy for $3.
02:08:11.760 | I'm paying $3 for privacy.
02:08:12.720 | Some people think a VPN does this
02:08:14.280 | and are disappointed when it fails them,
02:08:16.000 | but often people use VPNs for region unlocking video
02:08:19.720 | or getting the US Netflix catalog.
02:08:21.400 | - Exactly.
02:08:22.840 | - But privacy is not a unitary good.
02:08:24.720 | It's complex and people are understanding it
02:08:26.880 | only over time and as they get burned,
02:08:28.920 | but there's a genie
02:08:30.680 | that's not going back in the bottle there.
02:08:31.960 | People are fed up.
02:08:33.360 | Apple has responded to this.
02:08:34.680 | Apple was always making Safari, I think,
02:08:36.600 | more of a privacy-branded browser from the very beginning.
02:08:40.320 | I think this was probably Steve Jobs.
02:08:42.280 | Safari had private windows, private tabs,
02:08:45.280 | before Firefox did.
02:08:48.240 | And these are only private in the sense
02:08:50.080 | that they don't leave local traces
02:08:53.040 | if you don't want them to.
02:08:54.000 | Turns out Safari does keep them around between shutdown,
02:08:57.200 | but the canonical model is no local traces
02:08:59.880 | after you close the private window.
02:09:01.800 | No leftover traces that you went to some site
02:09:04.960 | that you were embarrassed by
02:09:06.160 | or bought a gift for somebody you wanted to keep secret.
02:09:08.960 | - But there's still some level of tracking.
02:09:11.800 | - There's network tracking.
02:09:14.880 | Network privacy is not guaranteed at all
02:09:16.920 | because you're using the same internet and ISP
02:09:19.000 | as a public window, a non-private window.
02:09:21.360 | But Safari had that early on.
02:09:22.920 | They also had a cookie-blocking policy
02:09:26.040 | that might take a little explaining.
02:09:28.000 | If you know what a cookie is,
02:09:29.800 | it's a little bit of storage in the browser
02:09:31.320 | indexed by the name of the site.
02:09:33.400 | And it's really only the main name of the site,
02:09:35.040 | like bofa.com or something like npr.org.
02:09:40.040 | Every site can store some information in a cookie.
02:09:46.000 | Every time it's contacted by the browser,
02:09:48.640 | the previous version is sent back.
02:09:50.880 | And in the response from the server, the cookie's updated.
02:09:54.080 | So it's this little bit of storage in the browser
02:09:56.600 | that the site can keep updating,
02:09:58.200 | and it can store an encrypted version
02:10:01.480 | of your login credentials with a timestamp
02:10:03.800 | so you can stay logged in
02:10:05.960 | without having to retype your password
02:10:07.720 | every time you navigate,
02:10:08.840 | which is how it would be if you didn't have cookies.
02:10:11.240 | The web protocols, especially in the '90s,
02:10:14.440 | are so-called stateless protocols.
02:10:16.000 | So you go to your bank, you log in,
02:10:18.760 | you go from your login confirmed page to your account view.
02:10:22.480 | If you didn't have a cookie, you'd be logging in again.
02:10:25.000 | - Every time you type in the password.
02:10:26.560 | - So that was a great thing about cookies.
02:10:27.880 | Lou Montuoli did it in a hurry in 1994
02:10:29.840 | before I joined Escape,
02:10:30.880 | and he did it for really holding that kind of credential.
02:10:34.840 | But even then, there was the image element
02:10:37.520 | embedded in the page,
02:10:38.560 | and the image gets fetched possibly from a different server,
02:10:42.000 | and that request carries the last cookie,
02:10:44.240 | which could be empty at first,
02:10:45.760 | and the response carries the updated cookie.
02:10:48.000 | So just by having images and cookies,
02:10:49.760 | you got tracking because that image server
02:10:51.440 | can be serving a little one-by-one pixel,
02:10:54.240 | and they still use the word pixel in ad tech,
02:10:56.520 | and that pixel can be served from the same server
02:10:59.360 | embedded differently with different URL spellings
02:11:02.160 | in the New York Times and ESPN.
02:11:03.760 | And as you go from one to the other,
02:11:05.880 | the image server can say,
02:11:07.000 | I haven't got a cookie for you, it's empty initially.
02:11:09.000 | I'm gonna assign you user number 1234,
02:11:11.240 | I'm gonna put a database entry in,
02:11:13.000 | and I see, by the way, I always fetch
02:11:14.480 | the name of the path part of the URL
02:11:15.960 | that I was in the New York Times.
02:11:17.440 | So you're a New York Times reader.
02:11:18.920 | And then you hit ESPN, same thing,
02:11:20.960 | and the database gets updated,
02:11:22.240 | and the number, user 1234 indexes in the database
02:11:25.520 | to a profile of you, you've been tracked.
02:11:28.080 | This was not intended,
02:11:29.360 | and it was too late to undo by the time I got to Netscape.
02:11:32.680 | I think Lou wanted to do Twinkies, he called them,
02:11:35.040 | and he was trying to solve several problems.
02:11:37.320 | He wanted them to be bigger
02:11:38.320 | 'cause initially cookies had a short size limit.
02:11:40.520 | I think he wanted to solve the third-party problem,
02:11:42.280 | but Tom Paquin, the engineering manager said,
02:11:44.960 | "Nope, no Twinkies, just cookies.
02:11:47.080 | "We're done, you're done, son."
02:11:49.040 | And that's how a lot of that stuff was.
02:11:51.480 | That's how JavaScript got frozen like a flying amber
02:11:55.400 | in some ways with that sloppy equality operator
02:11:57.320 | that I made 'cause of the early adopters.
02:11:58.960 | And the cookie got stuck with this tracking hazard,
02:12:01.840 | and then, because JavaScripts can be like images,
02:12:04.240 | they're embedded in the page.
02:12:05.880 | By the time of Netscape 3, I made that work.
02:12:08.640 | You can get a request with the last cookie value,
02:12:10.760 | and the response updates it.
02:12:11.880 | That's a tracking mechanism,
02:12:12.920 | and that's why you don't even need images to track.
02:12:14.880 | Now you just use scripts.
02:12:16.440 | So this whole tracking economy evolved,
02:12:20.000 | and it depended on these accidents of the '90s,
02:12:23.840 | these unintended consequences.
02:12:25.320 | - Well, it created some of the richest companies
02:12:27.200 | in the world, right?
02:12:28.040 | I mean, it's the social media--
02:12:28.880 | - All I got was T-shirts.
02:12:29.960 | (laughing)
02:12:31.160 | - All I got is this crappy T-shirt.
02:12:33.160 | Yeah, I mean, so that's the fundamental problem
02:12:38.160 | the world is facing now.
02:12:39.520 | They're looking at what social media has created,
02:12:42.040 | and they're looking at,
02:12:44.200 | and like a world is looking at itself in the mirror,
02:12:47.040 | and seeing that privacy is actually something,
02:12:51.000 | it's supposed to be like a nice thing to have.
02:12:53.520 | It's something that is, actually should be fundamental
02:12:57.280 | to the way we interact with the world,
02:12:59.240 | as part of our tooling,
02:13:00.600 | and that's where the Brave browser comes in.
02:13:03.520 | And I suppose others as well are playing with this idea,
02:13:06.040 | but Brave is at the forefront of that.
02:13:07.640 | So maybe can you describe what Brave is,
02:13:11.000 | and what are its key principles,
02:13:13.400 | and what's broken, and what is it Brave trying to fix?
02:13:16.120 | - So when I realized that these accidents,
02:13:18.400 | like the third-party cookie,
02:13:19.960 | the image or script that's tracking you,
02:13:21.840 | or the JavaScripts that can do it invisibly now,
02:13:26.040 | that all this stuff wasn't intended,
02:13:28.680 | and that Firefox had supported extensions
02:13:31.640 | that block some of these things,
02:13:32.640 | I thought, probably we should have browsers
02:13:34.720 | just block some of these things by default.
02:13:37.440 | These were not intended, and they're now unsafe.
02:13:39.760 | They're tracking you, there could be data breaches,
02:13:41.720 | malware distribution, bullying, and PsyOps,
02:13:46.720 | and other attacks on people.
02:13:48.420 | Block that stuff, block that JavaScript.
02:13:51.800 | I'm Dr. Frankenstein, I've got to deal with a monster here.
02:13:54.680 | But obviously you go to Gmail,
02:13:56.520 | there's so much a script there
02:13:57.560 | to make that amazing web client,
02:13:59.320 | that's okay, that's first-party JavaScript.
02:14:02.160 | So how do you tell the first from the third party?
02:14:04.000 | And it's not easy, it's not a matter of just
02:14:06.040 | what's embedded from a different server,
02:14:07.920 | because a lot of publishers use benign scripts
02:14:11.560 | from unrelated domains, or apparently unrelated domains.
02:14:14.360 | So you end up having to develop a sort of
02:14:16.320 | human and machine learning practice around blocking.
02:14:19.700 | And at Brave, we did that from the start,
02:14:22.320 | and built a research team to help drive it and automate it.
02:14:25.720 | We realized that protecting people needed machine learning,
02:14:28.920 | and around 2017, in spring,
02:14:30.400 | I talked to my friends at Apple about this too,
02:14:32.680 | and they were also doing what they call
02:14:34.560 | intelligent tracking prevention,
02:14:36.640 | which uses local machine learning in the browser.
02:14:39.320 | And the funny thing is, you know,
02:14:41.600 | great minds think alike,
02:14:42.920 | they were taking their third-party cookie blocker
02:14:44.800 | that was in Safari from the old days,
02:14:46.480 | and making it not have a big loophole.
02:14:48.520 | Because what they did was, in 2003,
02:14:51.160 | when Safari came out, they said,
02:14:52.000 | we're gonna block cookies that are from
02:14:55.220 | those third-party embedded elements,
02:14:57.240 | where you've never visited that site before.
02:14:59.160 | So I'm gonna pick an ad company that got sold to AT&T,
02:15:02.360 | so I'm not picking on anybody unfairly,
02:15:04.000 | appnexus.com.
02:15:05.120 | Have you ever been to appnexus.com?
02:15:06.640 | - Nope. - I've never been there.
02:15:07.800 | But I guarantee you, 10 years ago,
02:15:09.020 | you probably had, if you were using Firefox,
02:15:11.180 | you had a cookie, third-party cookie,
02:15:13.040 | 'cause you were being tracked by them.
02:15:14.960 | And they were using that cookie
02:15:15.920 | to build up a profile of you.
02:15:17.560 | In Safari, as long as the user never went to AppNexus,
02:15:20.720 | that cookie would not be set.
02:15:22.360 | And that was a real move for privacy early on,
02:15:25.600 | when jobs were still around, in Safari.
02:15:27.660 | But it had this loophole that if you do go to AppNexus,
02:15:30.620 | then why, it's okay to be a third-party cookie.
02:15:33.080 | So AppNexus did something very naughty.
02:15:34.920 | They took their ad partners,
02:15:36.840 | that put the actual ad you click on,
02:15:39.000 | and they said, "Hey, add a little script
02:15:40.240 | "so that when somebody clicks on the ad,
02:15:42.540 | "before it goes to your landing page,
02:15:44.420 | "redirect to AppNexus,
02:15:45.680 | "and we'll redirect to the landing page."
02:15:47.160 | And by doing that, they set a first-party cookie,
02:15:49.120 | and they got whitelisted.
02:15:49.960 | So it was a loophole they exploited.
02:15:51.640 | Intelligent tracking prevention in Safari
02:15:53.560 | was sophisticated enough to counteract this,
02:15:56.600 | and it did other things,
02:15:57.440 | and it's evolved since they did it.
02:15:59.280 | And we've evolved brave, too.
02:16:00.680 | And so when I say machine and human learning,
02:16:02.520 | there's a real set of techniques here.
02:16:05.560 | They have to fight--
02:16:06.400 | - This is a fascinating problem, actually.
02:16:07.560 | - Fingerprinting, right?
02:16:08.400 | Anytime you have a little bit of storage in the browser
02:16:10.680 | associated with a website,
02:16:13.540 | if the bad guy can get 32 websites,
02:16:15.520 | each one has a bit of storage that's 32 bits.
02:16:17.600 | You can turn the bit on or off.
02:16:19.800 | You can make four billion numbers.
02:16:21.240 | You can make an identifier.
02:16:22.240 | It's called a super cookie sometimes.
02:16:24.600 | There are weaker ways that are statistical.
02:16:28.840 | They're called fingerprinting.
02:16:29.760 | You have to block all of them,
02:16:30.740 | and you have to not only automate,
02:16:32.800 | you want to work in the web standards body
02:16:34.920 | to put privacy in by default, by design,
02:16:38.440 | from the get-go, not add it as an afterthought
02:16:40.480 | or go hog-wild with new web APIs
02:16:43.160 | that add a bunch more local storage
02:16:45.240 | or fingerprint surface area.
02:16:47.480 | And that's been a struggle, too,
02:16:48.640 | because guess who's the new Microsoft
02:16:50.880 | in the standards body?
02:16:51.720 | It's Google.
02:16:52.660 | And they're not in favor of privacy first.
02:16:55.880 | They wanna do privacy their way,
02:16:58.720 | only under, I would say, market pressure.
02:17:01.140 | But with Apple and with Brave leading the way,
02:17:03.620 | we block third-party cookies almost without exception.
02:17:06.260 | So we just block them,
02:17:07.900 | and that gives us a very strong privacy benefit,
02:17:11.500 | but it also means some sites just don't work right.
02:17:13.700 | Embedded YouTube videos might not work right.
02:17:15.460 | So we're adapting in a similar way to Apple's done with ITP
02:17:19.580 | to make third-party cookies blocked,
02:17:22.700 | but to sort of simulate what looks like
02:17:26.420 | a working third-party cookie for the site.
02:17:28.840 | It essentially tries to partition each site
02:17:32.320 | and its third parties into its own sort of cookie jar.
02:17:34.840 | - Got it.
02:17:35.680 | And so, like you said,
02:17:37.040 | is this both a human fine-tuning issue
02:17:41.080 | and a machine learning problem?
02:17:42.600 | - Yes, and as the humans learn,
02:17:44.520 | then they train the machine learning.
02:17:46.400 | - But maybe Google aside, or including Google,
02:17:50.560 | there's millions of dollars, if not billions of dollars,
02:17:54.120 | to be made from fighting the ways of Brave.
02:17:57.860 | - That's right, and it's been an interesting change
02:18:00.660 | from when we started in 2015.
02:18:01.980 | When we started, ad-blocking extensions,
02:18:04.460 | AdBlock Plus was one of the big ones
02:18:06.180 | that started on Firefox in 2006, I believe,
02:18:08.660 | had gotten to a certain level of use around the world,
02:18:11.020 | and browsers like UCWeb, UC Browser in Asia,
02:18:14.340 | had some amount of ad-blocking built in and on by default.
02:18:17.260 | So PageFare was a startup,
02:18:19.340 | and they measured ad-blocking adoption,
02:18:23.540 | and they tried to say, "Hey, publishers,
02:18:25.440 | "30% of the visitors to Pitchfork or Wire,
02:18:30.140 | "to Conda NAS properties, are using ad-blockers.
02:18:32.820 | "If we can somehow convince them
02:18:34.300 | "to lower their ad-blocking for your site,
02:18:37.280 | "that could be like a 43% lift, right?"
02:18:39.460 | And 3/7ths, well, that's easier said than done,
02:18:44.300 | and PageFare and others, SourcePoint, many others,
02:18:46.620 | tried to either smuggle ads through
02:18:48.100 | or cajole the user into letting ads appear,
02:18:52.300 | and it didn't really work.
02:18:53.140 | Meanwhile, the ad-blocking adoption
02:18:54.460 | has just continued.
02:18:55.420 | Intelligent Tracking Prevention, Safari in 2017,
02:18:59.340 | Brave from 2016 on with very strong cookie-blocking
02:19:03.140 | and other protections, and this is not going away.
02:19:06.660 | The publishers used to rage against it.
02:19:08.920 | We would try to say, "We can help you.
02:19:10.380 | "You're dealing with users
02:19:11.880 | "who are already blocking all your ads.
02:19:14.040 | "We can try to put back some economics
02:19:16.720 | "that help the user and you,"
02:19:18.460 | that led to the basic attention token
02:19:20.020 | that we started with Bitcoin.
02:19:21.400 | "We can be your friend.
02:19:22.380 | "Don't just fingerprint us as an ad-blocker
02:19:24.900 | "and treat us as an enemy."
02:19:26.500 | But in 2015 or '16, it was like,
02:19:28.560 | "Nah, you're an ad-blocker.
02:19:29.460 | "Get out of here.
02:19:30.300 | "I hate you."
02:19:31.140 | And by 2017 or '18, it's like something's happening.
02:19:33.740 | The ad-blocking's not stopping,
02:19:34.940 | and we're all getting sort of pulled
02:19:37.020 | on the Google's plantation through AMP, A-M-P,
02:19:41.580 | or we're getting killed by the Google ad system we use
02:19:44.540 | because it's taking all the revenue,
02:19:46.580 | or it's permitting, or some other vendors we use
02:19:49.100 | are permitting ad fraud.
02:19:50.100 | And so a fake New York Times is getting paid
02:19:52.620 | by the marketer running an ad that a bot clicks on,
02:19:57.100 | and the real New York Times
02:19:58.220 | that's supposed to get the ad doesn't get it.
02:20:00.500 | - And there's something really broken
02:20:01.540 | about that kind of system.
02:20:02.380 | - And that fraud is mediated through Google's ad exchange,
02:20:06.660 | which is the biggest of them all,
02:20:07.900 | and Google takes a fee.
02:20:09.660 | There's a flip side of that,
02:20:10.700 | which is malware distribution, malvertising,
02:20:12.660 | where fake advertisers put malware payloads
02:20:16.300 | in exploit kit loaders in JavaScript,
02:20:19.340 | and they smuggle them in ads onto real publisher pages.
02:20:22.500 | The ad exchange takes the fee.
02:20:24.500 | Now, I'm not a lawyer.
02:20:25.620 | I'm not gonna say this is a RICO predicate,
02:20:27.140 | but why is the ad exchange facilitating fraud
02:20:30.260 | and malware distribution and taking a fee?
02:20:32.100 | It's not right.
02:20:32.940 | - As opposed to just fighting,
02:20:33.980 | this is the really interesting thing about Brave,
02:20:35.700 | is as opposed to just fighting
02:20:37.700 | and then being treated like an ad blocker,
02:20:39.980 | you're providing an alternate.
02:20:42.060 | There's a philosophical idea here
02:20:45.460 | that might change the nature of the internet
02:20:47.500 | with a basic attention token.
02:20:49.220 | - Yes.
02:20:50.060 | - Maybe what is basic attention token, BAT,
02:20:54.060 | and how does it work?
02:20:55.300 | - Okay, I'll tell the story first by saying how I came to it.
02:20:58.180 | I realized for a long time at Firefox,
02:21:00.820 | we were dependent on this Google search deal,
02:21:02.940 | and I thought, now that Chrome's out,
02:21:05.700 | maybe that's gonna go away.
02:21:07.100 | At some point, Google will say,
02:21:10.740 | Firefox, like old yeller, you saved me from the rabid beast.
02:21:14.620 | Now I have to shoot you in the head.
02:21:16.340 | Done your job, sad but true, goodbye.
02:21:19.660 | And what can we do?
02:21:21.780 | And I think Mozilla doesn't know what to do.
02:21:24.140 | This is something that I couldn't solve there,
02:21:25.900 | and I don't think they can solve.
02:21:27.220 | But I thought, why is the browser
02:21:29.460 | the sort of passive servant of these big tech companies?
02:21:32.300 | Why is it a blind runtime for ad tech JavaScripts,
02:21:36.460 | including from Google?
02:21:38.100 | Why doesn't it block some?
02:21:39.220 | And if it blocks some, why can't it reconnect users,
02:21:43.940 | readers, fans, with publishers, creators, websites?
02:21:47.480 | Why can't it help people make direct payments
02:21:51.220 | or even possibly get an ad revenue share
02:21:53.980 | for private ads that are placed in the browser?
02:21:56.300 | The ads are all placed in the browser.
02:21:57.580 | Some people have this sort of model
02:21:58.820 | that the server's painting the ad into some flash,
02:22:02.360 | combined package or into some giant image,
02:22:06.500 | and then it all gets sent down.
02:22:07.620 | That's not how it works.
02:22:08.600 | All the ads you see on the web are placed in your browser
02:22:11.340 | by it calling out to various ad tech partners,
02:22:13.980 | and Google's among them.
02:22:15.620 | And so if you block those scripts,
02:22:17.560 | you break the advertising flow of money
02:22:22.420 | from the brands and their agencies to the publishers.
02:22:26.300 | And if you want to reconnect it directly with the user,
02:22:29.460 | you have limited choices.
02:22:30.420 | The user generally isn't gonna sign up
02:22:31.940 | with a ACH bank connection or a credit card.
02:22:34.980 | The publisher isn't gonna sign up the user,
02:22:37.260 | except as a subscriber,
02:22:38.360 | and then they're gonna overcharge you
02:22:39.980 | because they want you to cross subsidize all the content
02:22:42.060 | and buy more than you read and all that stuff.
02:22:43.660 | And how many, you know, people are doing great
02:22:46.500 | who are big names like New York Times and The Washington Post
02:22:48.740 | but how many subscriptions are you as a user gonna pay for?
02:22:51.820 | This is why startups like Tony Hale's Scroll
02:22:54.420 | are trying to do a portable subscription system.
02:22:57.180 | - By the way, just on a small tangent there,
02:22:58.860 | even the New York Times is really annoying
02:23:00.900 | how difficult it is just to subscribe.
02:23:03.340 | There's way too many clicks.
02:23:04.660 | - They don't make it easy.
02:23:05.480 | And I had friends a few years ago, I think they fixed this,
02:23:06.740 | who would pay for the paper and then they'd go online
02:23:09.380 | and they'd get up charged for the digital
02:23:11.900 | and there was no break, there was no connection between them.
02:23:15.420 | But publishers are not that technical
02:23:17.300 | and they can't all get you to subscribe,
02:23:19.620 | you can't have a thousand subscriptions.
02:23:21.340 | So for a long time people talked about micropayments,
02:23:23.500 | there was Blendle and the other ones which came to the US
02:23:25.900 | but didn't grow.
02:23:27.620 | And I thought if you have just a browser
02:23:29.860 | and it's protecting you
02:23:30.700 | by blocking all this ad tech tracking junk,
02:23:32.940 | it can provide you an option that uses cryptocurrency
02:23:36.660 | to let you support your favorite sites
02:23:39.460 | and even YouTube channels.
02:23:40.620 | And that we prototyped with Bitcoin.
02:23:42.780 | And that meant the user had to be of means to contribute
02:23:45.980 | and willing to contribute.
02:23:47.520 | But it could be done on the Bitcoin blockchain
02:23:49.260 | and it could be fairly efficient
02:23:50.620 | even though Bitcoin went through a period
02:23:52.260 | when we had this prototype running in 2016 into 2017
02:23:55.780 | where Bitcoin was very congested and very slow to confirm
02:23:58.820 | and the fees got very high.
02:24:00.180 | And a lot of users who were not Bitcoin maximalists
02:24:03.580 | or even experienced, we helped them out
02:24:05.740 | by embedding a Coinbase buy widget
02:24:07.660 | and they had the income to buy but it was hard.
02:24:10.220 | It was like, do I buy $5 a month?
02:24:12.460 | But the fee is like 450.
02:24:14.300 | I better buy in larger batches, right?
02:24:16.460 | And they're like, I don't wanna own that much Bitcoin.
02:24:18.580 | So it became this painful thing.
02:24:21.220 | And the real idea that I had of private ads
02:24:23.840 | that pay the user a rev share couldn't be realized
02:24:27.860 | alone in that kind of system.
02:24:30.640 | In these cryptocurrency systems,
02:24:33.100 | especially with the blockchain we switched to Ethereum,
02:24:35.220 | you can have smart contracts.
02:24:36.980 | The Bitcoin system is not Turing complete
02:24:39.020 | so what you can do with the script is more limited.
02:24:41.140 | But you can still do sort of clever things
02:24:44.540 | even with Bitcoin script.
02:24:46.180 | What we wanted to do was sort of a three-sided ecosystem.
02:24:49.320 | We wanted users, creators or publishers and advertisers.
02:24:53.780 | And we wanted the advertisers to put money in
02:24:55.780 | just like they do today but without going through
02:24:58.060 | the Googles and the app nexuses
02:25:00.420 | and all these other ad tech companies.
02:25:02.000 | Because those companies take out a huge cut.
02:25:04.460 | The Guardian in the UK once did an experiment for a month.
02:25:06.980 | They bought out their own ad space.
02:25:08.820 | They put in a pound and they were paid 30 pence.
02:25:11.180 | 70% was coming out to the intermediary vendors
02:25:15.200 | they were using.
02:25:16.180 | - Wow.
02:25:17.020 | - And that's like the opposite of what the app store does.
02:25:19.260 | The app store takes 30% and gives the publisher 70%.
02:25:22.220 | So pretty broken.
02:25:23.580 | In the old days of the Superstation TBS,
02:25:26.180 | the media owner would get 85%.
02:25:29.900 | So these splits have become really unbalanced.
02:25:33.460 | And the middle players, the ad tech vendors
02:25:35.740 | are taking out way too much money.
02:25:37.500 | And they're doing something worse which has been noticed.
02:25:39.700 | They're letting not just the malware vendors
02:25:44.140 | but also the ad fraud side which fakes the publishers
02:25:47.260 | and clickbait merchants come in
02:25:51.020 | and steal traffic from good sites.
02:25:53.260 | Because once you have a certain audience
02:25:55.220 | identified at one site.
02:25:56.300 | Jason Kalkanis told me this about his experience
02:25:58.220 | with I guess it was in Gadget.
02:25:59.700 | Which site he was running.
02:26:01.800 | Once he started using an ad partner
02:26:04.180 | that was sharing his audience information
02:26:06.200 | across multiple sites,
02:26:07.400 | he saw his competitors stealing all his traffic.
02:26:09.540 | And then what's worse is the clickbait sites
02:26:11.540 | that just have much cheaper rates steal all that traffic.
02:26:15.500 | And that facilitates fraud, it facilitates fake news,
02:26:20.300 | all sorts of problems.
02:26:21.340 | So Grape blocks it and then we give users
02:26:24.080 | the ability to give back.
02:26:26.240 | And because we invented the basic attention token
02:26:28.460 | in Ethereum, we can do this three way split.
02:26:31.000 | And we can give users a share of the revenue.
02:26:33.660 | And if they want to take it out, they can.
02:26:35.500 | Now unfortunately for us and for all of blockchain,
02:26:38.220 | the regulators are saying,
02:26:39.780 | we're gonna have to know who you are.
02:26:41.300 | There's the Treasury Department's FinCEN agency,
02:26:46.300 | there's the Office of Foreign Asset Control's OFAC,
02:26:50.780 | there's the other regulators in the federal government
02:26:55.240 | that take a very dark look at things like money laundering
02:26:58.260 | and sending money to someone named Osama Bin Laden.
02:27:01.240 | So compliance starts to come in.
02:27:03.520 | And even now they're threatening for pure Bitcoin
02:27:06.080 | sending to some address.
02:27:07.800 | If you're a Coinbase, you're gonna have to know
02:27:10.280 | who's at that address.
02:27:11.120 | - Like the actual identities of people involved.
02:27:13.960 | - Now with Coinbase members, you sign up and they know you
02:27:15.880 | and they comply with the regulations.
02:27:16.960 | They're a regulated money services business.
02:27:19.460 | But if somebody's using their own self-custodial wallet
02:27:27.240 | where they have the hardware private key
02:27:29.340 | and they're not named and they want to send to that address,
02:27:32.480 | our friends in the federal government are talking about
02:27:35.080 | requiring at some threshold knowing who that is.
02:27:38.300 | - Some threshold that's unreasonable?
02:27:40.500 | - It's not that big.
02:27:41.640 | Yeah, I don't know how this will play out.
02:27:43.540 | I think crypto is here to stay.
02:27:44.820 | I think the beauty of being able to send peer to peer
02:27:47.260 | without any bank in the middle,
02:27:48.500 | without any huge wire charge and two day delay
02:27:51.660 | and all that nonsense, it's beautiful.
02:27:53.020 | And I've used it and I love it.
02:27:54.360 | But we're pragmatistic brave about crypto
02:27:56.420 | and we realize that anything like a revenue split,
02:27:59.600 | we can't facilitate without being licensed in a certain way
02:28:02.220 | and it requires knowing who the user is.
02:28:03.900 | So our default mode doesn't know who the user is.
02:28:06.460 | It instead imputes to the user's browser
02:28:09.540 | some of the revenue and allows that browser
02:28:11.820 | to steer it back to the creators.
02:28:14.940 | And we do have to identify the creators.
02:28:16.700 | But as things improve, and who knows how it'll play out,
02:28:20.460 | there should be a day when this full vision can be done
02:28:23.380 | more fully on a blockchain.
02:28:25.720 | But regulations and the practicalities
02:28:28.000 | of today's blockchains, which are not that fast
02:28:30.400 | and not anonymous over time,
02:28:32.700 | you fingerprint yourself over time,
02:28:34.780 | we do some of this with the browser.
02:28:36.260 | So one of the ideas of the basic attention token
02:28:39.780 | is to make a hybrid system that's stronger
02:28:42.500 | than blockchain alone.
02:28:43.420 | It's the browser and the blockchain.
02:28:45.940 | And the browser is this trusted endpoint software.
02:28:48.400 | It's this universal app.
02:28:49.940 | Everyone uses browsers.
02:28:51.100 | The bigger the screen, the more you're in the browser
02:28:52.980 | unless you install fat clients for things.
02:28:56.120 | I use Slack on Mac OS and it's like a browser.
02:29:00.160 | It's based on an electron framework we used to use.
02:29:02.160 | And it's just, it's not that great.
02:29:04.720 | Some of the people at Brave use Slack in Brave as a--
02:29:07.800 | - In the browser, yeah. - In the browser, yeah.
02:29:09.080 | - I use that often, yeah.
02:29:10.340 | - And I noticed on the iPad, I use apps less.
02:29:13.160 | The smaller the screen, the browser got handicapped
02:29:16.440 | by Apple and Android both.
02:29:17.960 | And it also can be slower or not have the right affordances
02:29:22.720 | to interface with the security limited APIs.
02:29:26.780 | But in principle, with the right permissioning,
02:29:28.740 | you can make the web browser just as good as any app.
02:29:31.680 | You make it be a super app.
02:29:33.380 | And that's part of our mission at Brave.
02:29:35.120 | So we want to have the economics that got captured
02:29:37.820 | by these big tech companies through tracking
02:29:40.060 | and through social networks.
02:29:41.380 | We wanna block that for your own safety
02:29:43.340 | and then let you opt into a cleaner world
02:29:45.520 | where you keep your data defended in your browser
02:29:48.020 | and you can actually realize value from it.
02:29:49.860 | So the way our ad system works,
02:29:51.340 | I mentioned it being private,
02:29:52.300 | but how does that work?
02:29:53.380 | We don't see your data at all.
02:29:55.020 | All browsers are sort of the mother of all data feeds.
02:29:57.780 | Your history, all your searches at all engines.
02:30:00.740 | Each engine sees the queries you send to it,
02:30:02.580 | but it doesn't see the others.
02:30:03.540 | But the browser sees them all.
02:30:05.260 | Machine learning in the browser that you can opt into
02:30:07.580 | can study all that in a very complete way
02:30:10.180 | and do a better job than Google does.
02:30:12.020 | Google has cookie and scripts across the web
02:30:15.220 | from acquiring DoubleClick.
02:30:16.540 | They have YouTube, they have Android,
02:30:19.100 | they have Search, which is still their big revenue lane.
02:30:21.620 | But they don't see everything.
02:30:22.660 | The browser sees everything.
02:30:23.820 | And if it can do a good job locally,
02:30:25.220 | and this is not advanced machine learning,
02:30:26.700 | this is not TensorFlow, this is like SVMs now,
02:30:29.580 | and Naive Bayes,
02:30:30.540 | then you can match intense signals,
02:30:35.060 | intense signals from those data feeds,
02:30:37.180 | the searches, the queries, the history,
02:30:39.700 | how much you're scrolling down a page,
02:30:41.700 | how much you redid a search.
02:30:43.820 | It's all blind browser algorithm.
02:30:45.780 | We don't see that data.
02:30:47.060 | And then pick the best ad from a fixed catalog per day.
02:30:50.820 | And the catalog is fixed across a large population per day.
02:30:53.420 | And it only updates once a day
02:30:55.100 | 'cause new offers come in and old ones expire,
02:30:57.620 | sometimes every week or every month.
02:30:59.620 | And that catalog, and there can be many such catalogs,
02:31:02.740 | is sold by our direct sales team.
02:31:06.220 | And so we're making an anonymous audience
02:31:08.940 | available to advertisers
02:31:10.300 | without the advertisers tracking them.
02:31:12.020 | Instead, each browser is a little machine learning system
02:31:15.300 | that's picking the best catalog entry.
02:31:17.180 | Now, the catalog is not the ads.
02:31:18.580 | Those are big, right?
02:31:19.420 | It's a video or a webpage.
02:31:20.620 | It's just the link to an edge cache.
02:31:22.500 | And there are many such edge caches.
02:31:23.800 | We're not trying to protect them from seeing your IP address.
02:31:26.540 | It's not really feasible.
02:31:27.780 | We could use Tor, but we don't yet.
02:31:30.260 | And then some keywords about the ad.
02:31:31.980 | So it's basically like metadata and a link.
02:31:34.900 | And that's what the catalog consists of,
02:31:36.300 | and that's what the machine learning picks.
02:31:37.460 | - And the machine learning is learning
02:31:39.020 | about you specifically, locally,
02:31:41.820 | in order to choose from the catalog of different ads.
02:31:44.180 | Couldn't this possibly be like a multi-billion dollar,
02:31:47.780 | isn't this taking on the Google ad?
02:31:51.060 | - Could be.
02:31:51.900 | - So like what, I mean, one question to ask,
02:31:54.620 | there seems to be some really profound ideas here
02:31:57.380 | that are different than what the internet
02:31:59.900 | has grown up to be.
02:32:01.900 | If Brave or something like Brave,
02:32:05.340 | the ideas, the fundamental philosophical ideas
02:32:07.580 | underlying Brave went out and runs 95% of the internet,
02:32:12.580 | how does that change the,
02:32:16.740 | what are the major things that changes about the internet?
02:32:19.620 | So social networks and then the creatives,
02:32:21.620 | like YouTube creators and all that kind of stuff.
02:32:23.660 | - So let's talk about that.
02:32:24.580 | First of all, if Brave gets 95%,
02:32:26.260 | I'm gonna demand a recount 'cause I won't believe it.
02:32:29.100 | I don't know.
02:32:30.060 | I think we're trying to put things into web standards
02:32:32.940 | that can be standardized across browsers.
02:32:34.980 | So the main value of Brave will be
02:32:37.380 | the trust users have in us
02:32:38.940 | and our ability to give the best deal to users.
02:32:41.300 | So 70% of the gross ad revenue we give to the user,
02:32:45.140 | and if they go through that KYC process I mentioned,
02:32:47.940 | they can take it out.
02:32:48.940 | They can also give it back.
02:32:49.940 | They can take some out, give the rest back.
02:32:51.220 | They can add basic attention tokens to give back.
02:32:54.660 | Some of them turn off the ads 'cause they just don't like ads
02:32:57.220 | but they put in $20 a month.
02:32:58.980 | I believe Zucco of Zcashfame does that.
02:33:01.100 | And that's very generous
02:33:02.020 | because the browser is just anonymously,
02:33:04.060 | based on his browsing,
02:33:05.300 | sort of keeping score on how much time he spent
02:33:07.460 | on this video, on that website.
02:33:09.500 | And if those sites verify in sort of a,
02:33:13.220 | like getting a domain certificate fashion,
02:33:15.220 | they can get paid.
02:33:16.220 | They can get part of his $20 a month.
02:33:19.220 | So that vision could go big.
02:33:21.140 | And if it does, I hope it's across multiple browsers.
02:33:23.380 | I don't know that they'll all compete well
02:33:25.940 | on the quality of the ads,
02:33:27.540 | the quality of the ad blocking and tracking protection.
02:33:30.300 | Those are subject to competition.
02:33:31.820 | It'll take a while to standardize them.
02:33:33.340 | But I think that would be a better world.
02:33:35.340 | It would have less counterparty risk,
02:33:38.180 | fewer fee takers in the middle, really just the browser.
02:33:40.700 | We're taking 30%.
02:33:42.740 | It's sort of the app store split.
02:33:44.540 | And if we get bigger, maybe we can take even less.
02:33:47.380 | Social networks, creators.
02:33:49.500 | If you look at YouTubers,
02:33:50.660 | a lot of them are the indies that are getting some size,
02:33:53.940 | are getting sponsorship deals.
02:33:56.700 | They're using Patreon.
02:33:58.860 | They're encouraging people to subscribe
02:34:01.420 | and give them regular money through Patreon.
02:34:04.300 | But that's centralized through Patreon.
02:34:06.100 | So there's censorship hazards.
02:34:07.660 | There's a 5% fee.
02:34:09.820 | What if that were a web standard?
02:34:10.940 | What if Brave pioneered it first
02:34:12.420 | and we took 3%?
02:34:14.500 | And we did it in a way that was through your browser
02:34:17.500 | so we couldn't censor it.
02:34:19.220 | - That's brilliant.
02:34:20.260 | Do you think it could be standardized across browsers?
02:34:22.820 | Can Internet Explorer come in again?
02:34:25.140 | - Yeah, protocols are easy to copy
02:34:27.940 | and they're meant to be interoperable.
02:34:29.540 | So there's a risk there.
02:34:31.100 | And the loyal users might be tricked into leaving you
02:34:34.020 | or they might, because of that distribution power,
02:34:36.180 | you might end up getting stomped.
02:34:38.300 | I don't know.
02:34:39.140 | I can't predict the future.
02:34:39.980 | I think antitrust is back on the case finally in the US
02:34:42.340 | and certainly in Europe, DG Comp is doing its thing.
02:34:45.460 | So I'm hopeful that we'll have a period of innovation.
02:34:48.860 | People were talking, like Elizabeth Warren was talking
02:34:50.700 | about breaking up the tech companies very clearly.
02:34:53.740 | Now she didn't win and I suspect that won't happen.
02:34:56.500 | But I also suspect that Google might be smart enough
02:34:58.460 | to see they should do something more
02:35:01.100 | than just put privacy perfume on Chrome.
02:35:03.420 | They should maybe get rid of DoubleClick or something,
02:35:05.340 | divest something.
02:35:06.740 | I don't know, it might happen.
02:35:07.820 | - So Brave might inspire Google to completely change
02:35:10.460 | the way they're doing things in the future.
02:35:11.300 | - They're already doing something you may have read about
02:35:13.900 | called the privacy sandbox or Flock,
02:35:17.660 | which they have this bird metaphor going,
02:35:20.020 | turtle dove, fledge.
02:35:22.780 | But these systems have been very Googly,
02:35:25.860 | kind of over-engineered and yet,
02:35:27.820 | depending on differential privacy,
02:35:29.260 | which has weakness over time, if you know how that works,
02:35:31.420 | it's kind of injecting noise to hide you in a crowd.
02:35:34.260 | But over time, an adversary can pull you out of the crowd.
02:35:37.660 | This doesn't look like it's gonna become a standard.
02:35:39.380 | Like Apple, Brave, Mozilla, we're not gonna just say,
02:35:42.700 | oh, Google, you saved us.
02:35:44.700 | You've invented the privacy sandbox,
02:35:46.060 | so we'll all just adopt it.
02:35:47.620 | Not gonna be that easy.
02:35:48.580 | It's gonna be more like pieces of what we do in Brave,
02:35:51.540 | this anonymous ad matching
02:35:52.780 | or the blind signature cryptography
02:35:55.020 | we use to confirm the ad impressions.
02:35:56.980 | That's David Choum's invention.
02:35:59.220 | That could get standardized.
02:36:00.340 | In fact, some of that is being standardized.
02:36:02.220 | Even Google's in favor of so-called trust tokens,
02:36:04.420 | which are Choumian blind signature certs.
02:36:07.460 | But they're not using them for ad confirmations
02:36:09.300 | 'cause they don't wanna blow up their own business.
02:36:11.460 | And they need to let some of the publishers they serve
02:36:14.740 | have other ad tech scripts on the page.
02:36:17.340 | And so they're kind of caught.
02:36:18.620 | And this is something I realized doing Brave.
02:36:19.860 | I thought, what's Google's innovators dilemma,
02:36:22.900 | apart from just being mature and having trouble innovating?
02:36:26.300 | It's that they have come to depend on this ad tech system
02:36:30.620 | that has all these vendors that publishers rely on,
02:36:34.980 | because publishers aren't technical enough.
02:36:36.380 | And I feel for the publishers,
02:36:37.980 | but I realized the users have to come first.
02:36:39.900 | And if you give the users a better browser that's faster,
02:36:43.700 | then you'll get enough users to give back
02:36:46.220 | or support publishers.
02:36:47.700 | The speed and the battery savings
02:36:49.420 | and the data plan savings are significant.
02:36:51.100 | There's so much bad JavaScript involved in ad tech
02:36:53.300 | that if you block it,
02:36:54.580 | you sort of chop off what's called the programmatic waterfall
02:36:57.500 | which chains a bunch of requests.
02:36:59.100 | - Yeah, that's one of the incredible things about Brave.
02:37:01.180 | I guess you're saying you should attribute it
02:37:03.180 | to the fact that the messy JavaScript, no offense.
02:37:06.580 | - No, it's good.
02:37:07.420 | It's not my excuse.
02:37:08.260 | (laughing)
02:37:10.100 | Is, I mean, Brave just feels faster,
02:37:13.900 | even then, I mean, Chrome was fast.
02:37:16.420 | One of the things that it was like impressive
02:37:18.420 | is it showed that browsers can be really fast.
02:37:21.620 | And Brave is even faster than that, which is incredible.
02:37:23.540 | - We've blocked so much.
02:37:24.380 | And it saves the network, which means data plan,
02:37:26.940 | it saves battery because the radio consumes your battery
02:37:29.420 | when it's running more to do those requests.
02:37:31.140 | And it's just stunning how many there are.
02:37:32.940 | Like some of my Google friends were like,
02:37:34.700 | oh, that's just that bad site, they'll fix it.
02:37:36.660 | And you actually do a survey of web pages
02:37:38.540 | that they're like mostly like that.
02:37:40.300 | I know Google engineers could make everything
02:37:42.420 | super efficient, but they can't,
02:37:44.260 | especially in antitrust court, do it.
02:37:45.740 | They cannot take over all the publishers and do that.
02:37:48.420 | They're trying with accelerated mobile profile, AMP.
02:37:51.740 | They're trying to pull publishers.
02:37:53.420 | They're like, oh, you poor publishers
02:37:54.580 | don't know how to make your pages fast.
02:37:56.860 | Put them on our AMP system,
02:37:58.140 | we'll give you extra placement in the search carousel.
02:38:00.620 | That's an antitrust problem for one.
02:38:02.380 | But it's also, publishers we talk to hate it
02:38:04.300 | because it degrades their brand.
02:38:05.980 | Now they look like a gig writer wrote a piece
02:38:07.980 | that's got Google's framing and AMP URL on top of it.
02:38:12.220 | And they're trying to fix that too.
02:38:13.300 | But it just looks like Google's
02:38:15.660 | borgifying all these publishers
02:38:17.060 | and they don't wanna be plugged into the BorgCube.
02:38:18.980 | They wanna build up their own brand and have loyal readers.
02:38:22.000 | So I'm in favor of giving the user's power
02:38:25.540 | to help all the publishers
02:38:27.700 | in this little platoons and the creators.
02:38:29.500 | And so we talked about Patreon.
02:38:30.820 | What about social networks?
02:38:31.940 | Well, they're inherently like search, a global algorithm.
02:38:35.380 | You're trying to find friends of friends.
02:38:37.060 | You're doing the transitive closure of a graph
02:38:39.300 | induced by this friend of relation.
02:38:41.660 | But you should own your friend relation.
02:38:45.280 | You should own your posts.
02:38:46.940 | They shouldn't be owned by somebody else
02:38:48.620 | who can take them down or censor them.
02:38:51.020 | And your friend relations,
02:38:52.000 | you should be able to find those friends on other networks.
02:38:54.180 | And so I've tweeted about this, I haven't built it yet.
02:38:56.660 | What if the browser could keep track of those for you?
02:38:59.700 | What if the browser could maybe combine Facebook and Twitter
02:39:03.460 | and you could find your friends on both
02:39:05.260 | and you could have a sort of multi--
02:39:06.500 | - So that relationship is not owned by Facebook or Twitter.
02:39:09.900 | It's owned by you through the browser.
02:39:12.020 | - They'll have terms of use and they'll say they own it.
02:39:14.020 | But if they zap you on one and you're still on the other,
02:39:16.980 | your friends find you
02:39:17.900 | and the browser could preserve a combined view.
02:39:20.820 | You could resurrect almost across networks.
02:39:23.780 | - It's something I wanna maybe quickly ask you about.
02:39:26.580 | On that front, there's been quite a lot of centralized,
02:39:31.340 | we talked about Wall Street Bets and then Robinhood.
02:39:35.240 | There's been centralized banning of different accounts
02:39:39.340 | and removing like Parler, for example, from AWS
02:39:42.660 | and this kind of overreach of centralized control.
02:39:46.780 | Is your hope that it's possible to,
02:39:49.380 | like what are your thoughts about that in general?
02:39:50.780 | Is it, and is it possible to create tools
02:39:54.500 | that give individual people the power
02:39:56.740 | to fight back against overreach of such control?
02:40:00.100 | - So we're talking about oligarchy, I do think.
02:40:02.700 | And that, if it controls a nation state, that's formidable.
02:40:05.320 | It's the tax and the police power, the military power.
02:40:08.280 | It means that you may have the Great Firewall of China.
02:40:10.880 | You may have people in China who are jailed
02:40:13.400 | because of their tweets, right?
02:40:14.920 | This is a serious threat.
02:40:15.760 | I can't minimize it or say that we'll win.
02:40:18.280 | I don't know how it's gonna go.
02:40:20.000 | But I do think, like I said earlier
02:40:21.680 | about the cunning of reason, people find ways around things.
02:40:24.040 | The internet routes around censorship.
02:40:25.880 | And this is not to endorse any particular bad faction.
02:40:28.860 | One of the things that happens
02:40:29.920 | when you try to wave the free speech flag too much,
02:40:33.040 | you say I'm not gonna censor anything,
02:40:34.640 | and you get colonized by terrible, terrible people.
02:40:37.920 | I don't care if you call them neo-Nazis,
02:40:39.840 | some of them could be doing illegal things.
02:40:41.840 | And you don't want them colonizing
02:40:44.000 | 'cause it'll ruin your reputation and destroy your business.
02:40:46.380 | So what you really want is that kind of
02:40:48.720 | user-first subsidiarity, that subjectivity.
02:40:51.560 | I want my social networks to be composited
02:40:55.320 | in some multi-social user interface
02:40:57.080 | where I don't lose track of people across networks.
02:40:59.480 | And if they leave one or they get banned from one,
02:41:01.640 | I can find them on another,
02:41:02.520 | I can still sort of thread them together.
02:41:04.080 | - Yeah, that's brilliant.
02:41:05.040 | - And this didn't happen because browsers
02:41:07.760 | got captured by the central powers.
02:41:09.880 | And why did they get captured?
02:41:10.880 | Mostly 'cause of search, and search is a central algorithm.
02:41:13.740 | So Larry Page said this too many years ago.
02:41:15.640 | He said, with search, you're giving up a little privacy
02:41:17.960 | by handing the query over to us,
02:41:19.840 | and then we'll error correct it.
02:41:21.440 | Alan Eustace used to be a Google executive.
02:41:24.320 | He said, oh yeah, we used to laugh.
02:41:25.600 | They'd all be doing typos,
02:41:27.000 | and they'd be typing the wrong word.
02:41:28.040 | And we're like, no, dummy, type that query.
02:41:29.760 | And it's like, okay, Google,
02:41:31.360 | might wanna dial back that ego a little bit.
02:41:33.040 | But yes, you do see all the queries,
02:41:35.240 | and you can improve them,
02:41:36.120 | and you can find the best results.
02:41:37.320 | And that was Google's forte.
02:41:38.880 | When we did the Firefox deal in 2004,
02:41:40.560 | Google was really good.
02:41:42.380 | And over time, SEO, which is an adversarial game,
02:41:46.240 | and Google itself buying all these companies
02:41:48.600 | and crowding its own results page
02:41:50.100 | with its own tied-in stuff, the YouTube--
02:41:53.800 | - It's the slip or slope that happens
02:41:55.280 | when you have control over these kinds
02:41:58.400 | of really important mechanisms
02:41:59.680 | as a set of data. - Yeah, monopoly capitalism
02:42:01.400 | or cartel, you get this with the Robin Hoods
02:42:03.520 | and the hedge funds.
02:42:05.320 | You get sort of the money interests take over
02:42:08.000 | and kind of abuse their power and wear out their welcome.
02:42:10.140 | So how do you get around that?
02:42:11.980 | You have to have either new land to go to,
02:42:15.440 | which some people's ancestors, not mine,
02:42:18.280 | did to found the country.
02:42:19.640 | I'm mostly Irish-German.
02:42:22.840 | You have new virtual space people go to,
02:42:26.080 | and that requires an ISP or a colo center
02:42:30.360 | or Amazon to host you.
02:42:32.120 | It requires domain name registrar who will not strike you.
02:42:36.000 | And so when Parler was taken down,
02:42:38.340 | I thought that was egregious.
02:42:40.920 | Parler, it was not well-designed,
02:42:43.040 | and I tried it out 'cause I tried all these things,
02:42:45.940 | but I didn't use it.
02:42:46.780 | And I also felt they were being unfairly scored
02:42:49.420 | for not moderating, because you can find tweets
02:42:51.240 | to this day that are horrendous
02:42:53.280 | and threaten all sorts of violence.
02:42:54.640 | Whereas Twitter, why isn't Twitter being taken down?
02:42:56.680 | But so it was very selective.
02:42:57.640 | It was the insiders who have the power
02:42:59.920 | are gonna take out the newcomer.
02:43:01.640 | And it looked bad, sort of like the hedge funds
02:43:05.360 | shorting GameStop.
02:43:06.760 | Looked bad.
02:43:08.040 | You're seeing a piece in Time Magazine this week
02:43:10.040 | that's basically saying,
02:43:11.280 | "Yeah, we interfere with the election,
02:43:12.600 | "but it was great, aren't we good?"
02:43:14.600 | I don't know if you've seen this piece yet.
02:43:16.600 | If you tried to say that as a Trump supporter in November
02:43:20.760 | after the election, you'd get banned from Twitter.
02:43:22.880 | But now Time, in its Twitter account,
02:43:24.760 | is saying, "We saved the day.
02:43:26.840 | "It's AFL-CIO and big business,
02:43:30.160 | "the Better Business Bureau got together
02:43:32.040 | "and kept Trump from spreading fake news."
02:43:34.960 | So the country's kind of broken.
02:43:36.840 | I don't know how to fix that.
02:43:37.800 | The oligarchs have run wild, in my opinion.
02:43:40.160 | And big tech is in the antitrust dock.
02:43:42.760 | What's gonna happen?
02:43:43.720 | I don't think they get out.
02:43:44.760 | I think some of the DOJ, and certainly the state cases,
02:43:47.880 | 'cause they're separate cases,
02:43:49.080 | are not gonna go away just 'cause
02:43:50.360 | somebody got elected differently.
02:43:52.360 | And these are career prosecutors,
02:43:53.840 | and they have a strong case.
02:43:55.880 | And Google's smart.
02:43:56.840 | Microsoft almost got split up, right?
02:43:59.560 | The judge, Thomas Penfield Jackson, he overreached.
02:44:02.720 | He didn't hold a hearing about the remedy.
02:44:04.960 | He just said, "I'm gonna break you up."
02:44:06.760 | And Microsoft appealed, and the higher-level court said,
02:44:10.440 | "Go back and figure this out.
02:44:11.500 | "You're not breaking them up.
02:44:12.340 | "You didn't even hold a hearing."
02:44:13.640 | And when they got back, Microsoft said,
02:44:15.340 | "Let's settle, let's settle.
02:44:16.400 | "We don't wanna get broken up."
02:44:17.660 | Because Jackson was gonna make the OpsCo,
02:44:20.500 | the operating system company,
02:44:21.580 | and the AppsCo, Office, Word and Excel.
02:44:24.740 | And that would've been a huge blow to Microsoft.
02:44:27.540 | - But ultimately, I don't know if you're optimistic
02:44:31.100 | or cynical about the possibility of breaking up big tech.
02:44:34.500 | To me, I'm optimistic that tools like Brave,
02:44:39.500 | I love the idea of owning your friendships.
02:44:42.500 | Users more and more owning the stuff is the only real way.
02:44:46.420 | Unfortunately, it's like the Wall Street Bets subreddit
02:44:48.540 | is the only real way to fight the centralized power.
02:44:51.100 | You can't break 'em up through regulation.
02:44:52.700 | It's very difficult.
02:44:53.540 | - Certainly, I don't wanna wait for the law.
02:44:55.220 | Netscape was long dead or acquired by AOL
02:44:57.660 | and effectively dead.
02:44:58.480 | It was only Mozilla that returned Firefox to the market
02:45:01.980 | by the time that the US v. Microsoft case
02:45:04.140 | was finally settled and the penalties were put in place.
02:45:07.260 | And yet, antitrust has a role to play.
02:45:11.020 | Those penalties caused Microsoft
02:45:12.660 | to kind of turn away from the web.
02:45:14.220 | They did Windows Vista, and they thought,
02:45:16.020 | "The web's too painful.
02:45:16.860 | "We got punished in court, and we had to standardize things
02:45:19.680 | "with those icky standards people."
02:45:21.300 | So they ran back to proprietary lock-in,
02:45:23.540 | and Windows Vista flopped.
02:45:24.740 | It was late, it was bloated, longhorn, remember?
02:45:27.800 | Now, what I was gonna say, but Google's smart enough,
02:45:30.420 | they won't get split up.
02:45:31.720 | They'll split something out to get off the hook, I think.
02:45:34.920 | - This is a complicated subject, but I, myself, was so,
02:45:39.340 | I decided to journey out from the world
02:45:43.300 | of being a researcher at MIT,
02:45:45.340 | and potentially doing a startup myself,
02:45:48.460 | and I've been thinking of,
02:45:50.580 | I wanted to come to Silicon Valley to do so.
02:45:53.700 | It's the land of the entrepreneur.
02:45:56.020 | And there's a lot of my friends,
02:45:58.020 | a lot of them are successfully,
02:45:59.660 | have been entrepreneurs themselves,
02:46:01.420 | have said, "Do not come to Silicon Valley."
02:46:03.700 | You've started, you ran amazing teams of engineers.
02:46:09.180 | You started a lot of successful businesses.
02:46:12.180 | I wondered if you could comment on
02:46:14.940 | why a lot of people are leaving California.
02:46:17.220 | Is there something that could be fixed about California?
02:46:19.860 | If you were starting a business today,
02:46:22.780 | would you consider somewhere else,
02:46:24.840 | like Austin, or some other place?
02:46:27.380 | Or is Silicon Valley still, is it just a little lull,
02:46:30.740 | everybody's being overdramatic
02:46:32.380 | during this particular year of the coronavirus, and so on?
02:46:35.900 | - I think, you know, even Austin's getting overheated,
02:46:38.260 | I hear, and I've had relatives and friends move to Texas
02:46:42.460 | within the last few months.
02:46:43.300 | So Texas as a whole is a big place.
02:46:45.860 | And, you know, people are moving to Florida,
02:46:48.480 | there's a big movement toward Miami,
02:46:50.700 | Peter Thiel, Keith, all these people.
02:46:53.260 | The mayor has been very business-friendly about it,
02:46:56.260 | which I think is just good politics.
02:46:58.620 | America is fundamentally a commercial republic,
02:47:00.660 | so you would think this would be what's happening.
02:47:02.540 | For a long time, California was the golden state.
02:47:04.420 | I came here in late '76 when I was a teenager.
02:47:06.820 | It's in crushing debt due to the lockdowns.
02:47:11.380 | It's got the highest taxes, that's gotta matter,
02:47:14.500 | people will do high taxes.
02:47:16.460 | It's got, likely fires every year because of the deadfall.
02:47:21.580 | It's not global warming,
02:47:22.780 | it's because the forests weren't managed
02:47:24.220 | like they had been in the first part of the 20th century.
02:47:26.860 | Just, I would say corruption at all levels,
02:47:31.120 | especially up to the governor,
02:47:32.260 | who, you know, famously was eating at the French Laundry,
02:47:34.460 | and claimed that the outside was inside,
02:47:36.740 | and they were out in masks off, and it was great.
02:47:39.520 | Do what I say, not what I do.
02:47:42.300 | Rules for thee, but not for me.
02:47:44.740 | When you see that in leadership,
02:47:47.580 | people either run, or they get rid of the leadership,
02:47:50.400 | so there's a recall drive,
02:47:51.420 | which is about to reach the threshold,
02:47:53.500 | or in the old days, they get their guns, right?
02:47:56.140 | You don't put up with this junk.
02:47:57.580 | - But ultimately, the thing that made Silicon Valley
02:48:00.700 | a special place, it gave freedom to young kids,
02:48:04.580 | entrepreneurs, young minds, brave minds,
02:48:08.140 | to think bold, to try different stuff.
02:48:10.780 | I mean, even if the taxes are high,
02:48:12.900 | so outside of financial stuff, outside of all of that--
02:48:15.500 | - Housing's super expensive.
02:48:16.940 | - Housing's super, so it's hard.
02:48:18.780 | Okay, everything about startups is hard.
02:48:19.620 | - Pencils narrow, and they didn't plan the roads, right?
02:48:22.820 | - Yeah.
02:48:23.640 | - They got rid of public transportation in LA,
02:48:25.980 | like the Who Framed Roger Rabbit cartoon show.
02:48:28.220 | They used to have trolley cars in Portland, too.
02:48:30.820 | The oil companies and the DOD conspired to build highways
02:48:34.260 | and make cars dominant, and the rights of way are long gone.
02:48:37.380 | Like Elon's gonna go underground.
02:48:39.700 | And I rushed him well.
02:48:40.540 | That's probably the only way to do it now.
02:48:42.740 | - But is it still a place, do you think it's possible
02:48:45.700 | that Silicon Valley is still a place where magic happens,
02:48:48.140 | where the next Google's built, where the next,
02:48:50.180 | I mean, Brave is built, where--
02:48:53.540 | - I think all good things come to an end.
02:48:54.860 | I think the problem is Silicon Valley
02:48:56.620 | had strong network effects through Stanford,
02:48:58.780 | through the angel investor networks and the wealth effect,
02:49:02.260 | and originally, you have to give
02:49:04.340 | the federal government credit.
02:49:05.180 | Like the ARPANET was a government project.
02:49:07.260 | Let's not kid ourselves.
02:49:08.100 | This wasn't wild free market, libertarian capitalism.
02:49:11.140 | This was all Cold War stuff.
02:49:12.740 | You had, out of the academia, you had Shockley,
02:49:17.020 | and then the Trader SA, and Fairchild, and Intel.
02:49:20.100 | But now, when's the last fab that was built in the Valley?
02:49:25.000 | MicroUnity might've been the last.
02:49:26.380 | I don't know, I haven't followed,
02:49:27.420 | but we built a fab in Sunnyvale,
02:49:29.220 | at MicroUnity, starting in the early '90s.
02:49:33.260 | And now the fabs are overseas.
02:49:36.540 | And the one thing that I will say
02:49:38.780 | that the oligarchs have intentionally done,
02:49:40.620 | in both parties, is sort of labor
02:49:44.180 | and environmental protection law arbitrage
02:49:46.140 | by going where the labor's cheaper,
02:49:47.540 | and the environmental laws aren't as strict.
02:49:49.460 | And that's polluted the hell out of parts of China,
02:49:51.980 | but it's made things, you can make cheaper junk.
02:49:55.060 | And this is not a story that's over yet.
02:49:58.860 | So what is Silicon Valley for now?
02:50:00.700 | It's for the network effect, the brain trust,
02:50:03.260 | the who you know, the parties,
02:50:05.380 | the Stanford sort of network.
02:50:09.460 | That's fragile too, over time, I'm afraid.
02:50:11.820 | Stanford, a lot of good professors I like,
02:50:16.060 | they still filter mainly based on socioeconomic status,
02:50:19.860 | but it's kind of a skate school.
02:50:22.140 | I had a friend hired out of Harvard 20 years ago
02:50:24.980 | at Netscape, and we talked about Harvard,
02:50:28.540 | and he said, "Yeah, there's still professors
02:50:29.780 | "who are great on the curve."
02:50:30.700 | And I said, "Oh yeah, I don't think
02:50:31.620 | "they're any doing that at Stanford anymore."
02:50:33.700 | And he said, "Yo, it was shocking.
02:50:35.040 | "Some of the students got Cs and Ds, and they were crying."
02:50:37.700 | It's like, yes, that's right,
02:50:38.540 | the precious deers can't take that at Stanford,
02:50:40.820 | so they get As and Bs.
02:50:42.460 | Now, you look at China, and people say
02:50:45.060 | what you know about China.
02:50:46.260 | They, true of Russia too, a lot of math science training,
02:50:49.700 | a lot of engineering, a lot of people
02:50:51.300 | who are doing their coursework to get the As and Bs.
02:50:55.220 | So I'm an American, I'm born on the 4th of July.
02:50:59.940 | - Really? - 4th of July.
02:51:01.540 | - Yeah. - Wow.
02:51:02.380 | - And America, as I say, fundamentally
02:51:03.940 | is a commercial republic.
02:51:04.860 | You can try to make it something else.
02:51:06.380 | You can say it's the new Atlantis and mystify it.
02:51:09.060 | You could talk about it in a more, I think, correct way,
02:51:11.300 | which is 13 colonies that grew,
02:51:12.840 | and then there's a lot of local,
02:51:15.220 | or in the original design anyway,
02:51:16.780 | the Federalist Papers talk about this,
02:51:18.860 | there's a lot of subsidiarity.
02:51:20.700 | But that's been eroded over time,
02:51:23.960 | and like I say, a lot of the offshoring has hurt.
02:51:26.660 | So what happened with coronavirus?
02:51:28.860 | People working from home.
02:51:29.980 | At first it was funny, 'cause I have friends at Google
02:51:32.100 | who used to grumble that not only did they have
02:51:34.420 | to come into the office, if they joined a different team
02:51:36.780 | that was centered at a different office, they had to move.
02:51:39.100 | Or if the VA team was reconstituted in Munich,
02:51:43.080 | which it was after Lars Bach just got tired of JavaScript,
02:51:46.700 | that they hired in Munich, or they hired PhDs
02:51:48.740 | from Germany and moved them to Munich.
02:51:50.780 | With coronavirus, everyone's working from home,
02:51:52.300 | and it's like, what a relief,
02:51:53.220 | I can work for Google from home.
02:51:54.820 | But then the next shoe dropped,
02:51:56.420 | and people started asking Mark Zuckerberg,
02:51:57.820 | hey, can I move to my hometown in the Midwest?
02:52:01.540 | And he said, okay.
02:52:02.380 | And they said, oh, can I keep getting my Silicon Valley pay?
02:52:05.060 | No. (laughs)
02:52:06.620 | We're gonna figure out what your cost of living there is,
02:52:08.460 | and we're gonna adjust your pay accordingly.
02:52:10.260 | - And these colonies and these little mini experiments
02:52:12.980 | that all combine to the big giant experiment,
02:52:15.100 | I have a, I don't know, I have this vision of America,
02:52:20.020 | which the country, so I was born in Russia,
02:52:21.340 | like I said, here, and this is truly a wonderful country.
02:52:24.980 | I wasn't born on the Fourth of July, but I might as well be.
02:52:27.500 | People still flee.
02:52:28.340 | - I still, and I'm red-blooded American at this point,
02:52:31.740 | and I have a sense that we've figured it out somehow.
02:52:35.420 | If Silicon Valley burns,
02:52:36.860 | another place will come up in its place
02:52:38.820 | that even more innovation, and people will move.
02:52:42.020 | And the remote work might change fundamentally
02:52:45.460 | how we work, or it might not.
02:52:47.220 | It might just give you the freedom to then create
02:52:49.540 | many other small Silicon Valleys throughout the place,
02:52:52.220 | like Austin included, but other places as well.
02:52:54.940 | And we've somehow figured it out.
02:52:57.660 | - I think that's true, that there will be more mobility
02:53:01.660 | and maybe new places that come up.
02:53:03.420 | I don't know if Silicon Valley has passed some sell-by date
02:53:07.940 | because it did hurt.
02:53:10.580 | The coronavirus hurt, the lockdowns hurt,
02:53:12.580 | in the sense that part of what keeps things going is social.
02:53:15.860 | And so a lot of young people,
02:53:17.140 | even before coronavirus, moved to San Francisco.
02:53:19.660 | It was very strange to watch,
02:53:20.900 | 'cause in the '80s, we all lived in the valley,
02:53:22.860 | and it was less populated, and San Francisco was grungier.
02:53:26.060 | It was more like Dirty Harry in the '70s.
02:53:28.620 | But by the '90s, and Jamie runs a nightclub there,
02:53:31.660 | and he's talked about this,
02:53:32.500 | you had sort of wealthy tech people moving in,
02:53:35.180 | South of Market, fancy townhouses being built.
02:53:37.780 | And that's continued in such a point
02:53:40.060 | that it's almost like, what's the movie
02:53:41.580 | by the South African director, Nels Jodie Foster,
02:53:43.900 | up in the space colony?
02:53:46.020 | Matt Damon is the guy on the Earth who has to go up.
02:53:48.740 | Anyway, it's about the stratification.
02:53:50.500 | It's about the great inequality.
02:53:51.660 | The people in the space station have amazing medical
02:53:54.860 | auto-docs that can extend their life
02:53:56.420 | or save them, cure cancer.
02:53:57.900 | People on Earth are all suffering, ground down in poverty.
02:54:01.280 | And that sort of happened while I was here.
02:54:06.220 | You saw a lot of money drive prices up
02:54:10.660 | along the narrow peninsula,
02:54:11.700 | and the single people wanted nightlife,
02:54:13.180 | so they were in the city,
02:54:14.500 | and the condos in the city got super expensive.
02:54:16.700 | And I know even Google friends
02:54:18.660 | who are socially responsible say,
02:54:20.780 | we should have more housing built.
02:54:22.780 | We should have, yes, in my backyard, not in my backyard.
02:54:25.860 | But that's not happening, as far as I can tell.
02:54:28.420 | And from the government to the incumbent landowners
02:54:32.500 | and renters, it's just not happening.
02:54:34.460 | And that has to drive people away.
02:54:37.460 | I appreciate that people come here,
02:54:39.660 | and you should wait for the prices to monitor.
02:54:41.900 | They will, but a lot of people are gonna go
02:54:44.780 | where the prices are lower.
02:54:46.500 | - You, and sorry for silly questions here,
02:54:50.340 | but just looking back, you have created things,
02:54:54.420 | have been part of creating things
02:54:56.540 | that have transformed this world,
02:54:58.580 | the world of technology,
02:55:00.740 | perhaps more than almost anything else.
02:55:02.700 | But you're still a human being,
02:55:07.580 | and unfortunately, this ride ends.
02:55:10.900 | Do you ever think about your own mortality?
02:55:13.780 | - Not too much.
02:55:14.620 | I mean, I'm Roman Catholic, so I am not afraid of death.
02:55:19.220 | I think a lot of people who have problems with death
02:55:24.220 | are suffering from some lack of either faith
02:55:30.140 | in their transcending death,
02:55:31.980 | or maybe they don't have children,
02:55:34.180 | or they feel like, they get later in life,
02:55:37.260 | and they feel like they've missed opportunities
02:55:39.220 | to do something that endures.
02:55:40.900 | And I sympathize with a lot, because I'm old.
02:55:43.500 | I got married fairly old, so I understand all that.
02:55:46.420 | Nothing human is alien to me, as Terrence said.
02:55:49.340 | But I don't fear it, no.
02:55:54.060 | - What do you hope your legacy is?
02:55:56.260 | - Yeah, it's gonna be JavaScript.
02:55:57.700 | I think, no, I think my legacy has more to do
02:56:01.060 | with my children and their children.
02:56:03.500 | I think it also has to do with web standards.
02:56:06.420 | It has to do with things like Brave.
02:56:08.300 | The things we did with Firefox, when we did,
02:56:10.720 | you know, I'm not gonna over-celebrate,
02:56:13.060 | but I think Brave is important,
02:56:14.100 | and we'll continue to prove this in a way
02:56:15.820 | that counts for many decades to come.
02:56:18.100 | But even Firefox, whatever its future fortune,
02:56:21.420 | showed you can restart the browser market.
02:56:23.300 | This thing you said about people opting out
02:56:26.180 | and routing around, you don't need everybody to do that.
02:56:28.580 | It's more like Taleb's stubborn minorities that do that.
02:56:31.200 | It's the lead users, Eric Van Hippel's lead users.
02:56:33.620 | You can be a few percent, you can tilt the market.
02:56:36.260 | And that can be done in spite of the incumbents,
02:56:39.380 | the moneyed interests, not being in favor
02:56:41.020 | of what you're doing.
02:56:41.860 | So I think what we did with Firefox won't be forgotten,
02:56:45.300 | and it needs to be done more, and we're doing it with Brave.
02:56:47.180 | And you could argue that other projects are doing it.
02:56:48.780 | In some ways, blockchain is doing it.
02:56:50.780 | The Robinhood take down the use of Robinhood
02:56:55.780 | by the Wall Street Bets kids, similar.
02:56:59.100 | So yeah, that kind of spirit endures,
02:57:01.300 | and I think it, in some ways, it's American, right?
02:57:04.300 | It's not hard revolutionary.
02:57:06.500 | It's not trying to burn the past and destroy everything.
02:57:08.780 | It's more like we have these certain, let's say, rights.
02:57:15.140 | We have duties, too, so there's some debate
02:57:16.900 | about which comes first in American jurisprudence
02:57:19.380 | and the founding documents.
02:57:20.340 | But as long as things are working,
02:57:23.020 | we'll be like pragmatic Americans,
02:57:25.880 | like de Tocqueville described in his writings.
02:57:29.300 | But if things get too out of whack,
02:57:30.960 | for one reason or another, too unequal,
02:57:33.380 | too oligarchic and abusive, we're gonna assert our rights.
02:57:37.060 | And even a few of us can do it.
02:57:38.860 | And even in the American Revolution,
02:57:40.440 | it was the minority who fought and put their lives,
02:57:44.100 | treasure and sacred honor at stake.
02:57:45.620 | It was a bunch of people went to Upper Canada,
02:57:48.860 | I think it was called, Ontario.
02:57:51.140 | - Yeah, that's a beautiful, I mean, that is,
02:57:53.540 | at the core, what your work stands for,
02:57:55.100 | is that a few people can have the power to transform society
02:58:00.100 | with just a few radical ideas,
02:58:01.580 | with just a little bit of code, change the world.
02:58:04.580 | - Gotta do it. - And that's empowering,
02:58:05.980 | and that is the American way.
02:58:07.200 | That's why this country is, I believe,
02:58:09.340 | the greatest country on Earth.
02:58:10.420 | That's not over-rheumatized too much,
02:58:13.000 | but I think some special things have already happened
02:58:16.940 | in this country and will continue to happen.
02:58:18.780 | And that's-- - And that spirit
02:58:19.820 | can continue no matter who comes here.
02:58:22.500 | They can adopt those folk ways and that spirit.
02:58:25.500 | - Brandon, I can't tell you how much,
02:58:27.540 | I was freaking out how much of an honor it is
02:58:29.500 | to talk to you.
02:58:30.340 | You're an incredible human being.
02:58:31.380 | This is one of my favorite conversations ever.
02:58:33.540 | Thank you so much for wasting all this time with me.
02:58:35.620 | I really appreciate it.
02:58:36.580 | - Oh, it seems like a breeze.
02:58:38.020 | My pleasure.
02:58:38.860 | - Thank you for listening to this conversation
02:58:41.340 | with Brandon Eich, and thank you to our sponsors,
02:58:44.400 | Jordan and Harberger Show,
02:58:46.000 | Sun Basket Meal Delivery Service,
02:58:48.440 | BetterHelp Online Therapy,
02:58:50.200 | and 8 Sleep Self-Cooling Mattress.
02:58:52.800 | Click the sponsor links to get a discount
02:58:54.840 | and to support this podcast.
02:58:57.000 | And now, let me leave you with some words from Jeff Atwood.
02:59:00.600 | "Any app that can be written in JavaScript
02:59:03.600 | "will eventually be written in JavaScript."
02:59:06.940 | Thank you for listening, and hope to see you next time.
02:59:09.740 | (upbeat music)
02:59:12.320 | (upbeat music)
02:59:14.900 | [BLANK_AUDIO]