Nik: Hello, hello, this is Postgre.FM

My name is Nik, PostgresAI, and
as usual with me, Michael,

pgMustard.

Hi, Michael.

Michael C.: Hi, Nik.

Nik: And we have a very, very interesting
guest today, Michael Malis,

who created pgrust, which has already,
I think, 5,000 stars

on GitHub and a lot of noise around,
like a lot of buzz.

Hi, Michael, thank you for coming.

Michael M.: Yeah, of course.

Thank you for having me.

Nik: So, of course, I think the
1st question should be how it

all started, why?

Tell us the story, please.

Michael M.: So Jason and I were
looking for projects to work

on, and we wanted to do something
that we knew super well.

And initially, what we were focused
on was reliability and how

can we help people make their websites
more reliable.

And we were working with a bunch
of people.

And the common pattern that emerged
was that A lot of the problems

that caused reliability issues,
a lot of them stemmed from their

database and how they were using
their database, whether it was

like Postgres or Redis or some
other system.

And so we started looking at what
are ways that we can solve

this problem.

And we were throwing around a couple
of things, and we ended

up figuring out that AI is actually
pretty good at rewriting

software at this point.

This is back in April.

And so we're like, hey, why don't
we actually try fixing these

problems at the source and actually
trying to modify Postgres

and fix a lot of the things that
cause people to have different

reliability issues, whether it's
connections or it's like certain

queries just take a really long
time or like 1 long-running query

can take down your database or
vacuums as we're all familiar

with.

And so the idea behind pgrust,
the name's a bit misleading because

it's not actually really about
Rust.

I think that's actually the least
interesting part about it.

It's actually more about how do
we leverage AI to re-architect

Postgres and just build a much
better database.

Nik: Okay.

And when you say better, what do
you mean?

Michael M.: Yeah.

So there's a combination of like
different challenges that like

I've just seen people repeatedly
have with Postgres and I actually

wrote a blog post called it like
the 4 horsemen about a lot of

the challenges that people have.

And some of the most common ones
are like, you misconfigure your

connection limit and like all of
a sudden like nothing can connect

to your database.

You have like JSON support.

Tons and tons of people use JSON
but Postgres doesn't have statistics

for how to actually query JSON.

So when you try to do it, you're
going to get really bad query

plans and everything's just going
to be really slow.

There's like the wraparound vacuum
and you have more than several

billion transactions and like all
of a sudden if your vacuum

can't keep up your database falls
over and there's just like

all these problems that have been
around for such a long time.

And like Postgres is a great product
and like it is a really

great system, but the way the Postgres
core team approaches things

is they approach it in terms of
stability And how do we keep

what we have today?

Like, how do we keep it working?

And how do we make sure we don't
break it?

Because like, there's like billions
of Postgres instances out

there.

And so number 1 priority is just
how do we not break the existing

stuff?

Versus how do we actually fix the
things that are not working.

And so pgrust, because it's a
new project, we can take a little

bit of a different approach of
let's try to actually fix the

things that aren't working.

And maybe some of the existing
stuff, it's not going to be quite

as reliable, at least upfront,
as Postgres is.

But at least we'll be able to fix
some of the long-standing architectural

issues that Postgres has.

Nik: Yeah, it makes sense.

How did you do it?

It's a lot of...

Obviously, it's with Claude, right?

Michael M.: Yeah, it took a couple
of attempts to actually figure

out what is the best way to do
this.

And what ended up working really
well was with Opus, we were

able to take each file of Postgres
and basically transpile it

to Rust.

And so if you look at our code
and look at the Postgres code

side by side, it actually looks
very similar.

Where like the functions are the
same, some of the details may

be a little bit different, but
overall it's actually really close

to just a straight rewrite of Postgres.

And so we did this across all the
files.

There were some things that had
to be changed to actually work

in Rust.

1 of the big ones was how memory
management is done, because

Rust is very particular about how
you allocate memory.

But this approach of going through
all the files, rewriting them,

we had a bunch of Claude agents
like going at this in parallel.

There were like some conflicts
between different files, but we

were able to resolve those and
then get pgrust to actually work.

And then from there, we focused
on the Postgres test suite, getting

all that to pass.

And we have something that actually
looks a lot like Postgres,

but is in Rust.

Michael C.: I have potentially
a minor question on the source

code.

Really interesting that you went
file by file and that worked

well.

1 of my favorite things in the
source code is all the is the

comments and they describe in quite
a lot of detail how things

work and I wonder if you've noticed
how it rewrote those.

I can imagine the code being somewhat
reliable in terms of it

being translated, but I can imagine
the comments actually being

harder in some way to be trustworthy.

What have you found on that front?

Michael M.: Yeah, for the comments,
like Claude has been like,

Claude is very verbose when it
comes to comments.

And like, every file have a whole
like big comment about like,

what's in the file that I've actually
had to give it feedback,

like I had to give it feedback
to comment less.

And I think there's a linter that says
files should not have more

than 5% of the line shouldn't be
comments.

I haven't paid quite close attention
to the actual content of

the comments, but I do know Claude
is making a lot of comments

in the new code.

Nik: It does, yeah.

So I remember, now it's version
0.2, right?

Michael M.: Yep.

Nik: Yeah, and I remember version
0.1, I think there was a claim

that all tests pass, but when I
wrote some silly stuff, like

obviously not SQL syntax, it accepted
it without any errors.

Now it's not so.

In 0.2 it works fine, so it looks
like Postgres syntax is implemented

very well.

Was it about some lack of tests
in Postgres tests for checking

negative stuff?

I don't know.

Or it just wasn't complete implementation
before?

What changed between 0.1 and 0.2?

Michael M.: Yeah, so pgrust 0.1 was
largely rewritten by Opus.

And Opus I found to be a fine model,
but it's a bit difficult

to work with.

They'll mislead you a bit about
how much work is actually completed,

we would ask it to rewrite this
file and it would rewrite 0.5

of the file and not all of it.

And so we were working with this
underlying unreliable model

and all models are unreliable to
various degrees, but with enough

quality controls and layering on
top of it, we're able to get

all of Postgres ported, and we're
able to get the Postgres regression

suite to pass, but that's actually
a really low bar.

The Postgres regression suite on
Postgres only has about 0.667

code coverage.

And so you can pass the regression
suite, but there's still 0.333

of Postgres that isn't even being
tested.

And on top of that, the regression
suites are largely more like

functionality tests.

That every feature in Postgres,
there is a regression suite for

it that's like, there's 1 for hash
joins, there's 1 for lateral

joins, and there's 50,000 of these
that basically just go through

every single Postgres feature and
make sure it works to some

degree.

But they actually just do a couple
tests for each feature and

then move on.

And so the tests are more about
just making sure this feature

is there and it exists and works
well, but doesn't actually really

like you have a perfect implementation
of this feature.

Nik: So you, there is an idea to
improve regression test suite,

right?

And this is already, this should
go to upstream, maybe, no?

Michael M.: Yeah.

So what we've been doing, the difference
between 0.1 and 0.2

is 0.2 was run by Fable, which
we have a more reliable model

now that's, is more consistent
about, okay, you ask it to port

a file, it'll actually rewrite
the file completely.

And so we do end up with something
that is just baseline, more

similar to Postgres.

And then before we released 0.2,
we started doing a little, a

tiny bit of differential testing
and fuzz testing, and I can

talk a lot more about that.

But for 0.3, we're actually like
going to have a lot more of

that.

What we've thought of doing is
we could add more regression tests,

but that, again, every single regression
test is only testing

a small part of the functionality.

And what we really want is not
just, hey, I can choose 100 tests

and they'll all pass.

I want to know is this thing actually
identical to Postgres?

And some of the things we've been
doing, and I was very surprised

by this, that it's even worked.

I would have never thought this.

We found this library called Kani,
which can take Rust code and

C code and do formal verification
over the code.

Nik: Without any execution?

Michael M.: So it does symbolic
execution.

So it'll run your code, but it'll
run it in a special way that

it is more just picking out that,
hey, this is an if statement

that is checking this condition,
as opposed to actually having

variables go through it.

And then I'll be able to convert
that into a format that you

can then do formal verification
over that has the Rust, I'll

have an expression that represents
all the Rust, and I'll have

the same for the C code.

And then we can do across all inputs,
are these 2 things gonna

produce the exact same output?

And so Postgres has 3000 different
user facing functions, everything

from substring to regular expression
matching to there's like

the, like you can calculate the
gamma function, there's a function

for that.

And so for about 1000 of these
functions, we were actually

able to do actual formal verification
that the Rust code and

C code are the same.

But then beyond that, what we've
started, like formal verification

doesn't work in all cases.

It's actually narrow.

And so what we've been doing for
the rest of the code base has

been, we'll take the Rust code
and the C code and put them side

by side, and then have a fuzzer,
like, code coverage guided fuzzer,

generate millions of inputs across
the 2 and make sure that they

behave exactly the same.

And in the process of doing this,
not only did we like find over

100 bugs in like pgrust, but we
actually found at this point

a little bit over 20 bugs in Postgres
itself.

Nik: I see.

That's interesting.

Have you reported them?

Michael M.: Yeah.

If you look, I think like end of
July, like 1st week of August

on the like pgsql or like pgsql
bugs mailing list, like you'll

see a lot of the form submissions
are actually from me.

Nik: That's cool.

I missed it.

That's cool.

Congrats, actually.

That's good.

Yeah.

Michael M.: None of the bugs.

I found 3 serious bugs, but all
of them had been found already

by other people.

I'd been testing on 18.3, 18.4,
and in 19 people had found them.

There were a lot of not serious
bugs that people had not found.

1 of my favorites is Postgres has
a quadtree implementation,

and it will use floating points
to represent the positions in

the quadtree.

And there was a bug where, because
of floating point rounding

and the arithmetic that Postgres
was doing, it was possible for

a point to not be in any of the
4 quadrants.

That the comparison would say,
this isn't to the left, this isn't

to the right, and this isn't in
the center.

And we're definitely doing like
very aggressive.

Nik: This is in the SP-GiST, right?

Michael M.: I think it was in,
I don't know exactly.

I want to say it was in GiST, yeah,
but basically the amount

of testing we're doing is so thorough
that we're actually finding

these extremely hard to find bugs
and we're finding quite a few

bugs in Postgres itself.

Nik: This is very important because
it means that with AI you

can, you basically have some mechanism
which is finding bugs

Michael M.: all the

Nik: time, right?

And it can be maybe like, what
could it mean?

Probably there's Postgres Buildfarm
for testing, which is used for

all releases.

With this work, it maybe should
be extended to involve more AI

and find more bugs at scale, right?

Michael M.: Yeah, there's a couple
things I think are really

interesting.

1 is that with Mythos, this whole
thing about Mythos can pose

a security risk.

The interesting thing about the
models is like, the security,

the way that they pose a security
risk isn't that like, the model

looks at your code and can find
a bug in the code.

It's actually that the model can
build tools that can then find

bugs in your code.

Or like, I've been using Fable
and a lot of times it'll fall

back to Opus 5 because it's, oh,
you found a memory bug, that

seems like a security issue.

Nik: I think, just From my experience,
I also found a couple

of bugs with AI.

A few were security-related.

1 was officially registered and
was already patched.

That 1 was just looking at the
code.

I didn't use Mythos, even not Fable.

It was like Opus 4.5 back then.

And I just was looking at the code,
it was very old code, and

just looking at it, it found SQL
injection, which is there already

18 years.

So in some contrib module, which
is not used directly, so nobody

cared, but it was actually serious
because it's used as an example.

So anyway, it was interesting that
just looking at code, it also

can find bugs.

But you're right, building tools
is even more powerful because

just looking at the code, you can
miss complex relationship between

various code pieces, right?

Michael M.: Yeah.

So with the models, like what you
can do is you can basically

point them to be like, hey, I have
100 functions in this code

base, write really thorough tests
for all of these different

pieces of code.

And so the way I like to think
about it with these models is

you can, if you can get them to
do 1 task well, you now have

a repeatable way to do that 1 task
100 times.

And so if you can get a model to
be able to test 1 function,

there isn't a reason you can't
get it to test 100 or 1000 or

10000 functions.

Nik: Yeah.

How much of AI capacity have you
already used?

Is it like just 1 $200 account
or no?

I'm just curious, very curious.

Asking for a friend, so to speak.

Michael M.: The 1st version of
pgrust, the 0.1, which was done

with Opus, which that spanned 5
different attempts, that cost

about 100 grand.

And then so far, with the new version,
like 0.2 and will become

0.3 in total, we've put in probably
like another like 300 or

400 grand.

Where the...

We're burning tokens so fast that
you can burn through a 5 hour

quota on a $200 a month subscription
on the, in the order of

like 15 minutes.

It's because for a while, like
what we'll do is like, we'll have

a 40 different Fable instances
like running in parallel, each

like working on individual parts
of Postgres.

And that just burns through credits
super fast.

Nik: Yeah, yeah, that's impressive.

So, yeah.

And it takes also a lot of time,
right?

Because like, it's just they are
like, you just need to wait

sometimes a lot right what was
your the longest run or loop

fully autonomous like days weeks
or something

Michael M.: I usually well I've
had stuff like run overnight

that worked but I think I try to
keep things on the order of,

I try to break things down to like
tasks on the order of like,

ideally like an hour, cause any
more than that, I find that like

the chance of the model going off
and doing its own thing and

like getting.

Nik: Nonsensical.

Yeah.

Michael M.: Yeah.

I found that like models, they
work really well.

They enter 2 states.

Like 1 is they like are just like
working really well and making

forward progress.

And then other times they'll just
start doing their own thing.

They'll just start making like
a bunch of random edits to like

code everywhere and not really
go anywhere.

And like the more you can keep
models on like the productive

side and not on the going in circle
side is better.

Michael C.: I'm curious on the,
because that's a lot of money

to spend on v0.2.

Are you being public with how you're
funding it or like if you

do have investors.

Michael M.: Yeah.

So far it's actually been entirely
funded by me where I had a

previous startup, Freshpaint,
which did like pretty well.

And I had the chance to sell some
of my equity and so far it's

mostly been funded by me.

We're hitting the point where like
it's starting to become like

a bit unreasonable and we're starting
to look at other ways to

like fund it and can we like
be more token efficient and things

like that.

Michael C.: That makes a ton of
sense.

So yeah going back to the technical
stuff I was going to

the test suite is really interesting
to me, and almost as a what

can we learn from a Postgres perspective,
as well as how could

pgrust become trustworthy.

So, on testing the functions, I
can imagine a huge amount of

the kind of user surface area is
going to be covered nicely,

like especially for single user,
single query correctness.

But I can't help but feel nervous
about like concurrency stuff

and even Postgres and some other
databases that have had some

interesting bugs come up when Jepsen
have got involved and run

some like interesting tests along
the like isolation level side

of things.

Do you, does your testing approach
cover that yet?

Or do you, are you going to have
needed like a slightly different

approach for some of those things?

How are you thinking about that?

Michael M.: Yeah, we're basically
taking what is the modern and

latest approach to testing and
trying to incorporate all of that

into how we do things.

And the 1st thing we've been doing
is we've started with the

easy part of, okay, here's all
the pure functions.

Here's the ones that we can verify.

Here's the ones that we can just
fuzz.

And then most recently I've been
working on how can we actually

get full coverage of the database
where there's a lot of very

stateful things that will only
trigger bugs in very rare circumstances.

And if you actually look at the
issues people are reporting for

pgrust, it's usually the combination
of 2 features of, oh, if

I use a non-default collation
with certain string functions,

it'll cause a bug.

And so what we're trying to do
now is actually fuzz until we

get to 100% code coverage.

And then for the concurrency stuff,
once we have a fuzzer that

can actually properly explore the
entire code base, we already

purchased this tool called Antithesis,
which does Jepsen-style

fault testing.

It's actually a super cool product.

They run your software inside of
a VM and then are able to inject

faults into your running code.

And so that can be everything from
the network is unreliable

and your database can't talk to
its replica.

Or it can be like, hey, your server
crashed and now is your data

corrupted on disk or not?

And then they actually do stuff
of they can, they have full control

of the threading.

It's fully deterministic.

And so they can create all these
weird out of order sequences

for your threads to try to just
throw the craziest stuff at your

software.

And right now we're working on
the fuzzer to actually explore

the search space.

And then once we have that, we're
going to give that to Antithesis

to then try to come up with all
these crazy ways of running the

code together to try to break
pgrust.

And so I think that is, we've actually
been talking with a lot

of database people through this
and basically they're all using

Antithesis for their testing at
this point.

Nik: Yeah.

Speaking of testing, I remember
I noticed on Hacker News comments

that on the thread that people
asked questions about was fsync

on and did you do writes in those
tests and so on or is just

only from memory, data fits in
buffer pool or something and

nothing touches the disk.

Michael M.: Yeah.

So we have, if you look at the
code base, we actually have a

crash simulator in pgrust that
mocks out the file system and

then we'll try to just crash the
database at different points.

And we've done a good amount of
testing.

The thing is that even Postgres
does get these things wrong sometimes.

That there was like a fsyncgate
almost like a decade ago now,

I think, of like, yeah, fsync can
actually fail and Postgres

actually didn't handle that case.

Which be fair to Postgres, that's
a case that never ever happens.

Nik: Honestly, I also think to
me going to Jepsen tests and multi-node

basically network testing and so
on is maybe not the biggest

priority for this maybe.

In my opinion, I recently learned
that Postgres own tests are not

checking properly disk outages,
for example.

So this is like, what happens if
disk just has some problems?

And there are some tools to improve
that in Postgres on codebase.

So I'm very curious.

This is purely a vibe-coded thing.

You obviously created a good harness
to mock and so on, but still

people reported some segfaults.

It's obvious it's early stage.

Will it reach some point when it's
very reliable so it can be

put to production.

So obviously you say yes, but what's
your like, why do you think

so?

Why do you think yes?

Because I'm also very AI positive,
so to speak.

I think actually in a few months
we will be able to revisit with

new models and polish it and so
on.

And It gives me so joy to work
with AI together, like human plus

AI, we can achieve a lot.

But still, there are so many doubts
around.

And people think, for example,
it's impossible to achieve a point

where it will be reliable.

You started with reliability, right?

Then you said hackers are too conservative,
but there's also

they are too conservative to protect
that reliability thing,

right?

Now with vibe code, the thing fully
rewritten, won't it take

10 years to achieve a very reliable
state?

What makes you think it's possible
to achieve it much faster

than 10 years?

Michael M.: So I think for the
issues that people are reporting,

I think 1 thing to clarify is that
so far for version 0.2, we

had, or actually I think for version
0.2, that was actually before

we had done even like most
of the fuzz testing I was talking

about, where like we actually sorted
out those issues.

The correctness work has like largely
followed version 0.2 and

so far we've only covered like
15 or 20 percent of the codebase

and like there's still a lot more
to cover.

And so I'm like I'm totally not
surprised that people found issues

in the version we released just
because like we hadn't actually

hardened it that much.

And to answer your question of
how we can actually get this to

a place where people can trust
this, Back to what I said earlier

about, it's not like the models
themselves are like reviewing

all the code and like making sure
it's correct.

What we're doing is like we're
building tools to actually make

it, make sure it's correct.

And we're doing it such a degree
that like we're able to do millions

of inputs for individual functions
to the point that Postgres,

this 30-year-old battle-tested
codebase, we're finding bugs in

it that no 1 had found before,
even though people have been using

it all this time.

Nik: You find bugs in the old code,
but Maybe you have bugs which

you haven't explored in new code
yet.

So this is a really tricky question.

What's your plan to prove it in
production?

Just wait for people who will try
it in production on replicas,

for example, because I always think
This thing can work as a

physical standby.

Is this a way or use some mirroring,
for example, PgDog has or

other, maybe some others have,
to mirror traffic and see that

it works well?

Or what's your plan to prove with
production that it works?

Michael M.: Yeah.

So for proving it like actually
in production, our plan is to

do exactly what you said and replicate
off of people's existing

databases and be like read-only
standby.

That gives people a lot of the
benefits of like what we're building

in terms of this like ultra fast
columnar workload such that

like people who are trying to do
analytics in Postgres and are

struggling to do it, they can stand
up pgrust and then move

to analytics over to that.

And the really nice thing about
analytics is they tend to be

like semi-production workloads
where either like it's internal

usage and okay your database goes
down, okay my internal dashboards

are broken for a little bit, it's
not the end of the world.

And then over time as like we start
to get like battle tested

in these not tier 1 database use
cases, that's I think, will

give people more confidence that,
hey, this is actually something

that, like, works well.

Nik: So what I like in this idea
is that if it's, if pgrust

is powering a physical standby,
and then it crashed, for example,

but primary won't be affected,
right?

Because, okay, some slot is not
used.

And if it's working and you run
very long running query on it,

usually it's a bad idea on regular
standbys because of hot_standby_feedback

dilemma.

If it's on, it will affect vacuum
on the primary.

If it's off, it makes your node
basically single user.

It will start lagging.

So both choices are not okay if
you want analytics.

But It's only true if those queries
last hours.

If it's already, as your blog post
suggests, 300 times faster,

then xmin horizon is not blocked
by hot_standby_feedback for long.

It's blocked for a short time.

This is very interesting.

This looks promising.

We have very fast standby, which
behaves exactly like Postgres.

Like, primary thinks it's like
Postgres, okay?

And we have ability to run some
aggregates and so on very fast.

Michael M.: That's interesting.

Actually, the thing I find really
interesting about pgrust is

there's actually a whole bunch
of unexplored design space, new

ways that you can do things.

Where you mentioned, for instance,
when you have a replica, due

to the way the WAL replay works,
there's all these like complexities

about how did the vacuums work
and how does like the replica

like fall behind.

But I think there are options out
there.

I haven't explored them thoroughly,
but there's options out there.

If we change the file format and
the way the WAL replay works,

maybe there's ways to actually
get around these problems.

I think this is like a lot of what's
really exciting about pgrust

is like, there's a lot of
like unexplored design area.

And because it's this like experimental
new thing, there's actually

lots of opportunity to explore
the design space.

Nik: Right, but that's for sure.

So experimental, you can go very
far.

But grounding is when you put it
to production.

This is the most interesting practical
piece here for me.

Sounds like it's relatively low
risk to try it.

There's a way, right?

That's interesting.

So, Yeah, that's cool.

What else?

I saw your blog post, I think
today, right?

About JIT just in time.

What attracted your attention?

It was just switched off by default
finally, recently.

Was this like, yeah.

Michael M.: Yeah.

As part of the Columnar stuff,
we looked at a bunch of the recent

database literature and incorporated
a ton of stuff into pgrust.

A lot of it actually coming from
the research into Umbra, which

is this very experimental database
being developed by this team

in Munich.

And they've been publishing database
research for the last decade

or more, and a lot of it comes
from them.

But for JIT compilation, and this
is a lot of what I talked about

in the post that came out this
morning, if you look at all the

databases that have JIT compilation
in it, they either use LLVM,

or they'll write C and C++ code
and then compile that.

And the big downside of these approaches
is that there's actually

a huge amount of latency overhead
to compile this code that for

C and C++ or for LLVM, I think it's
50 milliseconds compile time.

And so you're very limited in the
cases that you can use it.

And you have this risk of if you're
the planner estimates the

query wrong, you now have this extra
50 milliseconds of latency.

But there was this approach to
JIT compilation called copy and

I think it's like copy and fix
or something along those lines

that was released in someone published
a paper on it in 2021

that makes copy and patch.

Yeah, that's it.

Then it's much easier to write.

Then you just have templates of
assembly code and then you just

fill in the bits as needed.

You can combine these templates
together to get the code you

want.

And so the pgrust JIT compiler
actually doesn't use something

like LLVM.

It actually just directly generates
the assembly.

And so because of this, the compile
times are like 5 microseconds

as opposed to 50 milliseconds for
LLVM.

And this gives us a lot more, Like
we can JIT compile a lot more

of the query that we actually,
for our executor, we JIT compile

large parts of the query, not just
expressions, which Postgres

will only JIT compile expressions
and tuple deforming, but we

actually do a lot more than that.

And so we get measurable speed
ups in many different places.

Michael C.: Do you see any reason
Postgres couldn't use a similar

approach?

Michael M.: So 1 of the big, 1
of the challenges I see with Postgres

adopting this approach is I Specifically
am targeting only the Graviton

instruction set Whereas pgrust
is being built in a very different

world where today most people are
running their databases in

the cloud And for instance, there's
no Windows support in pgrust

yet.

And so I'm able to, because I know,
I'm just assuming that people

are going to run this primarily
on AWS and GCP, I'm able to target

1 specific CPU design and 1 specific
instruction set and focus

just on that and make that work
really well.

And for Postgres, I think it's
still possible.

You could have the JIT compiler
only work in certain instruction

sets, or you can have different
backends for different instruction

sets.

But it's an order of magnitude
more work to get that to work

well than what I'm doing.

Nik: And if, even if it's not in
cloud, they will run it on Mac

Minis they have now, right?

Should work anyway there, Yeah.

Michael M.: I've seen multiple
people with like rooms of like,

they'll have

Nik: a bunch of...

Yeah.

In the corner.

Could be a good Postgres cluster.

Yeah.

So that's interesting.

And you don't use GPT like Codex,
no?

Like distributing workloads within?

Michael M.: So in my experience,
actually like the, a lot of

the early work we were doing with
Codex, like Codex 5.4 and Codex

5.5, the thing that made me switch
to Claude is they released

this feature called dynamic workflows,
which this is what was

used for the Bun Rust rewrite.

And dynamic workflows are, you
can basically, it will write code

that orchestrates a bunch of different
agents.

And so you can be like, Hey, I
have these 10 files.

Can you rewrite all of them?

And it'll write some JavaScript,
they'll then spin up 10 agents,

they'll then rewrite each file
and then review it and fix any

issues and then merge it.

And so that level of orchestration
made it way easier to use

Claude.

And then in my experience, like
Fable just works, it's like way

more reliable and trustworthy.

1 of the actually like biggest
challenges I had with the rewrite,

or like 1 of the things that's
actually really hard, was the

Postgres regular expression engine.

I don't know what it is about it.

I think it's 10,000 lines of code.

It's a decent amount of code, but
not too big.

And I was doing this as a benchmark,
and I threw Sol at it on

medium-level thinking, not the
highest thinking, but on a decent...

Sol's a pretty good model, And
Sol wasn't able to rewrite it

in Rust.

I was like very surprised by that.

I was like fully expecting that
given how smart Sol is, like

it should just be able to do that.

Whereas Fable was like a whole
level above that, where it was

able to rewrite in Rust and then
it was able to do like performance

optimization on it to make it a
tiny bit faster than the Postgres

version.

And so like, I think like it probably
is possible to use like

Sol, but like I've just found the
difference in autonomy between

the 2 models is like not worth
the difference.

Michael C.: I think we need to
talk about licensing.

I noticed

Nik: you picked

Michael C.: the AGPL.

That's always controversial, but
at least open source, right?

What, why pick that 1?

I think I know why, but why?

Michael M.: Yeah, we were looking
at the different options we

had for licensing.

And there's like 4 different options.

There's you have MIT or like Postgres.

You have like AGPL or like GPL,
where it's like the copyleft.

You have what they call like source
available, like you have

SSPL and like BSL, and you have
like closed source.

And We knew we wanted to do something
open source, and it's now

limited to the permissive or the
AGPL.

And the thing was, we wanted something
that a third party couldn't

just take and sell themselves to
the detriment of the work we're

doing.

Where there's lots of closed source
forks of Postgres.

You have AlloyDB, you have Aurora,
now Neon is closed source.

And none of that money that those
platforms make actually goes

back, or like very, very tiny amounts
of it goes back to the

actual Postgres core projects.

And that was just something that
like I wanted to avoid with

pgrust.

Nik: But AGPL
doesn't protect you from selling.

Anyone can still sell if they don't
modify code.

And even if they modify code, they
just need to publish it.

That's it.

Michael M.: Yeah.

Yeah.

So at least the history for AGPL
is it is like extremely, basically

no 1 has really done that.

But like just the cost of needing
to open source your modifications

to it has deterred like Amazon
and Google from offering any AGPL

software on their platforms, at
least so far.

Nik: Makes sense.

So

Michael M.: that seemed like the
right trade-off.

Nik: Good.

I know we're like almost out of
time.

It was an interesting discussion.

Thank you for coming, Michael.

I enjoyed it very well.

Good luck with your project.

We will be keeping an eye on it.

Michael M.: Yeah, of course.

Thanks so much.

Nik: Thank you.

Some kind things our listeners have said