Loading...
Loading...

Chris, Andrew, and David welcome special guest Jeff Dickey (jdx), creator of mise, discussing his background rewriting the Heroku CLI from Ruby to Node due to Ruby distribution/sandboxing issues. The conversation digs into why language CLIs are hard to distribute, the tradeoffs between shims vs PATH-based version switching, why tasks can be the “clean” solution, and Jeff’s Rust-first tooling philosophy. They also dive into his other projects: usage (CLI docs/completions), Pitchfork (dev daemon runner that starts/stops services by directory), and fnox/Fort Knox (secrets management with encrypted files or remote stores like 1Password), and a big upcoming shift: pre-compiled (portable) Rubies becoming the default in mise. Press download now!
Links
Yo, yo, this remote Ruby
Chris and Andrew are here
Conversating, interviewing
You know that's what they're doing
Stick around, let's bumping it all
Ruby up in here
remote Ruby
Starts now
Welcome back
Everybody
Yes, you guys
Good
Yes
It's like 85 degrees Fahrenheit here
And I have to go to New York on Saturday
And I'm really upset about it
What is it in snowing?
Snowing
Yeah
Oh, I did see Casey Neissat's video
He was
You know, snowboarding through New York City at the stove
So, yeah
Why do you have to go to New York, Andrew?
Company retreat
Oh, one of those
You could retreat from the retreat
Yeah, well I like our company retreats
So I'm looking forward to it
That's fun
A ski trip in New York City
There you go
Well, why don't we dive in on this episode?
We've got special guests
Jeff Dickey or JD?
Welcome, we're super, super excited to have you
Thank you, it's good to be here
I think probably people will know you right now
From Meaze
The version manager for pretty much every language
And tool at this point
There's a handful of core supported things
But then the backlog of like every ASDF plugin
It supports too, which is kind of amazing
But if I remember right
You used to work at like Heroku
Did you work on the CLI there?
Yeah, yeah
I led an effort to rewrite it
Actually from Ruby into node
So it made sense at the time at least
How was that? How did that go?
And also was that kind of your start
Into building CLI tools
I feel like you're somebody
Who's pretty expert in that at this point
Reflecting on it now
It's actually because
Or more Ruby was a problem
Because that was the biggest issue we had with Ruby
It was distributing it
That we had to make sure that our end users had Ruby set up
And that it didn't conflict with their local installs
And that was a big reason for moving to node
It's because node did offer a single binary
And so it just made a lot easier to do distribution that way
But now
As we'll get to
Like I've already had a single binary for Ruby now
Yeah, yeah that's interesting
Because I remember like
I came from Python
And was trying to do like cross-platform stuff
And it was like
I was looking at easy ways to do that
And it was like yeah
Python is pre-installed on Ubuntu
So that's easy
MacOS had Ruby pre-installed
But it's like that version changes
Depending on operating system version
And so you can't always depend on
Those things
It always seemed hard to build a
Single binary for those languages
And there were
Many little projects for that
But I'm not entirely sure
What makes it hard to do that
I don't know if you have
Ideas on that
But that was something I always kind of surprised me
It was like why isn't it easy to just
Kind of build a single executable
Out of a Python
Program or a Ruby program
It's a lot to ask for end users
To maintain this development stack
For language that they may not even use
Or even if they do
That could be a problem too
Like we would have issues where
The users working on at the time
Would be like a Ruby 187 app
But like our CLI's
And support that
Because that would be the Ruby on path
And it's all explode in
Not good ways
So sometimes we get stuck on the single binary idea
But like that's one solution to the problem
You just want to sandbox your CLI's
Such that developers
It doesn't mess with their local setup
And they don't need to have anything pre-installed
Yeah and I guess that's where you need to mess with
The load path or whatever
So it's like don't use Ruby Gems
And it's default folders
Or whatever is like
You really need sort of control over those things
That way you can say
I'm going to only load my
Vendored copy of this library
You need those, that makes sense
Absolutely and it's a hard problem with development
Tools in particular because
Sometimes you do want
The Ruby on path
This is actually like a perennial problem with node
I guess Ruby has a t-wear
Like I don't know if you guys ever use Forman
Or it was like a pop-up
I think of the time that was a Ruby
Application but like because it's calling
Other Ruby applications
You sort of want a Ruby for Forman
But then the Ruby that Forman
Uses to call applications
You want to be the system
Or like whatever the user has configured at that time
It's a very hairy problem
For sure
And probably it's fair to say
I would argue that like in node and Ruby
They haven't quite figured it out
Python does
Because Python has the like
Python 3.9
Mineries right
This kind of sidesteps that at least as far as like
Miner version to go
I would say
That's funny
I haven't used Python in quite a while
So I don't think I've even looked into
Any of that stuff if that's more recent
Ish I guess?
39 you said
Sometimes you have to call Python 3
Yeah
I got into Ruby right at the time
That it was like Python 3 is out
But everything is only compatible with Python 2
So people didn't seem to want to adopt Python 3
And it got to be very confusing
For a few years there
Oh yeah
That was kind of the
Or something that they
I guess by putting
The major version in the executable
It kind of helps with selecting the right version
I guess
So they give you
Mineries that have just Python
Python 3
And then the minor version
So Python 3.9
So the nice thing is there is we have a Chabang
You can just put in the Chabang
Python 3.9
And then you know that that's going to be Python 3.9
Even it
There's a different Python 3 on path
I think I've seen this with Ruby
I don't know if they quit doing it
But I feel like back 10 years ago
I remember seeing like a Ruby 1.9 binary
Or something
And I think it never really caught on
Or something but I don't know what the story is there
This is pretty unique to Python
Because oftentimes it is just like
The minor version you need to have right
Right
You're not usually works pretty well
If they're following semantic version
The third digit there
Whatever doesn't really matter most of the time
You just want the latest version of it usually
And it's like who cares
It's probably not going to break anything
Yeah that's interesting
Because I don't think I've really ever seen that
In Ruby
And I thought maybe that the Python 2
And Python 3 thing was like
A
Debian package thing
Or something that they did
Because like if you install PostgreSQL
18 or 17 or whatever
They have
Separate package names
And you can run them side by side and stuff
Yeah I don't know if that stems out of
The like Linux packaging
World or something and that came on
As an idea because Python's
You know so heavily used
Ubuntu applications
And core stuff there
Maybe it was out of that or something
It's very likely
Yeah
So you know over the years
Like I learned
Where did I even start probably
Learning Ruby installed
RVM I would imagine
And then
CH Ruby and RBM came out
And I started using those
And then eventually of course
Now you use Webpacker
And you need a node install as well
Which leads you to like using
NVM and then at some point
ASDF comes out
It's like oh why don't we just have one tool
That does this
And that was all written in batch
And I've used that for
A fair bit of time
But there were really nice things
That like RBM had
Environment variable management
Built in or as a plugin
You could add really easily
But I asked them
And the ASDF project
Is that ever
Something they want to do
And they pretty much said no
And I was a bit bummed by that
So I hacked my own
Little plug in there
It was batch, it was easy to add a line
To go run another script to load
Environment variables
But I feel like what you've done with me
Is awesome
From the Tomlconfig
Like there's just so many
You can run a script I believe too
Like you can just do almost anything
You could ever imagine with it
And I feel like there's some
Maybe it's your
Heroku experience and stuff
Since then
But like I feel like you have a really really good understanding
Of like I need this tool
To be very flexible
And we have a few different options for everything
And it seems extremely well thought out
So I was curious
Where did
You stumble on
I should probably go build this
And how did me as get started
How do you think about designing it
It just felt like it had a level of polish
Nothing else that I had used
Quite had at least for something
Is broad as
Every language version manager
So I've been in kind of the
Devin for
Sort of world for a long time now
I started in like
2014 with Heroku
And so like
Getting runtime setup
On machines
Whether it's in CIO or local
Has just been something i've been doing for a very very long time
And I was working at AWS
And was working on some of their
CIO infrastructure
And basically the base docker image
And it was using ASTF
And we just had this design restriction
The way we wanted to work
It gets right back into the minor version thing
Where we didn't want to pin
The patch version of the runtimes
Supples that
We wanted to leave that loose because we wanted
Application developers just always be on the latest
You should always be on the latest
3, 4, whatever provey
And we don't want to have uses
Get a PR and have to
Like stamp that or something
So like that was a design requirement
And ASTF was dead fastly opposed to this
They thought that
And so i think like
Means it really started from the beginning
I thought that it needed to be
Sort of maximalist in terms of
What
Workflows it should support
So like with shims versus path
I think it's the first version manager
I'm aware of that does both
Usually it'll be one of the other
But they both have pros and cons
And so i just do both
And i think that does work very well
Users complain about behavior in one way
The other way
There's no perfect world you can't solve
All the problems with both of them
And
Likewise when it comes to how
Developers want to specify the version
Like if you want Ruby 3, if you want Ruby 3, 4, if you want Ruby 3, 4, 2
It's up to you
And so i think that's done well for the project
It's needed to grow quite a bit
Didn't a lot of work to support
All these use cases but
I think especially when it came to dev tools
It was really long enough that i had pretty good
What the scope needed to be
To kind of cover all its bases
And through some iterations, through a few years
I think we got there
Are you tired of babysitting your job cues
Let us do it for you
Judo scale monitors and auto scales your job cues
So you can stop babysitting
And get back to coding
We support sidekick, solid queue, good job
And just about every other job back end in Ruby land
And of course we auto scale your web services too
Judo scale scales up your apps faster than any other auto scale
So request timeouts and backed up job cues
Are mitigated before they become a problem
Judo scale has a free plan you can use forever
So there's literally no risk
Whether you're on Heroku, AWS, Render
Or any other cloud platform
Visit judoscale.com and get your job cues under control
I forget what i was doing originally
But that was absolutely
What i ran into with ASDF
I really just want to specify
Ruby 3, 4
I really just want to specify
Ruby 3, 4
Or even just Ruby 3 in general sometimes
Because i want the bug fixes
And the security fixes automatically
And sometimes i don't care about the minor version
Because none of my code there is tied to a specific thing
But i remember ASDF being very strict about that
And except for like there was a cool thing
Of i think the node plugin maybe
Had the aliases for LTS
Or whatever and i was like oh that's nice
There were some warts with that
Or whatever too
And i ran into something with that
And i don't remember what it was exactly
But it was like coming to me
It's just like oh you've just kind of just
Address all of these inconsistencies
Between how node versions are managed
And Ruby wines and other languages and stuff
And that felt really refreshing
Because it was like
Just a little bit of chaos
When you're trying to use all these different tools
And ASDF has so many plugins that aren't necessarily maintained
By the author of ASDF itself
So everybody has their own weird little things
And i felt like yeah you did make that really consistent
And the path thing was really awesome
Because the shims
I guess are beneficial in cases where like
You have a system d process that needs an actual
Executable path like a full path
And can't be evaluated dynamically or whatever
But is that also the path thing
Something that makes it faster to
I guess mes is also not written in bash
Because the ASDF i've noticed
Got pretty darn slow for me at some point
But mes is also not written in bash
And super fast for managing versions and stuff
So i'm curious about that
Like for one
Explain to people the difference between the shims and the path setup
And then your architecture behind the scenes of
Is written in rust right?
Yeah, yeah, certain in rust
To be fair to ASDF
Which has now since been rewritten and go
But had they would have stuck with bash
They would not have been able to do
The version prefix stuff
That uses above
And wanted not well
It would have impacted performance
Which is already poor with bash
So much that it wouldn't have been worth doing
It would have required a rewrite
I think
So shims and paths
So
Version manners have largely two main methods
That they use to
Let's say when you type in bundle install
What version of Ruby that's using under the hood
And so the most common way is with shims
And so
A shim is
Sometimes a little bash script
In the me's case it's actually a simlink to me's
But because the
Simlink isn't named m-i-s-e
It knows it's a shim and it so it works
Nice
It basically launches me's every time
And it does like the version
Okay
Try to find the me's tom or the tool version
Whatever the configuration is
Figure out what version it should actually use
And probably that
And then the
Barbarable method
Or the path version
I don't think it was a good name in the cap slate
But basically what you do is
Well to the user what they think it is
It's like when I cd into a directory
It wires up my runtimes
That's actually the bad way to do it
The way that me's does it and the way all good tools do
Is it reloads every single time the prompt is displayed
And the reason for that is
There are times when you want it to refresh
When you didn't change the directory
Such as if you edit the me's tom right
Or if you type in me's use the command to change
Say the Ruby version right
Then like you want that to take effect immediately
You don't want to have to cd out
And in would be it right
So the performance cost just depends
If you call a shim
In a loop in a bash script
Then you pay that penalty for me's to load
Which is pretty light
About 10 milliseconds
It sort of depends on your configuration or machine
10-15 probably
Or do you want to pay it every time your prompt is displayed
Which means does some short circling there
To sort of be able to tell like
Okay there's like a fast path that I think can run in 4 milliseconds
If it can detect that probably nothing changed
So you know it just kind of depends
But really I think that both of these are bad
Because the environment variable method
That only works in interactive prompt
When the prompt is displayed
Right if you have a script
And you do cd inside of that script
It doesn't necessarily work
Me's is doing some tricky stuff
And it's hooking into like
CHPWD and ZSH
So it will try to do the best it can
Depending on the support of the shell
I can't even remember all the ins and outs of top my head
But I think we can do it
In the three big ones
Fish
But that can sometimes be downside
Shims tend to be more reliable
That is often what I suggest people use with like Docker for example
Because it's just sort of doing that resolving every time
And the biggest downside I think with shims is
For me it's just which the shell command which
What's points to the shim
Which is usually not what you want
I like when I say which
I get the real binary that I'm about to call
It makes diagnosing problems a lot easier
Probably we're still better with lm's right
Because that's what they're going to do too
And the more like
Oh okay I got a shim now I'm going to do
Me's which node
Right as an interaction
Right
Tasks are the solution to
The whole thing though because then you don't need to do anything
Okay explain those
Because I remember Andrew telling me about
Tasks
And I don't think I
Quite wrapped my head around him
We use them kind of extensively
And I also love the fact that I can use
Me's X in those tasks
To just make sure everything's better
And the shabang
Like being able to use me's in your shabang
Is even nicer so yeah I'm a big fan of the task system
Yeah yeah so
Another problem with the environmental stuff
Is it requires users to put the ZSHRC in big
Into their shell
Which sounds easy enough but if you've got a big company
And you need to roll this out
You might want to do other configurations
When you get more advanced in these things like
Me's M, you might want to set
No things like that but then you really get to point
Like the ZSHRC needs to be just so for it to work
And figuring it out
It could be trickery especially in your developers
Most of us don't want to think about path and all this stuff
And so like
I've done the best I can around that
But there's some inevitable things there
And the modifies the ZSHRC in the first place
It is a little bit of a headache
So task is
This thing is a fast script
It literally is a fast script
You can call it as a fast script
It works like that
It just has some special comments that decorate it
To add a description
And to take an argument
Help stuff like that
It just sort of lets you build
Some structure around fast scripts
And when you call one of those
All that stuff will be wired in
As if you were running a shim
Or Misex
Or had the shell extension in your ZSHRC
But I think the advantage is that it's very reliable
The way one user runs a task is going to be pretty much the same as another user
In my opinion it's the dream of something like dev containers
But with something that is not nearly as heavyweight to use
Okay
That sounds really useful
I'm going to have to start
Checking that out after we finish this
I know Andrew you had some questions
Like rust versus go
When production breaks
You want to quickly understand and fix it
Not sift through logs for the next hour
That's where honey badger comes in
Honey badger notifies you of errors and outages
And puts performance and context
To help you fix the issue faster
Learn more at honey badger.io
That's www.honey badger.io
I was wondering because I did a little peruse
Do you get my bad?
Didn't want to peek in on everything there
But I see that you're pre-prolific rust developer
And go has been getting more and more popular
For kind of developer tooling
So I was wondering why you chose rust
But it could just be preference
So I despise go
And not because of anything
Bad about the language
I use it work and it's fine
It is soulless
I've never enjoyed programming less
Than when I'm writing go
You're not able to build interfaces
Like the way one developer writes go
What's the same as another developer
And there's no fun
And choice me of the wall
I can't stand it
There you go
Just for that reason alone
I think early in the days
Before I wrote memes I didn't know rust
I tried to learn it
And wasn't able to
Obviously this is pre-LLM
Rights would be different now
It wouldn't have to actually know
But at the time certainly I needed to outrate rust
I tried to learn it before
And I gave up I couldn't figure it out
And came back to a couple years later
And it kind of settled with me
Whereas I could write go just fine
But I did benchmark it
And actually for the shell extension thing
And I can't remember what those benchmarks said
But it definitely gave rust the edge
For sure
I don't know if there's another language
Maybe Zig could be even faster still
Don't know
Right
I think rust is fast enough
Don't often hear complaints about the performance
Well keep an eye out for the assembly branch at some point
Yeah
Get an LLM to rewrite it at some point
Yeah
Extensely just about me's
But you have a lot of other really great project
You want to talk about FNOX?
Yeah
FNOX or FortNOX
So
Secrets was a long standing feature request for me's
Don't understandably so
It does environment variables
People don't really like putting plain text environment variables in
And so there was this experimental stuff
I'd worked on for a while to
Use something like SOPS to feel familiar with that
Which is
Basically a way that you can have a Jason file
For
Can be for environment variables this is often used for
But it could just be any
Jason or Emel or Tommel file
But it gives you a way to encrypt it
And then commit that encrypted
Into your code base
And then you can use something like AGE
Or an Amazon KMSK or
Some decryption
Due to crypt it
Which I think is a fantastic way to handle secrets
Right
You're out with some there and then we're all screwed anyways
But
So that was kind of the model that I had been using
And what people really wanted
For secrets was one password
That was what people wanted
But these can't really do that
It can't make a network call
Every time you run a task
It's too much
It's way too much
It's going to be slow
You're going to get rate limits
It would be awful, awful experience
I don't put your secrets in some cache on disk
That's what you're trying to avoid
So originally I just
Did it because I needed to be a separate CLI
So that like
It doesn't have to refresh that environment all the time
And just by virtue of not being part of me
And being this other thing
It can just refresh when
It works in a lot of the way the same as me
But has an FNOX.Tommel
Where you can either have encrypted
Environment variables
Or you can have
Remote ones like one password
Or it was on secret manager
Or things like that
It's a lot like me
Where it's like I want to give choice
I think the encrypted way is the way to go
Because it's just faster
But if you really want to use one password
Which people do because it's super convenient
And with that options there
I wouldn't say it was totally nailed
The caching thing
Still kind of noodling on it
Still less to load everything
It's not better
But I have some ideas
But we'll see what I can come up with there
But that's basically this is fast secrets
In your environment when you go into projects
I think encryption is the way to go too
I mean sometimes we'll use like the OP
One password CLI to grab things
From our shared password vault
But we also have like
Our own kind of encryption system going on
And my CTO
Wanted me to specifically ask you about this
Because I think that's something that we're definitely like
Okay this could really solve
We could really consolidate a lot of stuff
If we use this
I've actually been seeing it this week
Like there's this workflow of like
I got stuff in one password but I want to get it into my repo encrypted
I think that's a workflow that should be more native
It isn't right now
But it wouldn't take that much work
Yeah
So I think there should be something there where
It is kind of a cache
Maybe a manual and we have to like run
And then that would pull things out from one password
Put it in encrypted
You know I also think like some of the stuff around like
Augade could be a little bit better
Managing the lifecycle around that
A lot of that is kind of left up to the user to figure out
How do you manage the public keys and stuff
I could probably do more there
No I like the sync idea
Because I wouldn't have any problem doing that
How often is your password well
Your password should be changing
More often than it probably is
And likely is probably not
So if it does change
It's having to run sync and then it's there
I'm good to go
I mean you could run it on the scheduled GitHub action workflow
Right
Yeah I'm a big fan of those
Next thing I wanted to ask you about
Unless you have anything else you want to say about FNOX was Pitchwork
Pitchwork I'm excited about
So Pitchwork is a demon runner
And I guess it sort of competes with like system D in a way
But it's really more for developers
You could run like long running
Demons out this
I'll tell you that the use case that I find annoying
Is I go from project to project
I see the end and like I want to run the doc server
Or the application server or anything
And like I always forget oh I got to run it
And even with LLM it's like kind of a pain
Prompted to start and like
I don't really like running LLM
The demons inside LLM
I don't know
I have a tab open where you run
NPM run server or whatever
But like
Rail server probably for all your listeners
But I don't know
I kind of hate managing that other thing
Sometimes I forget that it's there and I try to run it again
It's like oh that's really running that port
I'm running two different things on different ports
So that was the problem that I've always had
So I just wanted to be like I cd into a directory
It starts up the servers
In that for that project
So they're just there
If you leave that directory then they go away
I'm kind of an automatic way where like if I have
Five terminals in one obviously it's not going to run five of them
That's kind of the idea is that
It's this automatic demon runner for development services
And it's coming along
You know it started probably a year ago
Kind of got it to an experimental state where it was working
I gave it another pass a couple months ago
And really kind of spruced it up
To what I think is a good one.0
And seems to be humming along
I haven't been seeing a lot of bug reports
It's I'm happy about
Because trying to diagnose what's wrong
With the thing running demons is a lot trickier than
Something you're just like calling as a CLI
Seems like it's going pretty well for people
Another thing I've really need to
Is like you know I show like all of you
I use Docker a lot
You can't run this system D in Docker
Or at least you're not supposed to
So like I've done this where you have to
Post is like using system data like
Launched and it's clunky
Pitchfork is just a rust CLI
So it doesn't need any special system stuff
It can just run demons anywhere
There's also like
You know it's similar to
Supervisor D I think
It's kind of an older tool around this
In some ways you can just think of that
But with Tommel
Yeah I think that's pretty cool
Last library I wanted to talk about
Was usage because I think that's
Really freaking cool
Yeah usage
We'll see I'm actually a little
Negative on the future there
Because of LLM so usage is my
CLI is like swagger for CLIs
And you can generate documentation from
CLIs but what people
Really like it for is completions
And that powers
Meas has very complicated completions
So where you can mount like
It gets into the tasks stuff right
So if you do Meas run the way you run a task
And hit tab you can complete crazy things
It's pretty easy to configure
Because it's all built on this usage
Thing that I wrote this spec
And it makes it pretty easy to decorate
So like let's say you had
A Meas task to like list users using an API
It takes like a couple lines of code
You just like define the completion
In that Meas task and say curl this thing
And like you just have to
And separate it things right
The reason I say I'm not sure
It's just I think with
Agents don't use these
They have other ways of getting this information
And so I think like
The days of us actually getting tab
The terminal might be behind us
But it works really well for me
Because I have a lot of CLIs
I use usage and all of them
That if nothing else
It makes it so I can have consistent docs
Consistents, man pages, consistent everything
Across all my stuff
And I have been using Rust for everything
But if I ever wanted to do another language
Signastic to that
Which is quite cool
I'm a big terminal
And what you said about us
Not using the terminal much longer
Maybe freaking die inside a little bit
But not the terminal
No completion
The completions right
But I was like oh my god
Because completions have always been tricky
You know you got to have this here
And that there and you got to
You know make sure the brew
Sight Z functions are in or whatever
And I was like this is so nice to be
Just like use these kind of magic comments
Because this is a workflow I'm very familiar with
These documentation comments to the top of the file
I also feel like it makes it easier
For the LLM to use as well
And then it makes it easier for me to use
Right? And then I also like
That you can dump it out to mark down
That's big fan of that too
Where it has a strong future
Another thing about LLM is
I can make the integrations
That's been on my list
Is like for all the different
CLI frameworks
For all the different languages out there
It would be great if
They had some usage plugin for that
So you can export it
Those are super easy for me right now
Yeah nice
Are there any other projects that you're working on
Are you excited about?
I can't forget it
All right let's go
Yeah I was going to say
Ruby ever since I've ever
Even until recently
There's just not been any pre-compiled versions
It feels like
So I run a little hosting platform
Called Hatchbox
People will spend up a $5 server
But if their first deployment
Is compiling Ruby
That will take 15-20 minutes
So I was like why don't I just go
Pre-compile Ruby
And just go back through
And wrote a script to go
Ever since I think
Up to like two six
Or two seven
We just compiled the latest version of those
And then
Newer Ruby three
Or something we do like every version
So we just have like
Our archive of those
But the thing I discovered
Knowing a whole lot about like what actually happens
When you're compiling Ruby
You know in the past you've needed
Liberied line and the
Version of that you get
Liberied line three
Or four and different package versions
Different Ubuntu versions
End up with different names and whatever
But then you also run into the issue of like
There's a prefix directory
That gets hard coded as like
This is where Ruby is going to live
And
I
Didn't know anything about that really
Until I moved it and realized
It's just looking for that old directory
All the time
But then I guess
Homebrew and
Mike McQuade had
Built a portable version of
Ruby to run on macOS
And I guess maybe on Linux now too
With homebrew on Linux
And that's kind of the foundation
Of what you
Wanting for me is now
With the precompiled rubies right
Yeah
So i think this story starts for me
Back a little ways with python
Because python had the same problem
Same exact problem
And
Us and
Astral the ub guys
Both just for our users
Wanted faster pythons
And so there was a guy
Name escaping right now
Working on portable python
As a site project kind of thing
And had some success with it
And astral took it over
And spear had the development of it
And for me as i picked up
About the same time
I wasn't sure if that was something
Just wanted because it was kind of breaking change
Like these vineyards are not as compatible
But they're so fast
And so i left as a boat
What do you guys want?
You know this is a lot earlier than me these days
We compiled and so we went with that
And i'm so glad we did
Because it's so much smoother
To use python and change versions
Everything
So naturally with ruby it was the same story right
It takes minutes to compile these stupid things
And very frustrating
Especially if you do use patch versions
You get to have three four one three four two four three four
You know just uh it's terrible
So yeah home brew had a portable ruby project
But it was very like purpose built for home brew
It wasn't a general purpose thing
And they it's explicitly called out that that's not
The goal of the project
Not what they were working on
And then Andre Arco he picked it up
And he had done somewhere for his RV project
I think that
I just I want to win this thing
Like i want to win it myself
Just the supply chain security stuff
Is like something really sensitive too
I got hundreds of thousands of users
And like i feel
Responsibility that if i'm compiling stuff
It's secure
You know i like to trust as few people as possible
And so i was like oh i'm just going to take this on
And see how much work it is
Like finish this out
And like try to get it into me and see what happens
But forget when
I want to say maybe like November
December i added it
Into me is like an experimental thing
Hats people try it
They ran into some bugs
There's like something weird with SSL
You can see things
You know smattering things
Really take a lot more effort from where it was
But i guess it must have been about
Two or three weeks ago
Like DHH made a mention of it on twitter
Yeah
And frankly i kind of forgot about
I was kind of letting it just sit there
Like people tested out
But then i was like you know
It's been a while since i've heard about any real problems here
Let's pick a date
Everybody switched over
So i think that's going to be August 1
But i think it does like show it warning right now
That this is going to happen
And so you can opt in now
To get the port of ones
And actually kind of through all that
A lot more people tried it
I think they found another bug or two
I imagine there may be another
Couple hidden in there somewhere that will uncover
But it seems to be going pretty smoothly
Which i'm pretty happy about
So we'll see what it's like when i flip the switch
But obviously these are not
Me's minaries
They're there for RBM
RBM
I hope everybody uses them just like
What happened with Python
But i don't actually know why
Like Ruby doesn't just do this but
Whatever reason
Or Python for that matter
But it's so good for the ecosystem
It makes a huge difference
You know it's not just the time
It's like all the app gets stuff
Things people have to do to app getting install stuff
Or like they need to home brew
And they need to...
Users hate that
And they're not going to use your language because of that
It's just the way it is
Yeah, it's been a long frustration of mine too
And part because i get the complaints
But i'm hoping that will be no more
Come this summer
That makes a lot of sense
And that was one of...
You answered one of the questions i was going to ask
Was like you know i knew Andre
And i was curious you know i saw that
Your repo is a fork of
That i believe
Yeah
And that i understand most
I understand more work than i have
I've done very little but there's just
A couple things to...
It makes sense though if you're the one installing it
Then you should be responsible for
That and
You're going to be the ones getting the complaints
If something is wrong or whatever
So it makes a lot of sense that you want to own it
And so you can fix the things and
And truly understand what's going on there
And whatever
With Python i'm happy to let astral on it
But there's no
Equivalent to that here
Yeah no right
Yeah because i don't know i think there may be
Some talk or whatever of
There may eventually be
Something like that happening in
Ruby officially
That would be awesome
And then these efforts could hopefully be
Combined or whatever but
Yes
I remember i used to go to
RBMs wiki
And look for
If you're compiling on Ubuntu or Debian
Grab this giant long list of packages to install
Before you compile Ruby
And it was like
All these tools you don't really know what they are
And you're just like
I just want to use Ruby
So i blindly install
Or whatever
And then over time too
Ruby
Removes like the need for
Libreedline
There's a pure Ruby version of it
And so like
More recently the required sort of dependencies
For compiling Ruby is very small
Less thankfully compared to what it used to be
And that was one of the things
I spent some time trying to figure out
With i rewrote the new
Rails getting started guide
Rather than the old guide
Which just said install Ruby
And once it's installed
You can gem install Rails
I was like we need to
Help people install Ruby
So i ended up adding the install
Ruby guide there
Which uses me
But it has some of those
Install these packages on macOS
Or linux
Or if you're on windows you should use
WSL and more or less
Instructions and
It still felt like
The sucks as a
Someone who wants to jump into
Rails they don't care about
The internals of Ruby or any of that
They just want to use Rails
And even having
A version manager is a little bit of
A annoyance as well
But it makes it so nice
Because when you want to switch to the new version
Now you'll just be able to say
You know Ruby 4.0
Or 4.1 or whatever
And it'll just be like
Oh cool that's why we have that
And that makes sense
But with the whole compilation steps
It was just like no wonder
That our community doesn't have many
Juniors and they're going to node
Because it's so much easier to get started
So i'm super excited about that
I'm going to have to make a pull request
When the pre-compiled
Ruby's go live because that will be
An even shorter install guide
Or maybe that can go away entirely
But
Some of those dependencies
Like open SSL or whatever
Need some tweaks
To be able to be fully portable
I was just curious what goes into that
Because I think most of us use Ruby
And we've just run the same steps
To compile it but we never really
Understood what's going on here
What's configurable
I know you can install like
GMP and that makes big decimal
More efficient or something
And like we just don't know
We use Ruby, we don't work on Ruby itself
So I was just curious to hear your expertise
On what happens there
There is some base level of support
That Ruby has been working on
I don't know how far back this goes
But there is a flag that you can use
On compiling it
And that kind of gets you started
Don't know exactly what that is
But I would assume it's going to bake things in
It's not going to rely on shared objects being there
It's going to try to
Bake as much in as it can
And
Beyond that, it's just a lot of little things
It's like, for example
One of the things I fixed was
Open SSL out of the box
I guess doesn't look at the SSL cert file
Environment variable
To like look up where its certs are
Like a patch open SSL
In the stuff to get it to do that
But now that work seems to work great
And it's a lesson with like native gems and stuff
And also like native gems come with header files for the C code
And so like I had
Can't remember exactly what I do
But I do something to like
Get that to work correctly
So when you do at the end of the day
You do gem install with one of these
It works
And when you install one that
Luckily for most of the big gems that
Are like no kugiri
These days they come pre compiled
And we just download the correct version right from Ruby gem
So we don't even at least I don't
Most cases have to compile gems
It feels like
Which is nice
That makes sense that that's kind of a compatibility thing
To make sure that
Those are finding the right directories
Or whatever because they're going to be
Potentially moved
Do you have to do any testing of that
Compile Ruby in one place
And then move it to another folder
And make sure that it still runs
I don't know if I have to test that specific use case
I think by and large I just assume it works
Because it would fail
It's not the else it would fail when I try to use it to me
And it doesn't
Oh right yeah
And like because this is a fork project from homebrews
Like they were already having to deal with that
And obviously a wildly different path
And whatever it gets built on
And get out of actions
But I do like add definitely like use cases
There's like test scenarios for like
Chewing gem and souls and stuff
It's been a lot of that
I feel like it's been actually the gem install part
And less of like the Ruby binary itself having issues
Yeah actually I don't think there's anything I've done
With Ruby
It's been open SSL and the gem
It's all the extras
It's probably who knows when like
Ruby three or three one
Or something when they took that a bit more
Seriously and added that flag
You were talking about to make those
Things dynamic or whatever
Or bundled into the executable
Or whatever
Because that I'm sure you can't just go back to
Ruby 187
And maybe you could
But it would probably be a lot of work
And I think
I believe that fusion passenger
Team at one point had like
Built portable Ruby
187 or 193
And like some really old project
That
Since been very abandoned
But it seemed like it was a ton of work back in the day
Yeah it seems like a few people have taken this torch
And it's like traveling Ruby
It's a great clever name
Yeah that's the name of it
I think there was another one in the middle here too
That maybe less version or two
But we'll see
Yeah, you know if nothing else
I hope that like having it in me
And having that be part of the standard rails and saw
Like at least now there's a place
If something is over my head
At least like there's a central place
That we're doing this for a lot of people
So that hopefully
We'll accelerate adoption too
Where it's like
The rails community now is sort of
Put a
Flag in the sand that says like
Rather than
You go to the Ruby install page
And it's like here's 100 version managers you could use
And there's obviously like
They don't want to have a preference
Or whatever they want to kind of be agnostic there
But it's like at some point
It's helpful if you do
So that people can rally around
Polishing one solution
And then that continues to improve
And just get really good over time
As opposed to lots of little
Just to acknowledge might have made
One thing better there
But never gets pulled into other projects
That makes it just a bit trickier over time
You think
There'll be any challenges
To maintaining that going forward
Or will it just kind of hopefully be
I guess automated
And maybe you don't ever have to recompile
Like the oldest rubies
All you have to do is the new ones
Is they come out
Unless maybe there's some like
Open SSL or something that you discover
And you've got to go back
And maybe recompile every one of them
To correct it
But what do you think in there
Maintenance?
So I've been working on this now for about three months
Four months maybe
And it's been pretty minimal
Like of all the projects I work on
This is not taking up a lot of effort
There's no open bug I'm aware of right now
Which is great
But yeah, when I do find something
It usually is across all versions
I forget how far back I go I want to say three two
I think three two is what
There's a version like three three oh that
It's not building
Yeah, there's a couple odd ones like that
That you can't even compile it yourself from scratch
Or whatever
Or bug in the release or whatever
I have a couple of those where I skip them too
Yeah
So if that comes up, I'll rebuild them again
I am doing maybe one things like we're mentioning
It's like
The way I version these is a little in orthodox
Where
You can't access my old builds
So I'm using like the
GitHub releases like three three zero
There's no build revision there
And that's kind of just to make my life easier with me
Because
Meas doesn't have a concept of build revisions
I don't really want to add that
Like ultimately this hurts the easier
And I don't think you care right
Like if you're using pre-compiled binder
You're already not very sensitive to how the sausage was made
Downside is here as like
Shaws will change if I do have to rebuild
So it's not perfect
But we'll see how it goes
I may regret this decision
But I think the nice thing is
You can just like go to that
GitHub release your L if you're using outside of me
And like that's the latest version
Right?
Copy it yourself and do whatever you want
If you want some particular
Vintage of how I compiled these
And some particular date
You know
Yeah that makes sense
And like if I did discover a bug
It's like
You'll fix it
I'll just delete my local install of that version
And then install the new version
And it was just
Download the new executable
And boom
Again I may regret this but that's what works right now
Yeah
Yeah and it's subject to change or whatever
If it becomes a problem or something then sure
But yeah
Don't need to address it yet
I'm just super excited
For this because it seems like one of the
I just wish we had this 12-15 years ago
It feels like something that just
Should have been solved many many moons ago
But at least it's being solved now
So you have to
If I remember right you have to run a
Command to set a flag to enable this
Yeah
So we should record but that's really it
And then the next install you do
Of one of those
Supported versions
Will try to download that right
Yeah exactly
So yeah anybody who's listening
That wants to try it
There's a specific version of me is the ads that
Functionality they just might have to
Self update or something
It'd be good to be on the latest
Yeah yeah
So in the docs that will be there
And easy to run
I already switched over my
Desktop and laptop
To using the pre-compiled ones
And I'm generally just using
For Ruby 4.0
So everything's been working perfectly fine
You wouldn't notice other than like
That installed
Occurally fast
Because usually I'm used to the
All right install go grab a drink
Or use the restroom or something
Come back and have some wait time in there
But now it's just like
Whoa this is awesome
And it's i don't know
Something we've needed forever
So I appreciate
You like taking the responsibility
To like let's make sure this moves forward
It's awesome and same
With the spin-all team working on our
V like they did a big step
In this as well
I'm curious because doesn't
For me is work
Use UV
Underneath for python
Or do you have your own version
Management
Use UV for python dependencies
So if you wanted to like
Pipex
So there's a pipex
Backend so you can just install
Arbitrary python packages
That is a bad name
We might probably change that name soon
To pypy
Just for performance sake
And
There's a few ways like pythons
Quite complicated as like virtual amps and stuff
And like
I am not a python developer whatsoever
So I'm really an awful person
To be building a dev tool that's used by so many pythons developers
But I try my best
I know Ruby a lot better
Ruby is a lot simpler
And I think like the dependency story
That's never been an area that
Means touches me so about runtimes, tasks, environments
I am dabbling in it but like
I think coming from rust
I want that experience for everybody
And I think it's been out too like with RV
That is their goal and I think that that
And UV I think everybody wants
A cargo kind of experience for their languages
Because it's way better
To not have to remember bundle install
I think it's just a bit
So yeah I'm excited to see
What they're able to come up with
Because definitely need for that
A couple weeks ago like
I don't use a lot of node
And rails
In the webpacker area
Era was kind of like just assume
They're going to have yarn classic installed
It's like easy enough
But then I got into
Supporting core pack and stuff
And I was like oh my gosh
This is
Ridiculous that like
You have npm but
There's three or four versions of yarn
And then pnpm
Its own shims to install these
And thank goodness that we just have bundler
And that's all we have to worry about
In ruby at least for now fingers crossed
It stays that way
But the complexity of that environment
Is just like wild
So many different ways of
Installing things in the node modules folder
Or no we have a global line
And we simlink those
Or whatever optimizations they implement
It's like this is just a nightmare
To manage so
That brings me to a question that
My coworker wanted to ask you
Which was how hard is it to maintain
Meens because it seems like
An enormous amount of work
Because all these languages are quite a bit different
There's so many decisions to make
Along the way like even just the ruby
Releases in the versions
In the Shaws like
It feel like there's a lot of these sort of
Open-ended questions that are
Not easy to pick an answer to
Without making
Accidentally breaking changes
And stuff over time but i feel like you've
Been able to make it pretty darn
Easy to upgrade without breaking changes
And stuff but also supporting
Like everything
It feels like me is just supports
Any language i can think of
You know in terms of supporting languages
Like i just because i work i've been doing this
Right i've been supporting languages
With internal
Scripts and stuff so i've had a pretty good
Knowledge like what the idiosyncrasies
Are and what different languages are
And also like
They rhyme with each other
So in a lot of ways python and ruby
Are quite similar for example
There's differences but
I guess i just came with the experience
Necessary to be idiomatic
In every language best i can
Ironically though the one that i think
Meens is terrible as rust
I don't like using it with rust
And it suggests people don't
I did add it because a lot of people
Wanted it just use rust up
It's better
Also writing rust like
Rust is the best when it comes to dev tools
It is so so solid
That i think it's giving me a good
Norstar i'm like where i want
Other languages to get to
I have like very very few
Complaints about rust which is why
I can't meet that standard with news
But yeah with breaking changes
I think that
That is kind of evolved over time
From the beginning i knew that
I had to take a pragmatic approach
To it like i didn't think
Semper was going to work
At all because
So what if there's like a breaking
Change with like elixir
If you already know it you don't care
You know and i just thought there would be so
So much noise and we'd be a version
100 before we knew it
I just thought it wasn't realistic
As if it's a service
And not a CLI
Because when you use a service
Napi you're using the latest right
You don't get a choice of which version you have
You're just always on the latest
And like i've always wanted people
To be able to be on the latest
Was kind of the idea that you should just
Always be on the latest all the time
And when there is a breaking change
Let's say with Ruby for example
Like what i try to keep them very
Minimal only if it's this
And i have a very specific
Procedure that i go through
So initially nothing happens
The new feature gets added
So Ruby pre compile
You can opt into it if you look in the docs
And you find that somewhere
In a few months because it uses calvr
So i know like in version
2026.4.0
It will automatically start showing a
Deplication message that
This is going to become the default
You don't want to see this message you can default into it
Now where you can explicitly opt out
And then that will stay. The reason to wait
Is because i found that if you just like
Immediately throw a deprecation message
At the same time you add a new feature
Then the people that opt in
And they commit that configuration into their project
Now require all the other people using that project
Update that's frustrating
So that's why i wait a little bit
Let the thing make people
Chanced update on their own
And then there's less of that
There's still going to be people that are on 9 month old releases
At some point you just got to pull the trigger right
And so then we'll see the message a few months later
I actually if it's something i'm removing entirely
Ruby is not a good example of that
But occasionally there are breaking changes
With the old thing is just going to go away
Because i want to kill it
Then i actually have it fail to compile at that
If it's 2026.8.0
It will just like
Panic when it compiles
To me to go in and remove it
Because i don't remember
Right
That's kind of how i do breaking changes
So there's always breaking changes happen
And try to keep them minimal
But it follows a time process
And not a version process
Another thing is like
You can't use old versions of me
There's like things baked into it
The domain names
Different services that i don't control
And so like
Just like to run a one year old version of me
It just isn't
Yeah that makes a lot of sense
Because it is
In general you'll always want to use the latest version
There's almost no reason
You would ever want
That except for you
You may want to go
Look at and debug something or whatever
And see what
Like oops i missed something here
But as a user
I don't ever want that
I think i forget to update
Sometimes or whatever
And occasionally i'll have the
I'll remember to like
Homebrew update and upgrade
Or whatever but
And oh my zsh will prompt me occasionally
But i don't think does me
Has any like prompt for like
And i guess your time base
So you could kind of say
Hey you're six months old
You might want to consider updating
No i used to
Kill switch in it
But if you ran a three year old version
Or something or maybe two year old
It just wouldn't do anything
It just no
It did have this logic
It was like a month old
It would start showing it
And then like after all
It's just going to kill itself
Because really at that point
All bets are off
And the thing is not going to work right
For the reason i just said
This is very specific to me
None of my other projects
Use caliper
It's just because it's this
Source of all these dev tools
It has to be version has to be kept up to date
I think i did take that out
I think just as it kind of matured
And there wasn't going to be as many big changes
And it became clear to me
Like if it breaks it will break for the reason it broke
And i don't need to force people
But yeah
So i think i ended up taking that out
As i put the version everywhere
So if you run these install that says the version
And if i put the version all sorts of places
And because it uses caliper
You know the user sees that
And so if they submit
Lugger port
It usually doesn't get to that point
Like they'll probably copy and paste it in
And be like
Oh
That update this
And then it all sorts itself out
So i'm not getting a lot of issues from people
It's too that like
If i was to report a bug
And saw the version
It'll immediately
In my brain be like
Wait that's from 2024
Maybe i should just try to update
Because if it's version 7.32
I have no idea what the latest version is
There's no like
Reference there
But being calendar based
It makes total sense
For just like a little trigger to the user
Like hey you might want to update this
Yeah
That's interesting
That's funny i like that a lot
Because it would brought that up for me
It was like
I missed that in the docs about the pre-compiled rubies
Because i poked around the docs a whole ton
Recently but didn't see that
And then i was like
You know what i've not updated me locally
For i don't know how long
Maybe nine months or something
And i don't necessarily
Haven't had any issues
So there's really no reason to update
And the main thing maybe
Is like the new features
Or something that i want to use
That would be the other trigger for me to update
It's like something breaks
Or i want to use a new feature that i don't have
But neither one of those
Had come up for a while until i saw the
Like oh hey there's been pre-compiled rubies
For a little while now
And that's something i should really be aware of
And i just missed it
I'm going to have to maybe consider adopting that
Because in Ruby
I feel like we're just
Semantic versioning is kind of the
You know 99% of the way
Every project is managed
But that seems like
For those types of things
Incredibly useful where
Yeah you know what the specific version number
You're not integrating into
This is the library
The same way you are with like
A Ruby gem or something
So it's like yeah breaking changes
Probably don't matter
Meas is way too many
Releases and
There's way too many changes
That it is not realistic for users
To read the release notes
No where near it
So like it's just not an option
Like even if i was usingcember
Like a developer is really going to pay that much attention
If i'm bumping the major version
I don't know how often it would be bumped
But a lot more often than i'd like
Maybe i should use some more projects
Like we're so well for me
But my other projects
So like they tend to be like
I'll kind of be interested
And i'll work on it for a bit
And i'll work on something else
That means it's always always getting working
Even if it's not me, it's other people
There's a release every day pretty much
And i just have to
I don't run it too long
I actually built another tool
To do AI release notes
Because it's not just some like thing
Generated from the commits
Like cloud is actually going in
And like reading the source
Reading all the discussions
Let's communicate if anybody was interested
In using their own project
But it's basically just an LM agent
That is specific to release notes
And it does an amazing job
Of just kind of summarizing what happened
That would be a full time job for somebody
I think just to do that
And so it's remarkable
That use case there
I've tried to do that
Notes and whatever
And it's like
You're merging PRs
And you forgot that
I merged these seven
And these didn't make it to the change log
Or something
And then you like
Have to go reread through the whole dang thing yourself
And it's like
Yeah, just have the AI summarize that
That's a great use case
Any more questions
I mean, I just want to say thank you
For all these libraries
Like you've made our lives better
Not just with this new Ruby stuff
But I've been using these
Like almost since it came out
And I love it
Like the integral to my
Like my little cousin was like
I want to build my own app
I've got an idea
And I was like
Okay, I can get you set up easily
Because
No, thank you for using it
Appreciate that
I've got one quick question
At risk of studying
Like I'm blowing smoke or whatever
And you know, Mises kind of
It's the gold standard now for version management
And like, shying a bit away from the technical side of things
I kind of wanted to ask
When Mises kind of grew into that
And kind of exploded
What did that change for you
In terms of just
From a more personal side of things
Instead of like the technical conversation we've been having
Um
What did you think about that
Because it, you know, it didn't happen overnight
Right? So
Yeah, how long have you been working on Mises
I think it started
Fall of
2022
I want to say
Yeah, it's not that long
Yeah, really not that
Three and a half years
I had posted probably after
Was it going up for, I think, quickly
And now it seems like ages
Because you could do it in a day with an LLM
But it took me four months
And I post on like an ASCF issue
About performance because that was like
The main thing I was struggling with
And people immediately were using it
As like their main platform
So I had users right away
It struck a court in hindsight
There was a need for something to fill this role
Simply ASCF would faster
There really isn't any polyglot version
Matters aside from ASCF
And maybe next if you squint
Maybe docker
If you're squinting very hard
But people wanted something here
And anybody could have done it
And I just happened to be the one that did
But very can change this stuff
Like when I was just talking about like that
I definitely had to refine that to get that to where
It's not frustrating people
I think like the decision about
When to adopt a feature and when to
Pass on one
Is always a hard one
Like I took on task environment variables
And that was not
Met with universal happiness
Probably more negativity than happiness
People liked me because it
Did dev tools
And that's what they wanted for
They didn't want all those tasks stuff
But I really thought that was going to
Really empower it to be better
I think it has. I think people
And so
Now I'm having to dial that back
You know the scope can only increase so much
And so now I have to be more careful
Like right now
There's been a couple people that want me to improve the docker images
There's like stock docker images
I hate maintaining those
Don't like it
So I'm probably going to deprecate them
They've never really worked well
So it's not a big loss
There's like other things I'm considering
We'll see
People unhappy but the maze action
They get to have action
Hate maintaining that thing
Just hate get to have actions
It sucks. I don't enjoy it
We'll see
Like there are features people want to get it
I mean this is a hobby
So I got to do the things I like to do
I don't drop things often
But I'm certainly at the maximum
Of what I can take on
So I have to pick and choose
I think it's been coming up more often
I think it's been a part of the code base
Is every use case
And so now it's a lot more of saying no
And trying to be
As focused as I can
On stuff that matters to the most people
So you know I do the best I can
The docker image
Because I guess like in our rails
Docker containers
For the images are like
Start from Ruby
But then like
Download the node executable
And whatever
Is that kind of what people are using that for
Is like I need a docker image
With multiple languages so it's convenient to use
Me as here as well
To do that
Rather than starting from like
Just a Ruby one or something
Once a dev container for working on me
Is itself because I don't use it
I do most of the development
It just breaks because I don't use it
But like people want to like work on me
Is like
It doesn't work right now
I actually think the docks do say
Probably don't use this
The other one is the more
Some of what you're saying which
Could ostensibly use by end users that like
They just want a simple docker image
With me's on it
That's not what it is
It's a full fledged of boon two
With a bunch of crap in it
That I use for some
Infra there's this thing called me's versions
That is like a server component to that
Because making GitHub API requests
Those people's rate limits up
So I have a service that just does that
But for that it has like run through every tool
And it runs them all in a docker sandbox
And so like I have me's
So I use that
And that probably isn't going to change
But other people have wanted to use it
Because they just like want to have me's on a docker image
Which fair enough
But like they kind of want like a lightweight
Alpine thing or something
That just like has a simple thing
And it's not what it is. It's not really what it's made for.
In fact, because installing me's into any docker image is not hard
I could maintain a suite of them
I could have an Alpine one
Red Hat one
But like I don't like it
They don't like being a docker anymore than I have to
So I think I'll just pass on that one
People just use curl
Like it works the same way
Every other tool
I've done a lot of docker
Image stuff
And I also share your sentiment
Especially around GitHub actions
Yeah
That would be sticker around
That would have way more value than the docker stuff
So I can't kill that one
For sure
I don't know. Don't know what I'm going to do there
But I would like to see somebody else make a really comprehensive one
That one's because there is room for that
That would be a thing people would use
That has like more advanced caching and stuff
Where mine could just be like a naive version of it
Kind of the MRI of the
Me's action world
Well, I don't know. We'll see
Yeah, along with
David's question is like
Did you get bombarded with
GitHub issues and stuff when you first launched?
Was that overwhelming?
I hate GitHub
I don't use GitHub issues on any of my projects
So yes
That's the trick
Turn along the main culture
Yeah, I stick to discussions
And a large part of that is just
There's no like
A badge at the top of the thing
That anybody with doesn't know
To use a computer can like
Put something on my to-do list. I find that
Madding
Probably 25% of the issues are not worth my time
You know, it's a summary documentation
Or
So really stupid feature idea
I don't need to respond to that
And like I don't want a badge that says
That I hate that
So you know, I love discussions
Because it just lets like read it right
It just cares about it and nobody ever sees it again
If I'm wrong and like people search for it
Then maybe it will bubble back up
And then it's great
It's not perfect like one of the biggest frustrations
I have with discussions you can't like
Close them from merging a PR
Like you can with an issue
Right
And also just like
This is open source
If there's a problem with me
It's not my problem
It's your problem
I do a lot to help people
But like at the end of the day
It is your problem
And it's up to you to fix it
I don't think that issues
Solved that well
I remember Adam Wathen was talking about that
With Tail and CSS
Where he was like
Half the time people
Don't use it correctly
Which is an issue for us
And half the time it's like
Sounds like a bug
It's like the version that is out
Does what it does
And if there's something we told you it does
But it doesn't actually do
That's the only time I wanted to issue
And so he was funneling everybody
Over to discussions for
Sort of the same reason
And it's like the community also then has
An opportunity to answer their own questions
And help each other out a little bit
And he was like
Yeah, the same frustrations
Where it's like
Is not what I consider a bug
Is not what I consider a bug
And we have different definitions of this
And it's like if I promise something
And it doesn't actually work the way I promise
Yes, then I agree it is a bug
But otherwise
It's a you problem like you were saying
And it just is not
Designed super well too
Especially these days when
Anybody can do drive by
Pull requests and
Whatever from LM's
That stuff pretty fast
And then you have to feel
Bad closing these things
Without
Putting a nice you know
Sorry but
Whatever
It just makes it so much harder to maintain
Open source these days
But we appreciate you doing this
Because it has made our lives
Heck of a lot better
So I know we have listeners at GitHub
So
That would be killer
It kind of works the problem in different way
That they've been talking about
I actually don't get the PR
Slot that a lot of open source
Maintainers are complaining about
I don't know why
I mean probably 10 times as many PRs
I used to but they're actually quite good
I would say
They had one or two really crappy ones
But
Well, if you want some more
Yeah, yeah
Maybe because it's a CLI
The LM's are good at that
I don't know but I'm not complaining about Slot
By in fact like overall it's been
The increase in PRs has been great
I would say because it's been like
Used to be able to help themselves
And have a great test
Behind their stuff and
I had a user for Pittsburgh
Yesterday who
Built end-to-end test with like the wrong thing
Like they're supposed to be in bats
And he wrote them in rust
To say you got to rewrite this
But I'm no easy using LM
So just rewrite it
And easy
So I love it
Open source Maintainers in
February of 2026 is lovely
Because users are able to help themselves so much
Especially with rust, right?
Because most people don't know rust
But LM's are very good at it
That's awesome
Well, I don't have any more questions
Unless you guys do
Online if they want to follow your content
I'm a blue sky
And an X
JDX code on
X and
JDX.dev on blue sky
Well, thanks for joining us
This is a blast
Thanks for having me
This is lovely
Thanks so much
Seriously for all the tools
All the like
Just even the inspiration of like
Performance issue and now look what you're doing
You're powering so many developers
Machines now which is awesome
So I've always enjoyed
Seeing people's projects
And then it's amazing now
To now we have a podcast
We have an excuse to meet you
And finally you know talk to you and stuff
And whatever and say thanks
So this has been super blast
On my end
And hopefully we will just be pushing
Many, many people your way to
Precompiled ruby is
And get some heavy duty testing out of that
Before August
Which right now is
Hand full months away
But we'll be here probably before you know it
Yeah, awesome
Thanks so much
Yeah, thank you
And we'll catch you guys next week
Peace
