Full Transcript

·YouTLDR

We need to talk about the Bun Rust rewrite

1:00:00EnglishBy Theo - t3․ggTranscribed Jul 15, 2026
Analyze another video with Pro30-day money-back guarantee
0:00

Stop me if you heard this one before.

0:01

Buns being ported from Zigg to Rust with

0:03

Claude. Well, it was. And there's a blog

0:06

post now. And I think it's fair to say

0:07

that this blog post is the end of Zigg

0:09

and the respect the community has. You

0:12

might be thinking that's cuz this blog

0:13

post tears Zigg apart and talks about

0:15

how terrible it is. That is not what

0:17

we're talking about at all. In fact,

0:19

this blog post does a great service both

0:21

in sharing the details of how Jared did

0:23

this port, but also being super kind to

0:26

Zigg and the Zig Foundation.

0:28

So, why is this the death of Zigg? You

0:31

should ask Andrew Kelly because the blog

0:33

post that's going to kill Zigg wasn't

0:34

written by Jared or the Bun community.

0:36

It was written by Andrew Kelly, the

0:38

creator of Zigg itself. He crashed out

0:40

so hard at Jared over him making this

0:44

move that I ended up crashing out, too.

0:46

I am refilming this intro for the third

0:48

time because the first time I filmed it,

0:50

I hadn't read the article yet. And the

0:52

second time I filmed it, I don't think I

0:54

accentuated how absurd things were

0:55

properly. This whole thing is stupid and

0:58

it is absurd just how stupid it is. And

1:01

as such, I had to split this video into

1:03

two parts. Part one is the smart part

1:06

where we go over how Jared did this

1:08

insane million plus line port in just a

1:11

week because he used the hell out of

1:13

Claude and AI tools to make this happen.

1:15

And I do genuinely believe there's a lot

1:17

we can learn from this. The other half

1:19

is me going through Andrew Kelly's post

1:21

and being the angriest I think I've ever

1:22

been in a video because it is you want

1:25

to see what it looks like to kill your

1:26

own language, it's this blog post.

1:29

Personally, I think the first half is

1:30

the better half of this video. But if

1:32

you just want to skip to the crash out,

1:33

I understand. But I would politely

1:35

request that you wait for a quick word

1:37

from today's sponsor. I'm going to be

1:38

real with y'all. If you're working on

1:40

something that other companies have

1:41

built before, there's a very good chance

1:42

you can vibe code it. Once the code is

1:44

in the training data, it's able to be

1:46

reproduced a lot, which is why something

1:47

as trivial as O should be really easy to

1:49

vibe code, right? Well, it is, but it's

1:52

hard to get right. And importantly, it

1:54

is changing really fast now, more so

1:56

than ever. If you want to replicate a

1:58

basic Google signin button that every

1:59

site uses, cool, fine. But what happens

2:02

when you need to onboard enterprises?

2:03

What happens when their agents want to

2:05

be able to sign up themselves? At that

2:06

point, I certainly hope you're using

2:08

work OS because these guys understand

2:10

what businesses really need. Not just

2:12

the libraries, which obviously they have

2:13

all of the frameworks, SDKs, and things

2:15

that you would expect, but more

2:16

importantly, what a business expects you

2:18

to have ready for them when you go to

2:20

negotiate a contract or trying to sign

2:22

up their teams. Or if their agents are

2:24

trying to sign up for your service, you

2:25

need a way for them to do that, too. And

2:27

computer use is great and all, but

2:29

filling out forms and dealing with

2:30

captures is far from the best use of

2:32

GPT56, especially in a world where

2:35

agents want to sign up to lots of

2:37

different things at the same time, and

2:38

you don't want to be rate limited. If

2:40

you set up an OMD for your service, then

2:41

agents can register on the behalf of

2:43

their users, which is a pattern I think

2:45

is going to catch on huge in the not too

2:46

distant future. And I'm not the only one

2:47

who feels this way. Cloudflare,

2:49

Firecraw, and more have already

2:50

partnered with Work OS to make this

2:52

standard real. Make sure your OTH is

2:53

user ready, enterprise ready, and agent

2:56

ready at soyv.link/workos.

2:58

Let's read what Jared has to say. I'm

2:59

actually pretty excited about this. I've

3:01

only seen parts of the article so far.

3:02

So, let's dig in. He opens with the

3:04

disclosure that he's now part of

3:05

anthropic, yada yada. Bunst started as a

3:08

line for port of ESU's JavaScript and

3:10

Typicer transpiler from Go to Zigg. He

3:12

wrote his first line of Zigg in April of

3:14

2021. He bet on Zig after seeing the

3:16

single page Zigg language reference on

3:18

HackerNews and getting really excited

3:19

about the low-level control and care for

3:21

performance. From the start, Bun's scope

3:23

was massive. There's going to be a JS,

3:25

TS, and CSS transpiler, minifier, and

3:28

bundler, npm compatible package manager

3:30

just like testr runner, node and

3:32

typescript compatible module

3:33

resolutions, proper HTTP1 and websocket

3:36

clients, as well as a Node.js full API

3:38

implementation for things like FSN, Net,

3:40

TLS, and dozens of other built-in

3:42

modules. The initial version of Bun was

3:44

written by Jared in one year in a

3:45

cramped Oakland apartment pre-LM in

3:48

Zigg. Fun fact about this, I had Jared

3:51

come over to my current apartment when I

3:53

first moved here so we could hang out.

3:54

And he was surprised by how close it was

3:56

to the bun office. And we had a

3:58

conversation about that and he realized,

4:01

oh, I didn't realize I could just like

4:03

live closer to the office. This seems

4:05

really nice. I should probably stop

4:06

living in my cramped Oakland apartment

4:08

after raising a bunch of money. and I

4:11

yelled at him about it and convinced him

4:12

to move here where he lives in a much

4:14

nicer spot. Back in like 2023, I want to

4:17

say he stayed in that apartment way

4:18

longer than he should have. Silly aside,

4:20

but like I have known this kid for a

4:22

while. He just kind of sits and does the

4:24

thing until somebody taps him on the

4:25

shoulder and says, "Hey, this other

4:26

thing next to it also matters." And his

4:28

apartment is one of the silliest

4:29

examples. Back to the article. The

4:31

default outcome for ambitiously scoped

4:33

projects like Bun is joining the

4:35

graveyard of dead side projects on a

4:36

GitHub profile page. Don't call me out

4:38

like that. Zigg made bun possible. I

4:40

would never have been able to build this

4:42

much in one year if it wasn't for Zigg.

4:44

Nowadays, the Bun CLI gets over 22

4:46

million monthly downloads. Popular tools

4:48

like Claude Code and Open Code bet on

4:50

Bun as their runtime. Open Code is

4:52

moving to Node for what it's worth.

4:53

Verscell, Railway, Digital Ocean, and

4:55

more all have firstparty support for

4:57

Bun. Bun Scope's also been a challenge

4:59

for stability. Here's a small sample of

5:00

bugs that they had to fix in the most

5:02

recent release. A bunch of weird

5:04

crashes, memory leaks, and out of

5:06

bounds. We could have kept fixing these

5:08

kinds of bugs one-off in perpetuity, but

5:10

we owe it to our users counting on us to

5:12

do better than that and systematically

5:14

preventing these kinds of bugs from

5:15

recurring. So, what did they start

5:17

doing? They patched the Zig compiler to

5:19

add address sanitizer support. They ran

5:21

their test suite with an address

5:22

sanitizer checks on every commit. They

5:24

shipped the Zig safety checked release

5:26

safe builds on Windows. They fuzz buns

5:28

runtime APIs 24/7 using fuzzy, which is

5:31

a JS engine fuzzer used by the V8 and JS

5:34

core teams. and they have a whole bunch

5:36

of endto-end memory leak tests. Most

5:38

projects don't go this far. He says it's

5:40

more than most do and I totally agree.

5:42

So why don't you just be really smart

5:43

and not make mistakes? Our bug fix list

5:45

felt bad and I was tired of going to

5:47

sleep worrying about crashes in bun. I

5:49

don't blame Zigg for that. Other users

5:50

of Zig don't have the bugs that he has

5:52

in mixing GC with manually managed

5:54

memory is an uncommon enough thing for

5:56

software to need that no language really

5:58

designs for it. We wouldn't have gotten

6:00

this far if not for Zigg and I'll always

6:02

be grateful. Until very recently,

6:04

programming language choice was a

6:06

one-way decision for a project like Bun.

6:08

Notice all of the nice things he's

6:09

saying about Zigg. Remember that for the

6:11

next thing we read, JS is a garbage

6:13

collected language, and a modern JS

6:15

engine like JSC or V8 have strict rules

6:18

around exception handling and the

6:19

garbage collector. Zigg like C doesn't

6:22

memory manage for you. And this is a

6:24

trade-off that for many projects is a

6:26

great reason to use Zigg. Z does not

6:28

have constructors and destructors and

6:29

most cleanup is expected to be written

6:31

out explicitly at each call site with a

6:34

deferrun correctly handling the

6:36

lifetimes of garbage collected values

6:37

and manually managed values has been a

6:40

major source of stability issues most

6:42

often small memory leaks and

6:44

occasionally crashes. Every memory

6:46

allocation has to be meticulously

6:48

reviewed. Where do these bytes get

6:49

freed? How do we ensure it only gets

6:51

freed once? Do we check for JS

6:53

exceptions properly? Is the garbage

6:55

collected pointer visible to the

6:56

conservative stack scanner? Is this

6:58

garbage collected memory or manually

6:59

managed memory? Versibility issues.

7:02

Knowing as early as possible is best.

7:04

Buzzing happens after code is merged. CI

7:07

happens when code is pushed. Runtime

7:09

safety checks in address sanitizers

7:11

happen when code is run, hopefully in

7:13

development before you get to CI. One

7:15

common way to reduce this class of

7:17

issues is to ensure cleanup code is

7:18

always run exactly once for the code

7:20

that needs it. Zigg's designed to be a

7:22

simple language with no hidden control

7:24

flows. So it prefers explicit defer

7:26

keyword to run code at the end of a

7:28

scope over C++'s implicit destructor or

7:31

Russ implicit drop for zig code. When

7:33

exactly should we be running this

7:34

cleanup though? If we're passing the

7:36

same pointer to many different

7:37

functions, how do we know when it's no

7:39

longer accessible and can be cleaned up?

7:41

How does it work when some functions

7:43

need to continue to reference the memory

7:45

after the functions called? Our current

7:46

approach is a mix of lifetimes,

7:48

reference counting, and paying really

7:50

close attention. This is a a scary one.

7:53

Many projects opt to answer these

7:54

questions through style guides. Tiger

7:56

Beetle's Tiger Style is an example in

7:58

Zigg and Google's 31,000word C++ style

8:01

guide is another. The challenge with

8:02

style guides is enforcement. How do you

8:04

make sure that the style guide is

8:06

followed? Historically, code reviews

8:08

were the answer with best effort

8:09

enforcements via llinters and static

8:10

analyzers. Having a rigid style guide

8:13

with clear ownership expectations

8:14

explicitly spelled out the type system

8:17

was a real option for Bun. Since Zig had

8:19

no operator overloading, we would likely

8:21

end up with a lot of code looking like

8:23

this. Just a ton of types all over the

8:26

place. Normally with Zigg, you write

8:28

much simpler, more elegant code, and you

8:30

don't have to manually dreference and

8:32

defer all over the place. And a lot of

8:33

why people like Zigg is this crazy

8:36

flexibility and simplicity they get out

8:38

of it that goes away if you have to

8:40

triple check every single thing you do.

8:41

About 20% of their code is written in

8:43

C++. So why not consider that? Things

8:46

like the JavaScript core which is the

8:47

engine that powers both Safari and Bun.

8:49

U Web Sockets and Usockets are both

8:51

phenomenal libraries which they use for

8:53

HTTP and the websocket server. IshPac

8:55

and isquick which are built on top of

8:58

C++ as well. Boring SSL, Google's open

9:00

SSL fork and SQLite. C++ instead of ZIG

9:03

would be a reasonable choice for bun. We

9:05

would get constructors and destructors.

9:06

We could delete lots of external C

9:08

wrapper code, but we would still be

9:10

reliant on style guides and forced

9:11

through code review. And even with ASIN,

9:14

memory corruption and memory leaks would

9:15

still happen. So why Rust? And I will

9:18

tell you as a friend of Jared, Rust is

9:21

far from his favorite language. He made

9:23

this as the right choice, not his

9:25

preferred choice. A lot of the bugs he

9:27

was talking about before are from use

9:29

after free, double freeze, and forget to

9:31

freeze in error paths. In safe rust,

9:33

these are compiler errors and they are

9:36

guarded with cleanups and drop. Compiler

9:38

errors are better feedback loops than

9:40

style guides. I absolutely agree. And

9:42

now that we have agents writing our

9:44

code, getting that feedback early

9:45

through a compiler is really useful.

9:47

Historically, rewrites are a terrible

9:49

idea. Yes, everything he is saying is so

9:52

agreeable here, I'm amazed anyone could

9:54

be mad as they read this article.

9:56

Excluding comments, bun is 500,000 lines

9:58

of Zigg. A rewrite in another language

10:00

would take a small team of engineers a

10:02

full year. It would mean freezing bug

10:04

fixes, security fixes, or feature

10:06

development for that time. The least

10:08

risky approach to getting something

10:09

shippable would be a mechanical port

10:11

from Zigg to Rust with a minimal number

10:14

of behavioral changes using the exact

10:16

same test suite we already use for

10:17

testing Bun. Fortunately, Bun's test

10:20

suite's already written in Typescript,

10:21

which means it doesn't depend on the

10:22

runtime's programming language. A year

10:25

of no userfacing impact is not a

10:27

realistic option they could consider.

10:28

So, enforcement through code style to

10:30

fix stability issues was their best bet,

10:32

and it was their plan when they added

10:33

the Rust inspired smart pointers to

10:35

Bun's codebase. But honestly, Jared

10:37

didn't want to do it. Homegrown smart

10:38

pointers offer worse ergonomics than

10:40

Rust and have none of the guarantees.

10:42

What if instead he spent a week testing

10:43

if Anthropic's new model could rewrite

10:45

bun in Rust? He didn't expect it to

10:47

work. A few days in, a high percentage

10:49

of the test suite started passing and he

10:50

saw how much the new Rust code matched

10:52

up with the original Zig codebase. His

10:54

opinion went from this is worth trying

10:56

to I'm going to merge this. I watched

10:58

this happen real time. I was in a group

11:00

chat with him. I did not think he would

11:01

bite the bullet and he did. Claude,

11:03

rewrite bun and rust. There's a lot of

11:05

ways to do a terrible job of this. For

11:06

example, prompting Claude to just

11:08

rewrite it. Don't make mistakes.

11:10

Definitely not what I did with

11:11

Typescript Go and Rust video probably

11:14

out by the time you're seeing this. and

11:15

then praying it would work is not what

11:17

he did. Think about how a person would

11:18

do this. The first big question is

11:20

incremental rewrite or everything at

11:21

once. Since he's already done ports like

11:24

this, like ES build from Go to Zigg, he

11:27

knew that everything all at once was

11:28

better. An incremental rewrite adds

11:30

temporary code that you hope gets

11:31

deleted eventually. It'll be painful in

11:33

the short and medium term and probably

11:35

never get deleted if I'm being real. The

11:37

second big question is how how do we

11:39

keep bun and rust the same bun as before

11:41

with the same architecture performance

11:43

and feature set while also getting the

11:44

language features of rust like the

11:46

borrow checker. How do we ensure the

11:48

team can still maintain it after the

11:49

rewrite? Their plan was to do the

11:51

rewrite that makes it look like they

11:52

transpiled the zig code to rust. They

11:54

can gradually refactor it to reduce

11:56

unsafe usage and look more like

11:58

idiomatic rust after the 1.4 release

12:00

ships. There's only two big questions

12:02

left. Loops that write and review code.

12:04

A lot of day-to-day engineering work as

12:06

software engineers can be oversimplified

12:07

into a loop. You task and while there is

12:10

stuff on the to-do list, you get a

12:13

result from calling the task. Then you

12:15

wait for feedback. promise.all review

12:17

result review result. Then you apply the

12:19

feedback to the result. Then you do it

12:21

again and again and again forever. A

12:25

task has some context associated with it

12:27

like a Jira ticket, a GitHub issue, etc.

12:29

The result is the code you wrote to fix

12:31

it. Code reviewers review the changes to

12:34

check for regressions and correctness

12:35

and then you address the feedback. He

12:36

rewrote bun and rust using about 50

12:38

dynamic workflows in cloud code. All run

12:41

continuously over the course of 11 days.

12:43

Each dynamic workflow was a loop like

12:45

this. A workflow for generating a

12:47

porting guide mapping zig patterns and

12:49

types to rust patterns and types.

12:50

Mechanically porting everyzig file to a

12:53

rs file matching the porting.mmd and

12:55

lifetimes.tsv files. Fixing every crates

12:58

compile errors. Get subcomands like bun

13:00

test and bun build to work. Get every

13:02

test and bun's entire suite to pass. And

13:05

several large refactors and cleanup

13:07

passes. These are the things that make

13:08

the dynamic workflows in cloud code so

13:11

powerful. If you haven't seen my video

13:13

called the good things about cloud code,

13:15

watch it cuz I go in depth on workflows

13:16

and how cool they are there. For most of

13:18

those 11 days, as well as afterwards, he

13:20

monitored the workflows, manually

13:22

reading the outputs to check for issues

13:24

and bugs and prompting Claude to edit

13:26

the loop to fix things. How do you

13:28

review a PR with 1 million lines added?

13:30

How do you start to build the confidence

13:31

needed to responsibly merge large

13:33

quantities of LLM authored code? You do

13:35

it with a language independent test

13:36

suite with a million assertions,

13:38

adversarial code review, and then when

13:40

something goes wrong, you fix the

13:41

process that generates the code instead

13:42

of just handfixing the code itself. They

13:44

did a bunch of adversarial review as

13:46

well, always splitting the context

13:48

windows because you don't want to have

13:50

the knowledge of how it was built in

13:51

your brain. You just want to check it.

13:53

This is another one of the things that

13:54

dynamic workflows do well is you can cut

13:56

off that context window and set up

13:58

something else with a different one to

13:59

go explore by itself. Super powerful

14:01

tactic. So you'd have one implement and

14:03

then two or more adversarial reviewers

14:05

per implement. The reviewer's only job

14:07

was to find bugs and reasons why the

14:09

code doesn't work. The implement doesn't

14:11

review. The reviewer doesn't implement.

14:13

Yep, I do this a lot, too. The one thing

14:15

he doesn't have which makes it even more

14:17

impressive that this worked is I get

14:19

much better reviews when I have

14:21

different reviewers using different

14:23

language models and families of models

14:25

from different labs. So having one

14:27

reviewer on codeex and one on claude

14:30

meaningfully increases the quality of

14:31

the responses. You had to do something

14:33

big and expensive. It saves a lot of

14:35

time and money to derisk it first. And

14:37

then he discusses how he prepped. He

14:38

started by talking for 3 hours with

14:40

Claude about how to map the patterns

14:42

from the Zig code base closely to Rust.

14:44

Claude serialized the discussion into

14:45

the porting MD document which somehow

14:47

ended up on hacker news. After fighting

14:49

GitHub for 15 minutes, I found the

14:51

document, the ZGS porting guide. It has

14:54

the ground rules for how it wants to

14:56

structure the files, not inventing crate

14:59

layouts. Instead, use the ones that they

15:00

already set up. Don't use all of these

15:02

different packages because bun owns his

15:04

event loop ancest calls. No async, yada

15:07

yada, and the map to all the different

15:08

crates, all the allocators, all this

15:11

type of like how to map things. If

15:13

anybody saw this port and assumed it was

15:16

just like a blind go port, make no

15:19

mistakes, I would implore they read this

15:21

and see how much time and thought Jared

15:24

put into doing this port. I know I

15:26

hadn't done that before making my first

15:27

video and now I feel a little bad about

15:29

it because this is a great document with

15:30

a lot of useful context on how hard he

15:32

worked to do this right. He did a bunch

15:34

of adversarial reviews on these guide

15:36

files and as he says also manually read

15:39

over them. I love this be called out but

15:41

it's important. They did a trial run

15:43

before asking Claude to translate all

15:46

1448.zig files to RS files. He started

15:49

with just three. For each of the three

15:50

files, one implement wrote the new Rust

15:52

file. Two reviewed the changes and made

15:55

sure the behavior in the file matched

15:56

and then it followed the porting MD and

15:58

lifetimes MD files. And then one fixer

16:00

applied the suggestions. He wanted to

16:01

make sure he did this right. So he

16:02

started with just a handful of files. I

16:04

believe three he said here. And he

16:05

noticed that all of the claude instances

16:07

were stepping on each other. And if you

16:09

put each Claude in a separate work tree,

16:10

he would run out of disk space because

16:12

Bun's git repo is too big. So instead,

16:14

he asked Claude to edit the workflow and

16:15

instruct Claude to never run git stash

16:17

or get reset or any git command that

16:19

doesn't commit a specific file at once.

16:22

No cargo either, no slow commands at

16:24

all. Jar and I had a long talk about

16:25

this bit. I think the future is your

16:27

tool calls executing on another machine

16:30

so they don't step on each other. He

16:32

thinks you need to prompt around it and

16:33

he prompted around it here. I think this

16:35

idea of agents stepping on each other is

16:37

going to be one of the next arcs we go

16:39

through in the like agentic coding

16:41

world. How do we solve this problem? And

16:43

I would guess the different labs will

16:44

solve it entirely differently. And now

16:46

after all of that and breaking up the

16:48

workflows more, it finally started to

16:49

really write the code. At peak, Claude

16:51

was writing 1300 lines of code per

16:53

minute. Get on this level, Gary Tan.

16:56

You're not even close. Is this the first

16:58

real 100x engineer? It's insane, but it

17:01

worked.

17:02

11 days and 652 commits. Notice the egos

17:06

assistant timing. He forgot to increase

17:08

the default IOPS on the EC2 instance

17:10

that this was running on. So one slow GP

17:12

command was all it took to freeze disc

17:13

reads and writes for minutes. Yep, I've

17:16

even had that problem. And then he

17:18

treated the compiler errors as a work

17:20

cue. Another very interesting strategy.

17:22

When crate by crate, the trickiest class

17:24

was the cyclical dependencies because it

17:26

just Rust does not like that type of

17:28

thing. Also, Rust compiles really

17:30

slowly. So instead of having just one

17:32

crate or package like he did with Zig,

17:34

he wanted to split the code base into a

17:36

100 separate crates so the Rust code

17:37

could compile faster, but it needed to

17:39

avoid cyclical dependencies while

17:41

minimizing changes compared to the Zig

17:42

code. His PR to do this immediately

17:44

before starting the Rust rewrite was

17:46

insufficient. Instead of starting over,

17:48

he wrote another workflow to classify

17:50

where the code with cyclical

17:51

dependencies should go and write it all

17:53

down. Then another workflow to actually

17:55

do that work. This is the loop

17:56

engineering [ __ ] It sounds insane,

17:58

but when you find the problems and they

18:00

are at this scale, setting up a system

18:02

to allow the agents to prevent it or fix

18:04

it is a new type of engineering. And

18:06

it's cool to see it in practice and

18:08

written up as well as this is. There is

18:10

no piece of like media out there that

18:13

does this good of a job of explaining

18:15

something this chaotic and new. And it's

18:17

a weird artifact. Like I bet this blog

18:19

post will be referenced in five years

18:21

for very interesting reasons as the

18:22

start of this shift. It's super cool and

18:24

I get why he took so much time to

18:26

rewrite it.

18:28

Rewrite is not the right word. Writing

18:29

this blog post. I'm sure he didn't

18:30

rewrite this a bunch. And I know he

18:32

didn't have Claude write a lot of it.

18:33

This is a great Claudism here, too. I've

18:36

had Claude write longass comments

18:38

justifying things that it thinks are

18:39

okay. And he told it specifically, if

18:42

you need a paragraph long comment to

18:43

justify why the workound's okay, the

18:45

code is wrong. Fix the code. I like this

18:48

a lot. I'm going to steal this.

18:49

Specifically, he had to do this cuz

18:50

Claude was interpreting let's get all

18:52

the CR to compile as stub out the

18:54

functions with compilation errors.

18:56

Claude also started adding suspiciously

18:58

long explanatory comments to document

19:00

workarounds. So he added that rule

19:02

specifically for that. And then the

19:03

smoke tests models love saying smoke

19:05

tests. Once cargo check passed, getting

19:08

it to compile and run was next. It had

19:10

linker errors and then it panicked

19:11

immediately on start. So then you had to

19:13

get it to run the bun test like helper.

19:15

Once that worked, they could start

19:17

actually running the tests. He had a new

19:19

loop for that. It kept going. A lot of

19:21

the tests had memory leaks which is

19:23

crazy because Rust but again line for

19:24

line it's using a lot of uh unsafe not

19:27

going to have the benefits immediately.

19:29

He also noticed that the tests were

19:30

exhausting the maximum number of TCP

19:32

sockets on the machine. Tests were

19:34

reading and writing gigabytes of stuff

19:36

to disk and tests were spawning 10,000

19:39

plus processes. I had this problem too

19:41

with a big port I was working I hinted

19:43

at it earlier. I was working on porting

19:44

Go to Rust inspired by what he did here

19:47

and I had the processes spin up and fail

19:49

and memory leak and crash the machine so

19:52

many times that I had to build a lot

19:54

around that too. As he said, he needed

19:56

something stronger than please. So we

19:58

used systemd run with croups to limit

20:00

memory and CPU usage and isolate PIDs by

20:03

their namespace. The machine ran out of

20:05

disk space and crashed several times

20:06

regardless. Yep. And then they got the

20:08

test suite passing in CI. 2 days after

20:10

the first run, the failing list was down

20:11

from 972 test files to 23. A day and a

20:14

half after that, Linux went fully green,

20:16

and for the first time, it felt like

20:17

this Rust rewrite was actually going to

20:19

work. That is insane. Just crazy. The

20:22

rest of the time leading up to merging,

20:23

it was straightforward. A workflow that

20:25

looped on fixing CI test failures for

20:27

each platform until there were no more

20:29

test failures. Several workflows for

20:30

Windows related cleanup to ddup code, to

20:32

reduce unsafe usage, and to generally

20:34

clean up some stuff. Then he merged it.

20:36

Once 100% of the test suite passed in CI

20:38

on all platforms and he manually

20:40

verified the tests were actually running

20:41

and not being skipped. He ran a bunch of

20:43

commands locally to test things. Then he

20:44

pressed merge. Merging into main isn't a

20:46

versioned release. This is another big

20:48

thing that I've been emphasizing. Maine

20:49

shouldn't be prod anymore because

20:51

merging is too useful to have it also be

20:54

deploy. I have an action that you can

20:56

manually trigger in my projects that

20:58

will take what's on main and move it to

21:01

a prod branch and then trigger a deploy

21:03

manually rather than having main

21:05

autodeploy because then I can more

21:08

freely merge to main if things break on

21:10

staging or when I manually build the

21:11

package revert change etc. So the merge

21:14

to main wasn't a release it was

21:16

confidence to start really making sure

21:18

this could happen. This ended up being

21:20

over 6,500 commits and 1.78 million

21:24

lines written or rewritten. As I hinted

21:27

at at the start, this was an insane

21:29

number of tokens premerge. 5.9 billion

21:32

uncashed inputs, 690 million inputs, and

21:35

72 billion cached input reads, which

21:38

would have been 165,000 if you paid API

21:40

price. Crazy to have this number public.

21:43

And I know it seems insane because it

21:44

is, but there's a few things we need to

21:46

recall. First, if this was done by

21:48

humans, it would have been three

21:50

engineers over a year. And that year

21:53

isn't just, oh, you lost three engineers

21:55

for that time. It's all other

21:57

development has to kind of be paused or

21:59

mirrored, which makes it either more

22:01

expensive or unrealistic. Instead, it

22:03

happened in just a few days. So if you

22:05

assume all three engines made 200k a

22:07

year and it would have taken three

22:08

years, this is still cheaper because

22:10

it's 165k in a week of edge time instead

22:13

of 200k * 3 in a year of time. But

22:17

there's two other layers I want to dig

22:19

into here because the first and arguably

22:21

most important is that this just

22:22

wouldn't have happened. If this would

22:24

have taken a year, they wouldn't do it

22:27

because there's too much other [ __ ] to

22:28

do. as a shortterm experiment, it is

22:32

absolutely worth it just to to know if

22:34

it can happen and then if it does to go

22:36

further with it. So this isn't like 600k

22:38

versus 165. This is it didn't happen

22:41

versus 165k. But the other layer I want

22:44

to call out is that this is $165,000

22:47

right now. This is the most expensive

22:49

it'll ever be. This level of

22:51

intelligence is already accessible via

22:52

cheaper models because 56 soul just

22:54

dropped and it's way cheaper. And over

22:57

time, Anthropic and other labs will

22:59

release models that are this smart or

23:00

smarter for this price or lower. So, the

23:03

prices are going to keep getting better.

23:05

And when you factor in the margins that

23:06

Anthropic already spikes into their

23:08

product, between 50 and 80% from recent

23:11

rumors, this number is really not that

23:14

big in practice. So, yeah, 165K, big

23:18

scary number to have on the front. It's

23:20

going to get cheaper from here. It

23:22

wouldn't have existed otherwise. and it

23:24

was subsidized to all hell by the fact

23:25

that it was anthropic and this yeah this

23:27

just wouldn't have happened otherwise.

23:29

So people who think this number means

23:31

this that AI engineering is doomed or

23:33

whatever be [ __ ] realistic. The idea

23:36

that you can spend under 200k to port a

23:38

project as big and important as bun to

23:42

an entirely different language is a

23:43

thing that wouldn't have even been

23:45

fathomable 6 months ago. It is

23:47

unbelievable how fast the stuff is

23:49

moving. The most wrong I've ever been is

23:51

when I said we hit a ceiling. We are

23:53

blasting through any ceilings I thought

23:55

were there faster than I could have

23:57

imagined. And we're already getting dumb

23:58

comments. How can we say prices get

24:00

better? If anything like this continues,

24:02

it will get more expensive. No. Again,

24:06

use your brain. When new models come

24:08

out, they are either the same price or

24:10

more expensive because they are smarter.

24:13

At any given intelligence level, at any

24:15

given capability level, the price drops

24:19

constantly. So again, could a smarter

24:22

model come out that would be more

24:24

expensive for this? Perhaps, but you

24:26

don't need a smarter model. Fable 5 was

24:29

able to do it at this price. So as new

24:31

models come out that are just as smart

24:33

and cheaper, you can still do this for a

24:35

cheaper price. Will there be a new

24:37

smarter model you want to use for bigger

24:39

things? Perhaps. Will that model be more

24:41

expensive? Probably. But again, that

24:44

doesn't mean that what we're doing today

24:45

gets more expensive later. If you have a

24:47

task you can do today with an LLM and

24:49

then the same task with the same output

24:51

quality next year, on average that gets

24:54

five times cheaper year-over-year. So

24:57

yeah, I I've seen so much dumb

24:59

commentary around this number that it's

25:01

almost enough for me to crash out on

25:03

just that. But the dumb things that the

25:05

Zigg guy said are stupider. So we're

25:07

going to go there right after. I like

25:09

how he describes all of this as well. So

25:11

I'll read a bit more of what he said. If

25:12

he had three engineers working on this

25:14

for a year, they wouldn't have been able

25:15

to improve node compatibility, fix bugs,

25:17

fix security issues, or implement new

25:19

features, they never would have been

25:20

able to sacrifice that. The realistic

25:22

alternative was to do nothing and just

25:24

keep fixing bugs at the top of this post

25:26

forever. This is the bleeding edge of

25:28

what's possible today. Jared used a

25:30

pre-release version of Claude Fable 5, a

25:32

mythos class model. He also used Cloud

25:34

Code's new dynamic workflows, which

25:35

would keep 64 Clouds running for 11

25:38

days. He would have had to handwrite his

25:40

own harness to pull this off otherwise.

25:42

[ __ ] didn't have to. This is why it's

25:43

one of the things I've been so positive

25:45

about quad code for. It's a really cool

25:47

thing. Since merging the Rustport,

25:49

they've done 11 rounds of security

25:50

review with the Claude Code Security,

25:52

which is the white labeled whitelisted

25:54

special Claude code that can do security

25:56

stuff, probably using Methos. They've

25:59

had a 24/7 coverage guided fuzzing on

26:01

every parser in bun. Only 4% of the code

26:04

is sitting inside of unsafe blocks. I

26:06

called them out for the unsafe thing

26:07

before, but the important piece is that

26:09

78% of the blocks are literally just one

26:12

line, usually a pointer that came from

26:14

C++ or a call into a C library. The

26:17

number should go down over time as they

26:18

refactor from a faithful Zigg port over

26:20

to idiomatic Rust, but they're going to

26:22

have to keep using the C and C++

26:24

libraries like JSC. So, there will

26:26

always have to be unsafes, unlike pure

26:28

Rust apps. The rewrite only introduced

26:30

19 regressions, which is crazy. He says

26:32

he doesn't say only here, but I will.

26:33

And most of the regressions came from

26:35

code that's syntactically identical in

26:36

both languages but semantically

26:38

different. He has some cool examples

26:40

here. Link in the description if you

26:41

want to see all of these syntax things.

26:43

But we're a vibe coding channel now. We

26:45

don't read syntax. Joking, but I want to

26:48

get into the other fun details here.

26:50

Specifically, the improvements. He fixed

26:52

128 bugs that are still reproducible in

26:54

the latest non Rust version back in

26:57

1314, which is the last Zigg one. They

26:59

reduced memory usage meaningfully

27:01

because of the cleaned up uh memory

27:03

utilization. They fixed every

27:05

instrumentable memory leak, which is

27:06

kind of crazy. In bun 1314, this build

27:10

process would slowly leak. So when you

27:12

ran up to 2,000 builds, it would have

27:14

almost 7 gigs of memory leaked. And now

27:16

it it leaks a little bit, but way way

27:18

less aggressively. It would only have

27:20

600 megs, a tenth as much RAM being

27:22

used. The binary is a bit smaller, too,

27:23

which is cool. Now it's 20% smaller on

27:26

Linux and Windows as a result of other

27:27

changes they made. It's two to 5% faster

27:29

which is pretty cool and it's already

27:31

been launched in production by plenty of

27:32

things including cloud code. Prisma

27:34

using it with Prisma compute and I

27:36

believe those are the only two examples

27:37

they have here but more coming very

27:38

soon. The team says it feels similar to

27:40

the zig codebase. They show syntax

27:43

examples so it hasn't been that bad for

27:44

them. Awesome. With one engineer using

27:47

fable and closely monitoring cloud code

27:49

we went from a start to 100% of the test

27:51

suite passing on all platforms in 11

27:53

days. One engineer can do a lot more

27:55

today than they could a year ago. I

27:57

absolutely agree. This is an awesome

27:59

write out up. Shout out to Jared. I am

28:01

sure nobody has anything stupid or rude

28:03

to say about this. How could you

28:06

possibly be dumb about something this

28:08

well written? This is going to be fun. I

28:11

have heard mixed things about Andrew

28:13

Kelly and I don't like calling out

28:15

individuals. When you call out my

28:17

friends, I'm going to read what you have

28:19

to say and if I have to do it publicly,

28:21

I will. So, here are Andrew Kelly's

28:23

thoughts on the bun rust rewrite.

28:25

remember creator of Zigg, he has

28:28

opinions. Let's see what he has to say.

28:30

Bun was almost inarguably the biggest

28:32

Zigg project and also a pretty heavy

28:35

contributor to Zigg both financially and

28:37

code-wise. And they've had a bit of a

28:39

rift. I personally know Jared put a lot

28:42

of work into trying to form a proper

28:43

Zigg community in SF and even like

28:45

hosting events and things. So, let's

28:47

read what he has to say. I'm already

28:49

getting mad just skimming. When Jared

28:51

joined the Zig community about 5 years

28:52

ago, I described him as someone who had

28:55

strong beginner energy. Referring to

28:57

Jared Sumar, one of the best engineers

28:59

I've ever known, as a beginner or having

29:02

beginner energy in your first sentence

29:05

sets up for quite a read, Andrew,

29:07

excited for you to call me a JavaScript

29:10

soy boy that has no idea what he's doing

29:11

after I give my thoughts. Back to the

29:13

article. He moved fast and tried a lot

29:16

of different stuff, jumping head first

29:17

into problems that he was not yet

29:19

equipped to solve, leading to mediocre

29:21

outcomes in terms of engineering, but

29:23

learning a whole heck of a lot in the

29:25

process. I see it as quite a healthy

29:27

attitude, particularly for young people

29:29

and students. This is the best way to

29:31

level up and learn new things. This is

29:34

such a pathetic attempt to look nice as

29:37

you belittle. We'll see where this goes.

29:40

You know, I would think that the

29:41

low-level engineering guy would want to

29:43

talk about the engineering and not this.

29:47

He's trying to make Jared sound like he

29:49

just learned how to code, not like a

29:50

very experienced engineer that we all

29:52

look up to. As Jared focuses efforts on

29:54

Bun, he began to attract attention. JS

29:57

being the most popular programming

29:58

language in the world, there are a lot

29:59

of potential eyeballs on a promising new

30:01

tool chain. The attention could have

30:03

been harnessed in a few different ways.

30:05

For example, he could have easily

30:06

achieved a solid living via

30:07

crowdfunding, even for San Francisco

30:09

standards. You guys have any good

30:11

examples of popular things that are

30:12

crowdfunded? Because I have a few.

30:15

Here's E18E, a very beloved thing in the

30:17

JavaScript ecosystem. It's the ecosystem

30:19

performance group. These guys look

30:22

through all of the packages we use and

30:24

find dead or undermaintained

30:26

dependencies in our tool chain. They are

30:29

so goddamn important and I have poured

30:31

quite a bit of money into supporting

30:32

them because again they need to be

30:34

successful. They need to do well. For

30:37

reference, they have raised a total of

30:40

$20,000.

30:42

$20,000

30:44

total from sponsorships, crowdfunding,

30:47

and individuals donating, including

30:49

individuals like the Chrome team

30:51

donating 10 grand and myself donating

30:54

five. And this is one of the most

30:55

important things in the JS ecosystem. 20

30:58

grand. I'm sure that's enough to fund

31:00

the SF standards. [ __ ] delusional.

31:04

Absolutely delusional. This is somebody

31:06

who doesn't understand how little money

31:08

there is in donating to open source

31:10

[ __ ] And now we get to where this

31:11

starts being very dirty. Having

31:13

graduated from the Teal Fellowship

31:16

School of Thought rather than

31:17

university, he was essentially groomed

31:19

from a young age into uncritically

31:21

embracing the Silicon Valley mindset.

31:24

and he took venture capital. I wonder if

31:26

somebody has a bone to pick. I can say

31:28

pretty confidently that everyone who is

31:31

currently betting on Zigg should

31:33

reconsider because the guy who makes

31:35

your language might crash the [ __ ] out

31:37

at you for no good reason. From the

31:40

beginning, Jared was appreciative

31:41

towards the Zigg project. He credited

31:43

Zigg on the Bun website for the

31:44

project's performance achievements. He

31:46

sent monthly donations to the Zig

31:47

software foundation that amounted to 60

31:49

grand per year. Remember that thing I

31:51

said about donations just a minute ago?

31:54

The total budget for E18E, by the way,

31:56

link in the description. You should

31:57

donate to these guys. They're really

31:58

important. Was a third of how much Bun

32:01

was donating just to Zigg. So, the Zigg

32:04

Foundation was getting three times more

32:06

money than one of the most important

32:07

JavaScript foundations I can think of

32:10

because he raised VC money to use for

32:13

things like hiring engineers and

32:15

donating to the language foundation.

32:18

According to our friend Andrew, he

32:20

didn't have to do either of those

32:21

things, but he chose to, and it was

32:23

pretty cool of him. Even in his blog

32:24

post that's being referenced here about

32:26

the rewrite, he expresses what is

32:28

perceived to be sincere gratitude

32:29

towards the Zigg project. It is sincere.

32:32

However, once Bun became a VC backed

32:34

startup, he started racing towards the

32:36

finish line. This is so obvious that you

32:39

do not know Jared at all or you're

32:42

willfully trying to misrepresent him

32:44

that it's crazy. Jared's whole thing

32:47

from day zero, from when I first met

32:49

him, was pushing to 11, going way harder

32:53

and way further than any human should,

32:55

contributing on GitHub so much that the

32:57

one day he didn't have any commits was

33:00

suspicious, got called out by Dax, and

33:02

turned out to be the day he was

33:03

discussing the acquisition. This is a

33:05

person who doesn't know how to not race.

33:08

He's either not moving, which means he's

33:11

asleep, or he is going to like

33:14

unbelievable speeds to get wherever he

33:16

is trying to. Trying to accuse him of

33:19

doing this cuz he's VCbacked instead of

33:21

him just being like this means you don't

33:24

know jack [ __ ] [ __ ] about Jared and

33:26

you better shut your goddamn mouth. Now,

33:28

instead of working on free and open-

33:30

source projects, learning and growing

33:32

with the community, Jared was running a

33:34

business. No, this is just how he does

33:36

things. Remember earlier when you said

33:39

that he moves fast and tries a lot of

33:41

different stuff, jumping head first into

33:43

problems? Seems like you know this trait

33:46

of his and instead of acknowledging this

33:48

trait of his, you're trying to

33:49

dishonestly represent him as other

33:52

because he was successful and raised

33:54

money. You're mad at him for doing what

33:56

it took to be successful in the space

33:58

because he will do whatever it takes to

34:00

make his [ __ ] happen because that's how

34:01

Jared is. It was at the point where he

34:03

suddenly became a manager that the

34:05

beginner energy started to hit

34:07

differently. It's one thing to choose a

34:09

poor work life balance, a different

34:11

thing entirely to demand it of others.

34:13

This is him [ __ ] on the Jared post

34:16

where he said that like working at Bun

34:18

isn't going to be a nice 40hour work

34:20

week with long vacations that he was

34:23

grinding and he wanted others that would

34:24

grind with him. And here I'll say a few

34:27

things. First and foremost, as much as I

34:29

love Jared, he isn't a great manager. I

34:31

talked to a lot of his team and we would

34:33

have to find ways to convince Jared of

34:35

important things that varied wildly in

34:37

our implementation methods. I have had

34:39

videos I put out about Bun that weren't

34:42

really because I wanted to do a video on

34:43

Bun. They were attempts to help the team

34:45

leverage important points against Jared

34:47

so the business would be more successful

34:49

and Bun would be more likely to win.

34:50

Sometimes you have to engineer a person

34:52

like Jared into the right box to do the

34:54

right thing. And that's just how it is.

34:57

I know I am this way too. I know my team

34:59

has a weekly meeting where they all talk

35:00

without me on how they can sigh up me

35:02

into doing the things I'm supposed to

35:04

do. That's just reality. Another part of

35:06

this reality is that Jared is really

35:08

hard to work with if you take a lot of

35:10

breaks. You could take a weekend off and

35:12

when you come back the project's been

35:14

rewritten in Rust. Like that's just how

35:16

he is. And if you're not trying to work

35:17

at that level, you shouldn't. And rather

35:20

than pretend or build a workplace he

35:23

doesn't want to work in, he just said

35:25

upfront what it's like. And if you think

35:27

this is a unique to bun thing that a

35:30

team formed by a person who works 80 to

35:33

90 hours a week wants people who work at

35:35

least 50 hours a week. If you think that

35:38

is crazy, there are much crazier things

35:40

I would have to show you in the city,

35:42

including but not limited to someone

35:44

coming for a oneweek trial, staying at

35:47

the office, and then not being allowed

35:49

to leave at risk of losing their dream

35:51

job for 6 months to a year living in the

35:54

office on an air mattress. I had other

35:56

examples, but honestly, I think I'm just

35:57

going to leave it at that because I

35:58

don't want to get in too much trouble.

35:59

And the amount of these types of things

36:01

I know of is insane. Jared was one of

36:03

the better people to work for. His

36:05

employees all love him, even when they

36:07

are frustrated with him and his

36:10

admittedly narrowfocused lockin mindset.

36:13

But the godamn guy was transparent about

36:16

this, and I don't think it's fair to

36:18

fault him for it. You even quoted him

36:20

here, and I don't think this quote's

36:21

that bad, especially in retrospect.

36:22

oven, which is the company that makes

36:24

bun, is going to be a grind, especially

36:25

the first nine months or so. If work

36:27

life balance means a lot of time spent

36:29

not working, this probably isn't a good

36:32

fit. Entirely realistic. Fun fact,

36:35

people talk to each other. You're right

36:37

about that, Andrew. And some of those

36:39

people have an audience like I do. And

36:41

now they're all going to talk about you

36:42

and how much of a [ __ ] you are. He

36:45

talked to those who interviewed for a

36:46

job at Oven. He talked to people who

36:48

worked there. Those people talked to

36:50

each other. Everybody talked to

36:51

everybody. The grape vine was large and

36:54

healthy and full of juicy grapes. And

36:56

all of those grapes contained the juice

36:58

of the same message. Jared was a stinky

37:00

manager. Poor communication, unrealistic

37:03

expectations, low empathy, no

37:04

experience. Just a total shitow from an

37:06

employment perspective. If you think

37:09

that is a total shitow, you have never

37:12

had a manager, much less a bad one.

37:15

Jared was far from a great manager. I

37:18

have said as much. I have told him as

37:20

much. I have said as much here. But you

37:23

don't join Jared's team expecting a

37:24

great manager. You join Jared's team

37:27

expecting a highly motivated, incredibly

37:29

talented person that is next to you as

37:32

you do crazy [ __ ] and get pushed harder

37:34

and harder. It's also worth noting very

37:37

few people left Oven at any point other

37:40

than the acquisition, which inherently

37:42

came with like a slight trim. That is

37:44

how it is. All the people who didn't

37:46

make it over with that got really really

37:48

generous severance. Consequently,

37:50

although Zigg community members were

37:52

eager to find work coding in Zigg on the

37:54

clock, most of the talent pool steered

37:56

clear of Oven and Bun. Huh. I wonder if

38:00

that's because Jared is a really bad

38:02

manager, as you say. Or perhaps the

38:05

people who you think of as the Zigg

38:07

community are the people that you

38:09

haven't scared off who are all [ __ ]

38:12

like yourself. Sorry for getting so

38:14

heated about this, but this is the worst

38:15

thing I've read in a long ass time.

38:17

Apparently, a rift between Zigg and

38:19

Jared started to widen. His singular

38:21

focus on productivity and his startup's

38:23

exit strategy was increasingly at odds

38:26

with his long-term vision for the Zigg

38:28

project. He wasn't looking for an exit

38:30

strategy, [ __ ] He was trying to

38:32

make Bun production ready. I'm sorry

38:34

that not everybody is making their

38:36

language to toy around and write [ __ ]

38:38

posts online for. And some people made

38:40

the mistake of trying to use your

38:42

language for the real [ __ ] world.

38:44

Lesson learned. If anyone's building

38:46

anything real, they probably shouldn't

38:48

use Zigg because if you ever want your

38:51

thing to be used in businesses by real

38:53

people, you're just trying to find an

38:55

exit strategy. Jesus [ __ ] Christ. I

38:58

remember he kept nagging me to drop my

39:00

other priorities and work on a language

39:02

server protocol implementation and a VS

39:04

Code integration while I had bigger

39:06

plans. What were your bigger plans that

39:09

are more important than your language

39:11

working and providing feedback? Are you

39:14

joking? This dude's never worked before.

39:17

Yep. I cannot imagine this guy's ever

39:19

had a real job. This is the most

39:20

embarrassing thing I've ever seen.

39:22

Notice how he hasn't said a single

39:24

technical thing yet. Not one.

39:26

Apparently, we're finally about to.

39:27

After all of that, we're going to start

39:29

talking about code quality. The Zigg

39:31

team regularly checks in on our users

39:33

projects. We read source code to find

39:35

out how the language is affecting users.

39:37

We test changes to see how problematic

39:38

breakage might be. And we check for

39:40

performance regressions. We became

39:42

increasingly horrified at the

39:44

programming practices we saw in the bun

39:45

code bases. Hacks on top of hacks. Abuse

39:48

of assertions. This is an article he

39:51

linked from another dev about how

39:53

asserts are bad. This is one of those

39:55

like personal back and forth. I know

39:57

some really smart engineers that think

39:59

asserts are awesome. We should use them

40:00

for everything. If I recall, Primagen

40:03

leans that direction. He really likes

40:04

asserts than other engineers who

40:05

absolutely hate them. But if you're

40:07

citing that as abuse when it's clearly a

40:09

difference in opinion, [ __ ] yourself.

40:11

Most of all, recklessly speeding past

40:13

feature after feature with very little

40:15

time taken for reflection and

40:17

elimination of bugs and technical debt.

40:19

Jared was already writing slop well

40:20

before he had access to LLMs.

40:23

Cheers, Jared. Makes the two of us. Now,

40:25

it's not our business to police what our

40:27

users do. But you may have noticed

40:29

people screaming in our faces about

40:30

memory safety constantly. You can

40:32

imagine how we might want to put some

40:34

social distance between ourselves and a

40:36

project whose irresponsible software

40:37

engineering practices invite the exact

40:40

kind of criticism that people are eager

40:41

to level. We made futile attempts to

40:44

guide them towards better programming

40:45

practices. There were a few exceptional

40:47

heroes who did their very best at a

40:49

dysfunctional company. You know who you

40:51

are, but you can't stop a rising tide.

40:54

By this time, we all felt at the Zig

40:56

Foundation that Bun was a net liability,

40:58

and this was before Robo Bun became the

41:01

number one contributor. Robo Bun is the

41:03

bot that Jared made using Claude. This

41:06

is just a hate piece. Along with the

41:08

discomfort of the publicly presumed

41:10

poster child for Zig's programming

41:11

language, actually being the prime

41:13

example of how not to write Zigg code,

41:15

at some point they would sell out. Let's

41:17

be honest, the vague sell some cloud

41:19

something business plan was a farce from

41:21

the get-go. No, it wasn't. they just

41:23

needed to figure out how to do it. We

41:25

would receive some negative publicity by

41:26

proxy and we'd stop getting that regular

41:29

donation. So when the anthropic

41:30

acquisition finally happened, we at the

41:32

Zigg Foundation breathed the sigh of

41:33

relief. When the donation silently

41:35

stopped, our bank account was ready for

41:36

it. Probably because you somehow conned

41:39

[ __ ] Mitchell to donating $400,000 to

41:42

your [ __ ] foundation. I hope he

41:44

reconsiders in the future. The rewriting

41:46

was on the wall. Even within a couple

41:48

days, we already suspected a Rust

41:50

rewrite was coming and we were rooting

41:52

for it. The acquisition by a large AI

41:53

company was a burden because even the

41:55

indirect connection of Claude being

41:57

written and bun being written in Zigg

41:58

caused not only a surge of driveby slop

42:01

contributions, but also an influx of

42:03

tasteless AI enthusiasts into the Zigg

42:05

communities who had to be informed that

42:07

its antisocial to paste LLM outputs into

42:10

forum posts. For a moment, I feared

42:12

Zigg's identity would become known

42:14

colloquially as a programming language

42:15

associated with AI. This is a guy that

42:17

hates having users. He wants to run

42:19

around in circles with nobody touching

42:21

his [ __ ] and gets mad at you for using

42:23

them. This is the end of the [ __ ]

42:25

language. I've never seen anything like

42:27

this in my life. When Jared announced

42:29

the Rust rewrite, we were ecstatic. It

42:30

seemed too good to be true. I have to

42:32

admit, I didn't think the technology was

42:34

there to pull off this stunt. This

42:37

stunt. But he did it. And now I'm

42:40

metaphorically sipping delicious tea

42:41

from a mug that says it tastes like it's

42:43

not my problem anymore. Seems like

42:45

you're a little salty, [ __ ] The

42:48

blog post is expertly written. It's

42:49

almost like the marketing department of

42:51

a trillion dollar company has a lot of

42:52

money writing on it. No, Jared is just a

42:56

slow writer and he put a lot of time

42:59

into writing it. He has some bones to

43:01

pick. What a surprise. The the king of

43:03

picking bones has a bone to pick. It's a

43:05

dichotomy being presented here where you

43:07

have to either choose a style guide or a

43:09

programming language feature in order to

43:11

avoid bugs. The slight of hand

43:13

misdirects the reader away from the main

43:15

way bugs are eliminated by dedicating

43:18

engineering resources to it. Yeah, I'm

43:20

sure for you going from three unpaid

43:23

volunteers to four is not a big deal.

43:25

But for a realworld project, which I'm

43:27

sure you're not super familiar with,

43:28

things are a little different, Andrew.

43:30

You're going to be belittling I will

43:31

too. You sound like somebody who's never

43:33

worked on a team for longer than a week

43:36

because they can't stand working with

43:37

you. And when you get [ __ ] fired, the

43:40

response you have is, "Well, they just

43:42

didn't see my genius." [ __ ] insane. I

43:45

hate that you and I are both on the same

43:46

side with the Codeberg things. I love

43:48

Codeberg, and I really hope they don't

43:50

get stuck dealing with your [ __ ] Quite

43:51

simply, Tiger Beetle put in the time to

43:54

find and eliminate bugs. They made an

43:55

effort to maintain a healthy

43:56

relationship with the Zig Foundation,

43:58

and Bun did neither of those things. Are

44:00

we talking about the same blog post?

44:02

talking about the same bun, the one that

44:03

donated a bunch of money to you that

44:05

glazed the [ __ ] out of you at the top of

44:06

the article and also showed all the bugs

44:09

they are currently fixing. Jared has

44:11

personally fixed more bugs in any given

44:13

year than you have in your goddamn life.

44:16

The argument for shipping all the

44:17

million lines of unreed code is that the

44:19

test suite is good enough to catch

44:21

everything. Then why are you saying you

44:23

have so many annoying bugs in the Zig

44:24

codebase? Okay, I have a lesson for you,

44:28

Andrew. It is lesson time. We get to

44:30

learn together. There are many types of

44:33

bugs. I know this is crazy to you

44:35

because you only think of two bugs. You

44:36

think of bugs in software and your

44:38

users, which to you are also insects.

44:40

But to the rest of the world, there's

44:42

lots of different ways software can

44:44

break. Sometimes it breaks in a way that

44:45

is verifiable via a test. Other times it

44:48

breaks in ways that are harder to

44:49

verify, like in a longunning process,

44:51

the memory leaks, which you wouldn't

44:53

understand because you're not using your

44:54

code to do anything [ __ ] real at all.

44:57

Meanwhile, we have real production

44:58

servers running Bun for months at a time

45:00

that actually get hurt by these memory

45:02

leaks. You seem to think if a team only

45:04

hires extraordinary engineers, which you

45:07

claim you have a monopoly of with your

45:09

community, insane problem for you, but

45:12

for the rest of the world, I guess we

45:13

just can't hire these great of

45:15

engineers. Hm. Wouldn't it be cool if

45:18

there were tools that could catch some

45:19

of these other types of bugs? like a I

45:22

don't know maybe a compiler with a

45:24

server protocol that would communicate

45:26

to the person or the tool you're writing

45:28

the code with that maybe there's a bug

45:30

here or crazy just just hear me out.

45:34

What if there was a way to check what

45:35

memory was being used and what was using

45:37

it? Like when a function borrows the

45:39

memory and puts it somewhere else and

45:41

does something. What if we could check

45:42

that? You know, like a a borrow checker.

45:45

I know that tests are great, but maybe

45:47

there are some things that a traditional

45:49

unit test can't quite find. Oh, what's

45:52

that on my screen? A language empowering

45:54

everyone to build reliable and efficient

45:56

software. Oh, it has a type system and

45:58

an ownership model that guarantees

46:00

memory safety and thread safety. The

46:02

problems that you can't really unit test

46:04

for, as you seem to think you can, you

46:07

[ __ ] imbecile. How am I, the

46:09

JavaScript soy boy, more qualified than

46:12

you at very basic testing practices for

46:15

low-level languages? I know why. Because

46:18

I'm not here to complain about somebody

46:20

I'm mad about. I'm here trying to

46:22

educate my audience on software

46:24

development. You [ __ ] imbecile. You

46:26

child. Do you see how many people just

46:28

dropped bangers in my chat as I went on

46:30

this rant? Cuz you're so [ __ ] God. I I

46:33

knew this was going to be bad. I did not

46:36

expect he was going to say that the unit

46:38

tests in bun verifying behavior are

46:42

enough to handle any memory errors. Are

46:44

you [ __ ] kidding? I don't know if I

46:46

can finish this. I'm so pissed off. What

46:48

happened to the test suite being

46:50

sufficient to catch everything? It's not

46:52

sufficient to catch bugs in the Zig

46:53

code, but it is to catch bugs in a

46:55

million lines of unreed slop. This is

46:58

the most damning thing I've ever seen a

46:59

language author write. This is him

47:01

outright admitting he cannot fathom how

47:04

Rust has guarantees that Zigg doesn't.

47:07

He genuinely believes that unit tests

47:10

are all it takes to prevent memory

47:12

leaks. And that's why Zig's a terrible

47:14

language because it's creator doesn't

47:15

understand [ __ ] memory, which is

47:17

unbelievable. I love this. He claims

47:19

that the performance improvements are

47:21

due to LTO, which Zigg supports, and it

47:23

was enabled before by default, but they

47:25

turned it off because of LLVM bugs. All

47:27

of which also affect Rust. We probably

47:29

tried to tell you to try enabling it and

47:31

you didn't listen. I love the probably

47:34

tried [ __ ] The post implies you

47:36

were diligently fuzzing the Zig code.

47:37

While during our calls, the bun team

47:39

told us that they were not fuzzing

47:41

anything. Didn't you just say the calls

47:43

stopped? Pretty sure you did. Pretty

47:45

sure you said that you guys stopped

47:46

talking and that you drifted so you

47:47

wouldn't know this. The bun post

47:49

outlines a bunch of engineering work

47:51

done to reduce binary size to better

47:52

make the case that bun is better in

47:54

Rust. No, it doesn't. It calls out these

47:56

small benefits, the fact they saw more

47:58

and they went and took them. It wasn't

48:00

used to justify this. If I was to reach

48:02

like this for your article, I could say

48:04

that this is an attempt to get Jared

48:05

killed in the street. Obviously, you're

48:08

not calling for that. But when you make

48:10

absolutely insane generalizations and

48:12

then a bunch of reaches on top, you can

48:14

say stupid [ __ ] You've done a lot of

48:16

that here. I think this specifically the

48:19

binary size section of the blog post is

48:20

precisely why it took so long for the

48:22

blog post to come out. you were doing

48:24

engineering work that you should have

48:25

done in the Zigg codebase since the

48:27

beginning. This is like the whole

48:28

article is full of absurd speculative

48:31

reaches. This sentence is just [ __ ]

48:34

stupid. Obviously, this is not the case.

48:36

You can check the commit history to see

48:38

this is not the case. This is just a

48:40

desperate attempt to pretend Jared is

48:43

acting in bad faith when he has been

48:45

beyond transparent about all of this.

48:48

Apparently, Andrew was mad at him for

48:50

using comp time so much and even made a

48:52

time report thing to try and get him to

48:53

stop. Andrew noticed that Jared

48:55

neglected to mention compilation speed.

48:57

No, he didn't. He specifically talked

48:59

about how bad the compile times were and

49:01

how he had to break up the project

49:02

differently in order to make it work

49:04

reliably at all. The Zig compiler is

49:06

about 600,000 lines of code, roughly the

49:07

same size as Bun before the rewrite, and

49:09

he's clocking 16 seconds to build from

49:11

scratch with a clean cache. Yeah,

49:12

awesome. You do understand that Jared's

49:14

an engineer, right? that he can look at

49:17

these things and make a decision. Do you

49:19

understand how crazy it is that he

49:21

traded the super fast compile times from

49:24

Zigg for the god awful ones for Rust as

49:28

well as having to rearchitect the

49:29

project to have hundreds of crates

49:31

instead of just one which he preferred.

49:34

You should take this as a lesson,

49:35

Andrew. This [ __ ] Jared was so

49:38

frustrated with his experience working

49:40

in Zigg that he ate all of these real

49:44

costs that you're discussing because

49:46

again, let's be real here, your language

49:49

sucked so hard that the benefits didn't

49:52

matter to him enough. He wanted those

49:54

things. That's why he picked your

49:55

language. That's why he complimented

49:56

Zigg so much at the start of his post.

49:58

But because you're still acting like no

50:00

one uses your goddamn language, he

50:02

couldn't stick with it. So, he had to

50:04

switch to a language that has these

50:05

horrible compilation times. And he

50:08

admitted it. He's not hiding any of

50:09

this. You need to learn from this. Like,

50:11

if like like let's be real here. If I

50:14

had a kid and I would offer to drive

50:17

them to school and they said, "No, fine.

50:19

I'll walk and the school's 20 miles

50:21

away." That doesn't mean the kid is

50:23

stupid. Okay? Might. But it also

50:25

probably means I screwed up some amount

50:27

that my kid doesn't want to get in the

50:28

car with me and will instead go through

50:31

that insane amount of pain because they

50:34

would rather deal with that than get in

50:36

my [ __ ] car. That is what you're

50:39

doing here. You are mad at the kid for

50:42

not wanting to be near you because you

50:43

[ __ ] suck. Oh, the kid's so stupid

50:46

for walking to school. No, you're a

50:47

shitty parent. What did we learn here

50:49

today? The main issue here was the

50:51

relationship breakdown. as he's outlined

50:53

above. Nothing to do with programming

50:55

language features. Of course, I don't

50:57

expect the blog post to admit that.

50:58

Really, it was well played. I'll read

51:00

his last words here, but I'm going to go

51:02

on one last tangent cuz remember, I'm a

51:04

friend of Jared's. We've talked about a

51:06

lot of different things, including his

51:09

choice of languages. He genuinely loves

51:12

Zigg. He loves it so much that he worked

51:15

his [ __ ] ass off to try and bridge

51:18

this relationship to try and help the

51:19

Zig community form a real presence in SF

51:23

and be pleasant to work with. He only

51:27

brought up these issues once or twice

51:28

with me ever. He's brought up a lot of

51:31

other things a lot more often. I'm

51:32

pretty sure I've talked about bunnies

51:34

with Jared more than I've talked about

51:36

the Zigg Foundation. But in the little

51:38

bit we talked, the tone I got from him

51:40

was slight disappointment. Like he

51:43

genuinely felt sad that the Zigg

51:45

Foundation was being unnecessarily

51:48

hostile. And he didn't even bring it up.

51:50

Like I had to bring it up and he was

51:51

like, "Yeah, I don't know what's up

51:53

there. It sucks cuz I love the language

51:55

and I love them and we donate, but

51:57

they're just like hostile towards us and

51:59

I don't get it." That was his take on

52:01

the whole thing over the last three plus

52:03

years I've talked about it with him. I

52:05

have heard more about this relationship

52:07

through this article than I've heard

52:09

from Jared over three years. Jared was

52:12

very kind and political about this,

52:14

which is crazy because you think he's

52:16

this terrible manager that's super

52:17

inconsiderate. You are projecting all of

52:20

your own bad behavior in this article in

52:22

the most absurd way. And we're about to

52:24

point out the absurd level as we wrap it

52:26

up. You only thank him for the

52:29

donations, not for any of the other

52:31

things he did or the absurd levels of

52:33

effort he put in and the promotion he

52:35

gave Zigg. I learned about this language

52:37

through Jared's work and now I will

52:39

never touch it thanks to your work. But

52:42

part two is where I want you to just and

52:45

Andrew, I know this has been spicy. I

52:46

know you're watching the whole thing

52:47

because you're a narcissistic prick, but

52:48

I need you to just reset everything I've

52:50

said so far and lock in for a second

52:52

with me because there's a sentence we

52:54

have to look at together. I actually

52:57

don't have any personal criticisms of

52:59

Jared. I know you hate LLMs, but we're

53:01

going to do a thing. I don't want you to

53:03

think that this is a biased model. So,

53:05

I'm specifically asking ChatGpt, which

53:08

in seconds calls out that the article

53:11

contains numerous personal criticisms of

53:13

Jared, even though many arise in a

53:16

professional context, including but not

53:18

limited to calling him inexperienced and

53:20

prone to mediocre outcomes, groomed into

53:22

uncritically adopting Silicon Valley

53:24

ideology, saying that he has poor

53:26

communication, unrealistic expectations,

53:27

low empathy, no experience. He kept

53:30

nagging you. He's writing slop. And he's

53:32

singularly focused on productivity,

53:34

wealth, and exit strategies. Literally,

53:36

all of these things are personal

53:38

attacks, including calling him a stinky

53:40

manager. And just to address some bias,

53:42

we will ask our friend Fable 5. Yes,

53:47

pretty clearly. The disclaimer at the

53:49

end sits awkwardly against much of what

53:50

precedes it. The most direct example,

53:52

the article relays that based on

53:53

accounts from interviewees and

53:55

employees, Jared was a stinky manager.

53:57

The sheer volume of personal criticisms

54:00

of Jared in this article is genuinely

54:02

hilarious. You're [ __ ] hallucinating,

54:04

man. He has different tastes than me. He

54:06

wants different things out of life than

54:08

me. But I think he's actually happy and

54:10

successful exactly where he is. Unlike

54:12

you, you seem incredibly unhappy and

54:14

petty and pissed off. He figured out how

54:17

to accomplish all the stuff in life that

54:18

he wants. He gets to live out

54:20

productivity fantasy fever dreams. He's

54:22

probably already super wealthy. He has

54:24

minor tech celebrity status.

54:26

I think he did well for himself and I

54:28

don't wish him any ill will. I added

54:30

this paragraph in an update to the blog

54:32

post because it seems like people are

54:33

having a hard time believing me when I

54:35

say it's not personal and that I

54:36

actually accept Jared for who he is and

54:39

actually perceive him as successful by

54:40

his own standards and in fact am

54:42

genuinely happy for him. It's the truth

54:44

though. I accept people who are wildly

54:47

different than me. You're going to have

54:48

to accept that all of your users are too

54:50

and they're all going to stop using your

54:51

goddamn language. I don't hold it

54:53

against people that have different

54:54

tastes than me. And I don't even hate my

54:57

opponents in the world of business. You

54:59

of course you don't. You don't have a

55:00

[ __ ] business. If anything, we have

55:02

something in common. We're both playing

55:04

the same game, albeit on opposite teams.

55:06

What teams? What? What do you mean

55:08

you're playing on opposite teams? What

55:10

game? What the [ __ ] are you saying? His

55:12

team is shipping. Your team is [ __ ]

55:13

posting. His team is building useful

55:15

software. Your team is complaining of

55:17

people who build useful software. What

55:19

the [ __ ] do you mean opposite teams? I'm

55:21

happy our business interests are no

55:22

longer intertwined. As soon as the

55:24

internet stops arguing in public about

55:25

whether the rewrite was good or bad for

55:27

Bun based on the language choice, I

55:29

believe that concludes our interactions.

55:31

God, what are you linking here? He's

55:33

literally linking the sex robot skit

55:35

from whitest kids. You know, this guy's

55:37

a literal teenager. He is actually

55:39

operating as though he's 14 [ __ ]

55:41

years old. I've never seen anything like

55:43

this in my adult life. I'm I'm not even

55:45

kidding. Best part is it's not even a

55:47

target blank. It pulls you off his

55:49

website. Hey there, Theo from the future

55:51

here. Since this blog post was

55:53

published, it's been edited multiple

55:54

times, and it got edited again since I

55:56

filmed. And while this edit does soften

55:59

a few things, it also opens in like the

56:02

worst possible way, and I just I need to

56:06

crash out a bit more. Okay, this is the

56:08

change. First off, he changed the title

56:10

of that last section from uh what do we

56:12

learn here today to moving on. Notice

56:14

that I have this blog post open twice

56:16

cuz this is from last stream. This is

56:17

from today's recording. So it's the same

56:19

link but two different pieces of

56:21

content. He used to say that this was a

56:23

relationship breakdown as he outlined

56:25

above. He changed it to my main issue

56:27

here has nothing to do with the language

56:28

features of Zigg versus Rust and

56:29

everything to do with the diverging

56:31

value system of the two projects in

56:32

relationship breakdown that followed.

56:34

Zooming out I want to make one thing

56:36

clear and here is where it falls apart.

56:39

While I resent Jared for making Bun into

56:42

an embarrassment for Zigg, and I blame

56:45

him partially for some of the slop we've

56:47

been dealing with, you know that he

56:49

didn't have the words partially and some

56:51

until he had someone else give feedback

56:52

on it. And it was previously I blame him

56:55

for the slop we've been dealing with.

56:57

And he added those words to make it feel

56:59

less absurd. And he stands by the

57:01

criticism of his leadership. He also

57:02

empathizes with Jared. He has different

57:04

values than me. He wants different

57:06

things out of life than me. But I think

57:08

he's actually happy and successful

57:10

exactly where he is. yada yada yada.

57:12

Same thing that he mostly had there.

57:14

Then he says, "The blog has been

57:16

characterized as a personal attack

57:17

against Jared when he originally framed

57:19

it as telling the story of a failed

57:21

business relationship. My framing didn't

57:23

work because I had unprocessed emotions

57:24

of resentment that were obvious to the

57:26

reader, but not to myself. Yeah, no

57:28

[ __ ] I've updated this conclusion

57:30

section after self-reflection and

57:31

chatting with friends. Feel free to go

57:33

look at the original text in the

57:34

website's public source repo. The other

57:35

critical mistake I made with this post

57:37

was failing to consider the rather

57:38

obvious and important point that this

57:40

might affect Zigg users who knew next to

57:42

none of these facts and have only the

57:44

surface level understanding that an

57:45

exzig user is getting trashed by the

57:47

language creator. Such people might

57:49

reasonably worry that this might happen

57:51

to them. I'm sorry to those who I made

57:53

feel this way. At this point, all I can

57:55

say is that myself and the other ZSF

57:56

folks have outstanding relations with

57:58

essentially everyone who openly uses

57:59

Zigg and talks about it publicly. And

58:01

this incident is the one exception. the

58:03

the biggest one is the exception. Plenty

58:06

of people have decided to move away from

58:07

Zigg was zero fuss. I hope you give me

58:09

some grace considering a trillion dollar

58:10

company fired the first shot. No, you

58:13

were saying earlier that they were doing

58:14

this before. Also, the blog post wasn't

58:17

a shot. I agree that a shot was fired

58:19

here and that shot killed Zigg, but the

58:22

shot was fired by your gun in your hand

58:25

in your own direction. All of the issue

58:27

here is yours. 100% of it. And to the I

58:30

don't think I will do this again. People

58:33

seem to be worry about that. I just want

58:35

to highlight another blog post of his

58:37

quick. This one's titled I am not a

58:39

JavaScript developer. You would imagine

58:42

that this blog post is him crashing out

58:44

because he was mischaracterized in some

58:46

reporting or something somewhere, right?

58:48

Do you want to guess what this blog post

58:50

is about before you read the page? It's

58:52

this. Back in 2013,

58:55

GitHub had a feature where the languages

58:57

you used would be put under your bio on

59:01

GitHub. And since he had one project

59:03

that had some JavaScript in it, it put

59:06

JavaScript under his username on GitHub.

59:09

And this caused him to crash out so

59:11

hard, he wrote a page and a half about

59:13

it on his blog because he hates the idea

59:16

of being categorized as a JavaScript

59:18

developer so much with just one word as

59:21

a label on his GitHub. If that's enough

59:23

to get this guy to crash out, I do not

59:25

trust him in saying that this is a

59:27

one-time thing at all. One more quick

59:30

joke and then we'll go back to my

59:31

original crash out. I I just love Ellie

59:33

and thought this was hilarious. I'm

59:35

going to make a programming language

59:36

slop lang. And if any of my users dare

59:38

to write nice code, manage their

59:40

employees well, or bootstrap, I'll write

59:41

a blog about what a shitty person they

59:43

are. Just I thought this one was funny.

59:45

Anyways, back to what Theo 3 days ago

59:47

was saying. Holy [ __ ] I got nothing.

59:51

I'm angry. I hope you are, too. I would

59:52

do the normal outro, but I don't feel

59:54

like switching the camera. Peace nerds,

59:56

I guess. What the [ __ ]

Continue with YouTLDR

Analyze another video with Pro

Process a new video, search every timestamp, compare sources, and keep the result in your library.

Get Pro — $12/month30-day money-back guarantee

More transcripts

Explore other videos transcribed with YouTLDR.