1
00:00:00,120 --> 00:00:02,880
And we are, are not that far along yet.

2
00:00:03,180 --> 00:00:08,250
Um, we are, you know, starting with this significant improvement that we thought

3
00:00:08,250 --> 00:00:11,700
that we could ship and, and we shipped it and it is a significant improvement.

4
00:00:12,120 --> 00:00:16,230
But I think to be able to do everything is definitely going to take more

5
00:00:16,230 --> 00:00:23,040
time and more development work and mostly the way to solve this problem of.

6
00:00:23,550 --> 00:00:25,500
Everyone needing it.

7
00:00:25,710 --> 00:00:29,040
We're, we're making sure that everyone doesn't need it, right?

8
00:00:29,250 --> 00:00:32,790
The, the initial version just happens to install

9
00:00:32,790 --> 00:00:35,850
Ruby in one second instead of 10 to 40 minutes.

10
00:00:36,120 --> 00:00:40,905
And if you have the right version of Ruby and you want that one improvement.

11
00:00:41,655 --> 00:00:42,525
Knock yourself out.

12
00:00:42,675 --> 00:00:43,665
We, we offer that.

13
00:00:43,665 --> 00:00:44,175
It's great.

14
00:00:44,325 --> 00:00:48,285
Some people have said that they are using it and very excited about

15
00:00:48,285 --> 00:00:53,985
it in the last 24 hours, but it means that we can incrementally

16
00:00:54,015 --> 00:00:58,995
improve the other use cases that we have on the roadmap over time.

17
00:00:59,325 --> 00:01:01,800
And I, I don't feel like our goal.

18
00:01:02,535 --> 00:01:08,025
Is necessarily the same as uvs in the sense that we need to convince people

19
00:01:08,025 --> 00:01:13,365
to switch off of six or seven different competing tools towards our tool.

20
00:01:13,485 --> 00:01:20,265
The difference is just that we need to offer a better user experience

21
00:01:20,384 --> 00:01:26,055
than the, you know, two or three Ruby version managers that exist today.

22
00:01:26,115 --> 00:01:28,365
And once we've done that, hopefully people

23
00:01:28,365 --> 00:01:30,405
will feel motivated to use our tool instead.

24
00:01:36,375 --> 00:01:38,235
Welcome to Screaming in the Cloud.

25
00:01:38,235 --> 00:01:42,015
I'm Corey Quinn, and today we are screaming in the past.

26
00:01:42,075 --> 00:01:46,365
Andre Arco, CEO at Spinel Cooperative comes to us

27
00:01:46,365 --> 00:01:49,875
from the past, by which I mean the Ruby community.

28
00:01:49,935 --> 00:01:51,285
Andre, how have you been?

29
00:01:52,433 --> 00:01:52,761
Hi Corey.

30
00:01:52,761 --> 00:01:53,417
It's great.

31
00:01:53,417 --> 00:01:53,745
Great

32
00:01:53,745 --> 00:01:54,495
to see you.

33
00:01:54,855 --> 00:01:55,275
Um.

34
00:01:55,605 --> 00:01:57,675
I, I have been in the past apparently.

35
00:01:57,735 --> 00:02:02,025
Um, you know, I, I do spend a lot of time talking to people about how

36
00:02:02,025 --> 00:02:07,755
Ruby is dead now or whatever, and, uh, I, what I always tell them is, uh,

37
00:02:07,815 --> 00:02:11,355
in that case, I hope that you would be happy to sign up for the pager.

38
00:02:11,820 --> 00:02:16,440
That keeps going off because traffic has grown by 20% a year for the last 10

39
00:02:16,440 --> 00:02:20,250
years at Ruby Gems and I keep getting woken up in the middle of the night,

40
00:02:20,250 --> 00:02:23,519
so I'd be happy to hand that off to anyone who's convinced Ruby is dead.

41
00:02:24,420 --> 00:02:26,940
This episode is sponsored in part by my day Job

42
00:02:27,180 --> 00:02:27,899
Duck Bill.

43
00:02:28,120 --> 00:02:30,700
Do you have a horrifying AWS bill?

44
00:02:30,970 --> 00:02:32,859
That can mean a lot of things.

45
00:02:33,100 --> 00:02:38,170
Predicting what it's going to be, determining what it should be, negotiating

46
00:02:38,170 --> 00:02:43,600
your next long-term contract with AWS, or just figuring out why it increasingly

47
00:02:43,600 --> 00:02:48,130
resembles a phone number, but nobody seems to quite know why that is.

48
00:02:48,430 --> 00:02:49,480
To learn more visit.

49
00:02:49,720 --> 00:02:52,000
Bill hq.com.

50
00:02:52,300 --> 00:02:55,150
Remember, you can't duck the duck bill.

51
00:02:55,210 --> 00:02:59,980
Bill, which my CEO reliably informs me is absolutely not our slogan.

52
00:03:01,275 --> 00:03:03,555
I, I like that it's one of those boring things that,

53
00:03:03,555 --> 00:03:06,015
you know, runs half the internet as we know it.

54
00:03:06,045 --> 00:03:10,125
In fact, I, I, it's, our timing on this is very apt because I'm on

55
00:03:10,125 --> 00:03:12,735
the bus frantically heading home this morning from an appointment to

56
00:03:12,735 --> 00:03:15,795
be on time for this, and I'm checking, you know, slack because blue

57
00:03:15,795 --> 00:03:19,245
sky was boring and one of my colleagues pointed out that Ruby is.

58
00:03:19,490 --> 00:03:23,150
Picking up a new trick from the Python world and link to your post on rv.

59
00:03:23,240 --> 00:03:27,140
And my response to that was, well, I shit you not, I'm talking to him in 15

60
00:03:27,140 --> 00:03:30,170
minutes on the podcast, like, I'm sitting here pulling leaves off a flower.

61
00:03:30,170 --> 00:03:30,800
He shits me.

62
00:03:30,800 --> 00:03:31,400
He shits me.

63
00:03:31,400 --> 00:03:34,160
Not exactly, but no, I shit you not.

64
00:03:34,490 --> 00:03:36,650
So our timing is superb.

65
00:03:36,650 --> 00:03:41,210
Now that you have some stuff coming out of the skunkworks, tell me about rv.

66
00:03:41,240 --> 00:03:41,660
What is it?

67
00:03:42,265 --> 00:03:42,984
Absolutely.

68
00:03:43,015 --> 00:03:48,234
So the, the biggest, uh, inspiration for RV is, uh,

69
00:03:48,265 --> 00:03:50,484
the, in the PI coming from the Python community.

70
00:03:50,875 --> 00:03:54,505
They, you know, historically the Python community has had a

71
00:03:54,505 --> 00:03:57,625
lot of options if you wanted to manage dependencies, right?

72
00:03:57,625 --> 00:04:00,805
Like, uh, the Ruby community historically had Ruby

73
00:04:00,805 --> 00:04:04,045
Gems and the other options kind of fell by the wayside.

74
00:04:04,240 --> 00:04:08,080
And then had Bundler and the other options never really got off the ground.

75
00:04:08,170 --> 00:04:10,330
And so in the Ruby community, if you want to

76
00:04:10,330 --> 00:04:12,430
manage dependencies, you just use Bundler.

77
00:04:12,550 --> 00:04:15,850
And 99.9% of everyone is on the same page as you.

78
00:04:16,090 --> 00:04:17,500
But in the Python community, you had to

79
00:04:17,500 --> 00:04:19,840
say, oh, are you using PIP or Pippen for.

80
00:04:20,294 --> 00:04:23,325
Poetry or six other tools that I don't

81
00:04:23,325 --> 00:04:25,005
remember the names of off the top of my head.

82
00:04:25,065 --> 00:04:27,015
And if you disagree with this, you're not listening to the

83
00:04:27,015 --> 00:04:30,015
podcast because you're too busy solving dependency problems.

84
00:04:30,854 --> 00:04:32,085
Right, exactly.

85
00:04:32,145 --> 00:04:35,695
And so UV is super interesting to me because as.

86
00:04:36,315 --> 00:04:39,315
A, you know, a, uh, package management enthusiast.

87
00:04:39,675 --> 00:04:43,845
Uh, I, I watched the Python community sort of like shift in real

88
00:04:43,845 --> 00:04:48,315
time over the last year from, we use 17 different tools and no one

89
00:04:48,315 --> 00:04:51,975
can agree about which the best one is to, well, actually everyone

90
00:04:51,975 --> 00:04:55,575
pretty much agrees that UV is the best tool and maybe you don't use.

91
00:04:56,885 --> 00:05:00,245
I do wanna push back on that a smidgen, because I still remember

92
00:05:00,245 --> 00:05:04,895
and have the scars to prove it from the RVM versus RBN War wars.

93
00:05:04,895 --> 00:05:09,424
Where, okay, how are we gonna handle all the languages on our developer laptops?

94
00:05:09,455 --> 00:05:11,284
I'm just gonna overwrite the system.

95
00:05:11,284 --> 00:05:12,965
Ruby seems like a bad plan.

96
00:05:13,534 --> 00:05:14,195
Oh, man.

97
00:05:14,344 --> 00:05:20,945
Um, I, I do have to say as, as the maintainer of Bundler during that era.

98
00:05:21,300 --> 00:05:24,630
Uh, I, I actually hate all of the environment dependency

99
00:05:24,630 --> 00:05:27,960
version management tools because they would all get in fights

100
00:05:27,960 --> 00:05:32,340
with Bundler, and Bundler would lose in the sense that they

101
00:05:32,340 --> 00:05:35,250
would break Bundler and then we would get tickets about it.

102
00:05:35,340 --> 00:05:40,890
And so I personally, I ended up for the last decade just using, uh, C

103
00:05:41,010 --> 00:05:45,540
Ruby, which sets some shell variables and does nothing else whatsoever.

104
00:05:46,080 --> 00:05:48,000
Stupid shell tricks every time.

105
00:05:48,435 --> 00:05:49,155
Exactly.

106
00:05:49,245 --> 00:05:55,245
So, uh, so over in the Python world, UV has over the last year become

107
00:05:55,335 --> 00:06:00,255
this kind of like, uh, al almost consistent standard for people to

108
00:06:00,255 --> 00:06:03,224
use if they need to manage their Python projects or their Python

109
00:06:03,224 --> 00:06:06,974
tools, which is incredibly impressive to me because I feel like

110
00:06:06,974 --> 00:06:10,755
Python was starting much farther behind than Ruby, where they didn't

111
00:06:10,755 --> 00:06:14,115
even have a tool that everyone had rallied behind for, you know.

112
00:06:14,460 --> 00:06:18,210
10 years and, and using UV myself.

113
00:06:19,170 --> 00:06:20,700
I was blown away.

114
00:06:21,030 --> 00:06:21,659
It's amazing.

115
00:06:21,659 --> 00:06:24,719
It, I dunno how it does with magic that it does, but it is super fast.

116
00:06:24,719 --> 00:06:27,240
It doesn't stomp other things you have going on.

117
00:06:27,450 --> 00:06:30,750
You type uv, vn, press enter, and by the time you remove

118
00:06:30,750 --> 00:06:33,599
your finger back from the enter key, it has the virtual

119
00:06:33,599 --> 00:06:37,440
environment ready to go of whatever version you have specified.

120
00:06:37,680 --> 00:06:41,159
Uh, uv, uh, PIP install, you know, list of dependencies.

121
00:06:41,310 --> 00:06:43,380
It does massive parallelization.

122
00:06:43,409 --> 00:06:45,330
I'm pretty sure that they have.

123
00:06:45,410 --> 00:06:48,710
I don't know, tortured a witch into making it as fast

124
00:06:48,710 --> 00:06:51,200
as it is somehow, because it's the only thing that I can

125
00:06:51,200 --> 00:06:54,110
find that would explain it and it is, it is life changing.

126
00:06:54,260 --> 00:06:55,490
You've, and they're like, oh, well I wanna

127
00:06:55,490 --> 00:06:57,710
install something globally that runs everywhere.

128
00:06:57,710 --> 00:06:57,920
Yeah.

129
00:06:57,920 --> 00:07:01,820
UV tool install and then you give it whatever you want to.

130
00:07:01,820 --> 00:07:03,950
It's how I use my A CLI these days.

131
00:07:04,160 --> 00:07:05,210
It's phenomenal.

132
00:07:05,210 --> 00:07:06,440
Across the board.

133
00:07:06,740 --> 00:07:09,950
Everything about UV has made my life better except for

134
00:07:09,950 --> 00:07:11,455
the part where I still have to work with computers.

135
00:07:12,435 --> 00:07:13,335
Right, right.

136
00:07:13,545 --> 00:07:14,265
Absolutely.

137
00:07:14,355 --> 00:07:20,325
Uh, and, and so as a, as a Ruby developer, I would use some Python

138
00:07:20,325 --> 00:07:23,505
tools and say, wow, UV has made my life better in every way.

139
00:07:23,505 --> 00:07:26,350
And then I would turn around and open my Ruby Project and say, oh, no.

140
00:07:27,300 --> 00:07:31,050
Uh, it's not making my life any better now.

141
00:07:31,260 --> 00:07:33,420
Yeah, it feels like docker containers were the only way to handle

142
00:07:33,420 --> 00:07:36,450
Ruby projects because everything was so specific as far as how

143
00:07:36,450 --> 00:07:39,420
it worked, that even with some of the, of the package management

144
00:07:39,420 --> 00:07:42,480
stuff that was out there, it still felt like I was always teetering

145
00:07:42,480 --> 00:07:45,360
on the brink of disastrously screwing up my Ruby environment.

146
00:07:45,930 --> 00:07:46,860
Yes, yes.

147
00:07:46,860 --> 00:07:51,300
And that, that was definitely a significant amount of the motivation.

148
00:07:51,360 --> 00:07:56,820
I have been kind of like kicking around in the back of my mind, a better

149
00:07:56,820 --> 00:08:02,310
version dependency management tool for, for like probably 10 years now.

150
00:08:02,310 --> 00:08:07,980
I've been like, oh man, I really wish that I didn't have to, you know, install.

151
00:08:09,734 --> 00:08:13,544
RBN and then install Ruby Build and then install a Ruby and

152
00:08:13,544 --> 00:08:16,395
then switch to that Ruby and then install Ruby Gems and then

153
00:08:16,395 --> 00:08:20,385
install Bundler and then install my gems and then have a project

154
00:08:20,565 --> 00:08:22,034
and it doesn't clean up after itself.

155
00:08:22,034 --> 00:08:23,715
Like on, on my desktop right here.

156
00:08:23,715 --> 00:08:26,505
If I. Fire up a terminal on the right hand prompt.

157
00:08:26,594 --> 00:08:30,195
Uh, I believe that's what PS two, whatever it's is, uh, the, yeah,

158
00:08:30,284 --> 00:08:33,949
where it winds up, uh, listing out that I'm using Ruby version 3.0 0.0.

159
00:08:34,694 --> 00:08:35,385
Why?

160
00:08:35,385 --> 00:08:36,735
What does it need Ruby for?

161
00:08:36,735 --> 00:08:37,694
I don't know.

162
00:08:37,694 --> 00:08:40,155
Does my laptop, which has the same config say that?

163
00:08:40,155 --> 00:08:41,924
No, it shuts up about Ruby.

164
00:08:41,924 --> 00:08:44,265
Like I wish some people would, but never seem to,

165
00:08:44,505 --> 00:08:46,725
uh, we know who I'm speaking of when I say that.

166
00:08:46,935 --> 00:08:47,500
Uh, not you.

167
00:08:47,830 --> 00:08:52,000
To be clear, uh, there are, uh, it, but in this case, I don't know

168
00:08:52,000 --> 00:08:54,910
what I did one day when I was trying to get something to work.

169
00:08:54,910 --> 00:08:56,380
And honestly, I'm scared to touch it

170
00:08:56,380 --> 00:08:58,240
because that's where breakage has come from.

171
00:08:58,510 --> 00:09:00,370
It's just, it's one of the great mysteries.

172
00:09:01,094 --> 00:09:02,925
Definitely one of the great mysteries,

173
00:09:03,045 --> 00:09:04,364
whereas Python is decent.

174
00:09:04,364 --> 00:09:05,145
Python cleans

175
00:09:05,145 --> 00:09:06,435
up after its mess.

176
00:09:08,084 --> 00:09:08,744
Definitely.

177
00:09:08,760 --> 00:09:12,074
I, I definitely feel like UV is contributing to this, so,

178
00:09:12,224 --> 00:09:15,165
well, I, I still remember back in the CentOS five days

179
00:09:15,165 --> 00:09:18,135
when I was up in support people on IRC and whatnot.

180
00:09:18,165 --> 00:09:18,974
'cause I was a, uh.

181
00:09:19,070 --> 00:09:22,070
My minor part of the project and people would say, okay, great.

182
00:09:22,070 --> 00:09:27,080
So I've installed, I, I've upgraded my system, Python, now what do I do?

183
00:09:27,350 --> 00:09:28,850
And it's like, well, that broke yum.

184
00:09:28,850 --> 00:09:31,640
So now you get to reinstall your operating system.

185
00:09:31,820 --> 00:09:32,090
Yeah.

186
00:09:32,120 --> 00:09:34,280
Back your shit up and try again.

187
00:09:34,490 --> 00:09:37,910
Which as it turns out, was not the most supportive

188
00:09:37,910 --> 00:09:40,610
thing we could have said, but it was honest.

189
00:09:40,610 --> 00:09:42,560
It's, oh, great, you've broke it and now

190
00:09:42,560 --> 00:09:44,660
you get to keep the pieces good for you.

191
00:09:45,105 --> 00:09:48,435
Absolutely in seriousness, I wanted to call out where Ruby's been.

192
00:09:48,435 --> 00:09:48,705
Great.

193
00:09:48,975 --> 00:09:53,565
Uh, it has always been spectacular at, I have an idea and I wanna build it.

194
00:09:53,565 --> 00:09:56,955
I'm going to reach for something that gets me, uh,

195
00:09:56,985 --> 00:09:59,655
from start to finish, largely with batteries included.

196
00:09:59,715 --> 00:10:01,185
And Ruby has been the.

197
00:10:01,295 --> 00:10:01,805
Thing.

198
00:10:02,074 --> 00:10:04,415
Uh, my last real job was a ruby shop.

199
00:10:04,415 --> 00:10:06,905
I remember that we spent the year there trying to figure out

200
00:10:06,905 --> 00:10:11,974
how to upgrade from, I wanna say 1.8 0.3 into something modern,

201
00:10:12,125 --> 00:10:15,334
uh, at the time, which was still a few versions beyond that.

202
00:10:15,814 --> 00:10:19,834
And as it turns out, the way that we did that was we got the company acquired

203
00:10:19,834 --> 00:10:23,495
by BlackRock, who then took the product and smothered it to death in its crib.

204
00:10:23,525 --> 00:10:25,415
And, you know, time marches on.

205
00:10:25,685 --> 00:10:27,844
I have not been there for almost a decade, and I

206
00:10:27,905 --> 00:10:29,915
don't imagine it ever got fixed in that context.

207
00:10:29,960 --> 00:10:30,590
Ruby.

208
00:10:30,620 --> 00:10:32,990
Ruby upgrade satisfactorily resolved.

209
00:10:33,050 --> 00:10:34,430
You know, great work.

210
00:10:34,880 --> 00:10:38,720
This was such a monolith, the time, and again, it's easy to blame

211
00:10:38,720 --> 00:10:42,350
the language for it, but you can commit atrocities in any language.

212
00:10:42,350 --> 00:10:46,160
As it turns out, I, I used to be deep in the puppet world and

213
00:10:46,220 --> 00:10:48,320
had enough problems with the way they did config management.

214
00:10:48,560 --> 00:10:49,100
That alright?

215
00:10:49,100 --> 00:10:51,710
I was one of the early developers behind SaltStack and, good.

216
00:10:51,710 --> 00:10:52,520
This'll fix it.

217
00:10:52,520 --> 00:10:56,360
And nope, you can give someone the latest generation shiny lap.

218
00:10:56,495 --> 00:10:58,805
Top and they wonder about the bad hammer

219
00:10:58,805 --> 00:11:00,620
you just sold them when they hold it wrong.

220
00:11:01,605 --> 00:11:04,275
Oh man, that, that really brings back memories.

221
00:11:04,305 --> 00:11:09,195
Uh, I, I was friends with the, uh, the puppet crew back in the day of whatever

222
00:11:09,195 --> 00:11:14,475
that was, the mid to late two thousands as we were all doing fancy ruby things.

223
00:11:14,535 --> 00:11:18,375
And I, I mean, I gotta say it was a big step up from, we have

224
00:11:18,375 --> 00:11:21,585
a shell script that we run anytime we stand up a new server.

225
00:11:22,305 --> 00:11:25,515
Chef kind of went too far in the ruby direction from my perspective

226
00:11:25,515 --> 00:11:29,025
at the time because the, I remember that was the one, uh, config

227
00:11:29,025 --> 00:11:31,995
management tool I never really got into because it really didn't

228
00:11:31,995 --> 00:11:34,875
have its own DSL so much as it had just write your config.

229
00:11:34,875 --> 00:11:38,025
And Ruby, the problem is, is back in that era, you're

230
00:11:38,025 --> 00:11:40,035
talking to a bunch of CIS admins and you're telling

231
00:11:40,035 --> 00:11:43,275
them, oh, you should just become a software engineer and.

232
00:11:43,560 --> 00:11:46,320
For the few that were willing and able to do that they, they

233
00:11:46,320 --> 00:11:49,560
discovered, especially in large companies, very quickly, it's, huh,

234
00:11:49,770 --> 00:11:54,660
I could go work somewhere else for a 60% raise and not be on call.

235
00:11:54,990 --> 00:11:56,850
I think I'm gonna go do that instead.

236
00:11:57,000 --> 00:11:59,550
So there was an upskilling that was required,

237
00:11:59,550 --> 00:12:01,410
that was a hard leap for most of us to make.

238
00:12:01,410 --> 00:12:02,880
I certainly couldn't make the leap at the time.

239
00:12:03,615 --> 00:12:04,905
That's fascinating.

240
00:12:04,935 --> 00:12:08,084
I guess I never really thought about the impact that Chef

241
00:12:08,084 --> 00:12:11,354
had coming from the other direction since I was already

242
00:12:11,505 --> 00:12:13,995
a software engineer by the time that I encountered Chef.

243
00:12:14,385 --> 00:12:18,689
And so for me, the enormous frustration was that Chef made you build.

244
00:12:19,935 --> 00:12:26,565
Uh, very strange ruby building blocks that you then had to plug into

245
00:12:26,565 --> 00:12:30,645
your chef scripts rather than being able to just write some ruby.

246
00:12:31,005 --> 00:12:36,015
And so from the, from the opposite side, there is.

247
00:12:36,555 --> 00:12:41,055
A, a very difficult, you know, kind of like hard to figure

248
00:12:41,055 --> 00:12:44,385
out, like, wait, what is the API that this has to conform to?

249
00:12:44,385 --> 00:12:50,025
Why does this have to, uh, you know, fit into exactly this weird

250
00:12:50,235 --> 00:12:54,135
plugin structure that you've decided all chef things have to fit into?

251
00:12:54,345 --> 00:12:59,025
And it was not well documented to the point where the

252
00:12:59,025 --> 00:13:02,415
easiest way to learn how to write chef modules was to buy

253
00:13:02,415 --> 00:13:05,265
the O'Reilly book and not to read the chef documentation.

254
00:13:06,074 --> 00:13:08,895
Or in some cases even to read the code, which gets you

255
00:13:08,895 --> 00:13:11,295
back to, and now you're a software engineer puppet.

256
00:13:11,295 --> 00:13:12,525
It always seemed it was tar.

257
00:13:12,704 --> 00:13:14,834
They went with the DSL for Puppet, which is its own problem.

258
00:13:14,834 --> 00:13:16,605
You have to write a specific language for a tool.

259
00:13:16,605 --> 00:13:20,444
It already feels like you're going down the wrong path, but it was, it felt

260
00:13:20,444 --> 00:13:23,444
like it was much more squarely aimed at the systems administrator type,

261
00:13:23,775 --> 00:13:28,275
where a lot of what it was doing felt a lot more shell script friendly esque.

262
00:13:29,145 --> 00:13:32,625
You, you could obviously break out into Ruby with it, but most people didn't.

263
00:13:32,625 --> 00:13:35,415
And it was considered an anti-pattern for good reason.

264
00:13:35,745 --> 00:13:38,445
The the biggest problem in many cases with the config management

265
00:13:38,445 --> 00:13:41,355
stuff that I learned, and this is a truism programming everywhere.

266
00:13:41,865 --> 00:13:44,805
You can be really clever with these things.

267
00:13:44,805 --> 00:13:48,375
The problem is, is that someone maybe you in six months has

268
00:13:48,375 --> 00:13:51,465
to untangle the rat's nest of being clever to figure out what

269
00:13:51,465 --> 00:13:54,135
the hell it's doing and why it even worked in the first place.

270
00:13:54,405 --> 00:13:57,195
So simple is a lot more scalable.

271
00:13:57,915 --> 00:13:58,335
Yep.

272
00:13:58,455 --> 00:13:59,325
Absolutely.

273
00:13:59,715 --> 00:14:00,525
Absolutely.

274
00:14:00,645 --> 00:14:06,314
That is definitely one of the, uh, more intangible

275
00:14:06,314 --> 00:14:09,915
essences that we are attempting to capture with RV here

276
00:14:09,915 --> 00:14:14,265
is what if you could do stuff and it was just simple to.

277
00:14:15,255 --> 00:14:17,595
Clearly state the thing that you wanted

278
00:14:17,595 --> 00:14:20,355
to happen and then it would happen, right?

279
00:14:20,595 --> 00:14:25,005
Instead of this pile of six things that are all dependent

280
00:14:25,005 --> 00:14:26,955
on each other that you have to set up correctly.

281
00:14:26,955 --> 00:14:29,955
And if you knock one of them out, your software no longer runs.

282
00:14:30,375 --> 00:14:32,265
It's just one tool.

283
00:14:32,505 --> 00:14:36,225
That's just one executable binary with no dependencies.

284
00:14:36,375 --> 00:14:39,375
And then you can just say, I would like to run

285
00:14:39,375 --> 00:14:42,465
this Ruby, and we make sure that that ruby.

286
00:14:43,170 --> 00:14:46,560
Exists and is configured and is available, and

287
00:14:46,710 --> 00:14:49,020
then we run it with the thing that you want.

288
00:14:49,860 --> 00:14:51,150
Hopefully to run.

289
00:14:51,510 --> 00:14:56,760
Um, and so our, our, uh, you know, again, inspired by uv, the

290
00:14:56,760 --> 00:15:01,770
ultimate goal is to fully kind of like encompass the entire range

291
00:15:01,770 --> 00:15:05,220
of anything that you might want to do while you're running Ruby

292
00:15:05,220 --> 00:15:09,210
Code, whether that's the Ruby interpreter itself, or a command

293
00:15:09,210 --> 00:15:12,240
line tool that happens to be written and packaged as a ruby gem.

294
00:15:12,545 --> 00:15:16,745
Or it's, you know, like your fancy web application and you want to be able to

295
00:15:16,745 --> 00:15:21,245
run it with all of its dependencies included in a ruby that actually works.

296
00:15:21,515 --> 00:15:25,204
Uh, but you just wanna run one command and have it all actually happen for you.

297
00:15:25,324 --> 00:15:28,505
So that's, that's kind of like the, the UV

298
00:15:28,505 --> 00:15:30,964
inspired vision that we're aiming for with rv.

299
00:15:31,564 --> 00:15:37,954
Uh, and then today, kind of like as our, our first effort demonstration of what.

300
00:15:38,310 --> 00:15:40,140
Towards what we think is possible.

301
00:15:40,560 --> 00:15:47,610
Uh, we've shipped just the initial ruby version management part of the tool.

302
00:15:48,000 --> 00:15:54,810
Uh, but the cool thing about this part of the tool is that installing Ruby

303
00:15:54,840 --> 00:15:59,790
with all of that entire, like, you know, pile of Ruby version managers,

304
00:16:00,000 --> 00:16:06,840
R-V-M-R-B-N-C, Ruby, Ruby build, Ruby, install, uh, all those things, they all.

305
00:16:07,589 --> 00:16:12,449
Expect you to download a source tar ball for whatever Ruby version

306
00:16:12,449 --> 00:16:16,229
you want, and then start to compile it yourself on your machine.

307
00:16:16,680 --> 00:16:20,280
And so installing Ruby, you know, depending on exactly

308
00:16:20,280 --> 00:16:23,310
how new and fast and fancy your Mac is, is somewhere

309
00:16:23,310 --> 00:16:26,459
between a five minute process and a 20 minute process.

310
00:16:26,640 --> 00:16:28,920
And honestly, if you're on the tiniest digital

311
00:16:28,920 --> 00:16:31,530
ocean droplet, a 40 minute process because,

312
00:16:31,620 --> 00:16:34,740
or raspberry pie, which we're still waiting for that to finish,

313
00:16:34,740 --> 00:16:37,140
I'll let you know and send a postcard if we ever get there.

314
00:16:37,470 --> 00:16:38,400
Sounds amazing.

315
00:16:38,490 --> 00:16:42,150
Um, so the, the nice thing that we wanted

316
00:16:42,150 --> 00:16:44,760
to build as kind of like our first proof of.

317
00:16:45,224 --> 00:16:49,094
The direction we want to go is RV installs pre-compiled rubies.

318
00:16:49,395 --> 00:16:52,724
We have a setup in GitHub actions that makes sure that there's

319
00:16:52,724 --> 00:16:56,295
a ruby that works for the platforms that we support, which so

320
00:16:56,295 --> 00:17:00,795
far is recent Mac os within the last couple of Y two or three

321
00:17:00,795 --> 00:17:04,305
years and recent Ubuntu within the last two or three years.

322
00:17:04,335 --> 00:17:07,875
But if you install a Ruby version that we support.

323
00:17:08,385 --> 00:17:13,635
It's installed in one second, like there's, turns out prefilled

324
00:17:13,635 --> 00:17:17,295
binaries install a lot faster than, you know, source tar balls

325
00:17:17,295 --> 00:17:20,355
that have to run, configure, and then make and then make install.

326
00:17:20,535 --> 00:17:20,625
Yeah.

327
00:17:20,625 --> 00:17:20,954
My

328
00:17:20,954 --> 00:17:23,745
philosophy on this, and this is controversial, I know this, but I,

329
00:17:23,745 --> 00:17:26,535
I've always found that with least when you're targeting Mac as a

330
00:17:26,565 --> 00:17:30,440
development environment, it's a lot easier from the perspective of I.

331
00:17:31,155 --> 00:17:35,715
At some point if you are no longer getting security updates for your

332
00:17:35,715 --> 00:17:39,375
operating system, which Apple moves off of pretty quickly, as time

333
00:17:39,375 --> 00:17:43,695
advances, I find I don't have to worry about your version of the

334
00:17:43,695 --> 00:17:47,235
operating system anymore, like when it goes end of support by the vendor.

335
00:17:47,495 --> 00:17:50,284
I'm not gonna sit here with bailing wire and popsicle

336
00:17:50,284 --> 00:17:52,354
sticks trying to keep the thing on life support.

337
00:17:52,385 --> 00:17:53,945
I, I find that I can move on.

338
00:17:54,185 --> 00:17:54,784
Counterpoint.

339
00:17:54,784 --> 00:17:58,385
I don't build anything that has a widespread install base.

340
00:17:58,594 --> 00:18:00,574
So do you agree, disagree?

341
00:18:00,604 --> 00:18:02,014
Like how, how do you think about that?

342
00:18:02,715 --> 00:18:06,165
Coming from the, the position of being on the Bundler

343
00:18:06,165 --> 00:18:10,545
team for the last 15 years, it has been an ongoing

344
00:18:10,545 --> 00:18:13,845
struggle to know exactly how far back we should support.

345
00:18:14,535 --> 00:18:20,145
Primarily because Apple ships a ruby so far beyond end of life.

346
00:18:20,200 --> 00:18:21,790
That, uh, I don't know.

347
00:18:21,790 --> 00:18:24,070
Like it should do a licensing concern.

348
00:18:24,100 --> 00:18:24,520
Yeah.

349
00:18:24,580 --> 00:18:25,120
Yeah.

350
00:18:25,120 --> 00:18:27,280
And on some level, like I, that's the beautiful

351
00:18:27,280 --> 00:18:29,080
thing about not having a large install base.

352
00:18:29,080 --> 00:18:32,590
I can take a professional support policy, eh, fuck them kids,

353
00:18:32,830 --> 00:18:36,130
but that's not something you can do at scale most of the time.

354
00:18:36,790 --> 00:18:37,420
Yeah.

355
00:18:37,450 --> 00:18:41,770
So, so we're attempting to, you know, resolve this tension

356
00:18:42,160 --> 00:18:46,720
kind of initially, at least by stating that our goal is to

357
00:18:46,720 --> 00:18:49,960
support any Ruby that hasn't been end of life to already.

358
00:18:50,415 --> 00:18:59,025
And hope, hopefully our users plan to stay, you know, live and upgraded if the

359
00:18:59,025 --> 00:19:03,734
upgrade, you know, if the install process is one second rather than 10 minutes,

360
00:19:03,734 --> 00:19:07,755
maybe that's an additional incentive to occasionally apply Ruby upgrades.

361
00:19:08,054 --> 00:19:13,125
But yeah, the, the Ruby Core team has sort of semi-recently settled on kind

362
00:19:13,125 --> 00:19:18,764
of like a yearly cadence and a two or three yearly end of Lifeing policy.

363
00:19:19,275 --> 00:19:22,125
And I honestly, I think that's pretty reasonable.

364
00:19:22,125 --> 00:19:26,444
Like there will be a version of RV that was built to

365
00:19:26,444 --> 00:19:30,824
support, you know, the rubies that were viable this year.

366
00:19:30,884 --> 00:19:34,014
And if you want to use the new rv, maybe you should also use the new Ruby.

367
00:19:35,054 --> 00:19:40,364
Yeah, on some level, I, I have to think, and please, I, I fully accept

368
00:19:40,364 --> 00:19:43,694
that I could be way off base, I'm the problem, et cetera, et cetera

369
00:19:43,725 --> 00:19:48,014
when it comes to this, but it feels like if you're going to be doing any

370
00:19:48,014 --> 00:19:52,574
kind of Ruby development or working with Ruby on a Mac, which let's face

371
00:19:52,574 --> 00:19:55,304
it, is where an awful lot of development lives these days, I feel you

372
00:19:55,304 --> 00:19:59,534
can safely assume that you will not be using the system Ruby to do it.

373
00:19:59,685 --> 00:20:01,094
Is that a fair assumption?

374
00:20:01,605 --> 00:20:04,214
That, that is a fair assumption because the system,

375
00:20:04,214 --> 00:20:07,605
Ruby doesn't actually work with anything anymore.

376
00:20:07,725 --> 00:20:11,145
Um, the system Ruby today that ships in the very

377
00:20:11,145 --> 00:20:14,415
newest Mac Os was end of life more than five years ago.

378
00:20:15,315 --> 00:20:17,085
It almost feels like they'd be doing a better service

379
00:20:17,085 --> 00:20:18,014
to not include it at all.

380
00:20:18,509 --> 00:20:22,649
They, apple has been threatening to remove system Ruby for more than

381
00:20:22,649 --> 00:20:27,750
five years, and my theory on why they keep not removing it with each

382
00:20:27,810 --> 00:20:32,429
subsequent release is that it would break their own tools built against it.

383
00:20:32,489 --> 00:20:37,169
That they haven't had time to rewrite from scratch to no longer be Ruby Scripts.

384
00:20:37,770 --> 00:20:41,759
But there are scripts down in the bowels of Mac os that, uh, that are

385
00:20:41,759 --> 00:20:44,909
absolutely Ruby scripts, and so they just keep shipping this ancient.

386
00:20:45,210 --> 00:20:48,330
Ruby that they can never upgrade just to keep the os from breaking.

387
00:20:49,350 --> 00:20:50,489
That sounds, that sounds painful,

388
00:20:50,850 --> 00:20:56,969
but, uh, the, the upside there of system, Ruby finally being so old

389
00:20:56,969 --> 00:21:02,340
that it's extremely obvious you should not be using it, is that we

390
00:21:02,580 --> 00:21:07,409
basically expect you to need, you know, some kind of of installed

391
00:21:07,409 --> 00:21:13,139
Ruby, which we plan to provide in a very fast and easy to use package.

392
00:21:13,964 --> 00:21:17,504
This episode is sponsored by my own company, duck Bill.

393
00:21:17,774 --> 00:21:20,685
Having trouble with your AWS bill, perhaps

394
00:21:20,685 --> 00:21:23,444
it's time to renegotiate a contract with them.

395
00:21:23,745 --> 00:21:25,904
Maybe you're just wondering how to predict

396
00:21:25,904 --> 00:21:29,145
what's going on in the wide world of AWS.

397
00:21:29,205 --> 00:21:31,844
Well, that's where Duck Bill comes in to help.

398
00:21:32,054 --> 00:21:34,784
Remember, you can't duck the duck bill.

399
00:21:34,784 --> 00:21:37,455
Bill, which I am reliably informed by my

400
00:21:37,455 --> 00:21:40,995
business partner is absolutely not our motto.

401
00:21:41,304 --> 00:21:44,514
To learn more, visit doc bill hq.com.

402
00:21:45,645 --> 00:21:50,264
So a, a question I have because as you said, the Python community has coalesced

403
00:21:50,264 --> 00:21:54,045
around uv, which I think in many cases is part of the reason I'm starting

404
00:21:54,045 --> 00:21:58,094
to see it everywhere, is that it's amazing and people are embracing it.

405
00:21:58,275 --> 00:21:59,205
I understand it.

406
00:21:59,205 --> 00:22:02,835
It might not be fair to ask you about this less than 24 hours after

407
00:22:02,835 --> 00:22:07,485
the thing comes out, but how are you envisioning this uptake looking?

408
00:22:07,485 --> 00:22:09,735
It, it feels like it might be one of those problems where, and

409
00:22:09,735 --> 00:22:12,764
now all we need to do is have everyone embrace it simultaneously.

410
00:22:13,025 --> 00:22:15,545
It, it feels like that's, that's not realistic.

411
00:22:16,169 --> 00:22:18,480
That, that is definitely not realistic.

412
00:22:18,600 --> 00:22:23,370
Uh, and and I, I, I have to admit, like we, we don't

413
00:22:23,370 --> 00:22:26,909
have VC funding like Astral the company behind uv.

414
00:22:27,210 --> 00:22:32,339
And so we are taking a slower and more methodical approach.

415
00:22:32,669 --> 00:22:37,290
We aren't shipping a thing that does everything kind of out of the gate, right?

416
00:22:37,350 --> 00:22:42,689
Like uv, by the time it had reached 0.3, basically did everything.

417
00:22:43,090 --> 00:22:45,880
And we are, are not that far along yet.

418
00:22:46,179 --> 00:22:51,250
Um, we are, you know, starting with this significant improvement that we thought

419
00:22:51,250 --> 00:22:54,699
that we could ship and, and we shipped it and it is a significant improvement.

420
00:22:55,120 --> 00:22:59,230
But I think to be able to do everything is definitely going to take more

421
00:22:59,230 --> 00:23:06,009
time and more development work and mostly the way to solve this problem of.

422
00:23:06,540 --> 00:23:08,489
Everyone needing it.

423
00:23:08,699 --> 00:23:12,029
We're, we're making sure that everyone doesn't need it, right?

424
00:23:12,270 --> 00:23:15,779
The, the initial version just happens to install

425
00:23:15,779 --> 00:23:18,870
Ruby in one second instead of 10 to 40 minutes.

426
00:23:19,080 --> 00:23:23,935
And if you have the right version of Ruby and you want that one improvement.

427
00:23:24,645 --> 00:23:25,514
Knock yourself out.

428
00:23:25,694 --> 00:23:26,654
We, we offer that.

429
00:23:26,654 --> 00:23:27,165
It's great.

430
00:23:27,314 --> 00:23:31,304
Some people have said that they are using it and very excited about

431
00:23:31,304 --> 00:23:37,004
it in the last 24 hours, but it means that we can incrementally

432
00:23:37,034 --> 00:23:41,984
improve the other use cases that we have on the roadmap over time.

433
00:23:42,344 --> 00:23:44,790
And I, I don't feel like our goal.

434
00:23:45,554 --> 00:23:51,044
Is necessarily the same as uvs in the sense that we need to convince people

435
00:23:51,044 --> 00:23:56,384
to switch off of six or seven different competing tools towards our tool.

436
00:23:56,475 --> 00:24:03,254
The difference is just that we need to offer a better user experience

437
00:24:03,375 --> 00:24:09,074
than the, you know, two or three Ruby version managers that exist today.

438
00:24:09,105 --> 00:24:11,355
And once we've done that, hopefully people

439
00:24:11,355 --> 00:24:13,395
will feel motivated to use our tool instead.

440
00:24:14,250 --> 00:24:16,889
Yeah, I, I do have to ask, uh, ecosystem wide.

441
00:24:17,699 --> 00:24:19,739
It seems like Python is the darling these days.

442
00:24:19,739 --> 00:24:22,049
Part of that I think, comes from the fact that that has

443
00:24:22,139 --> 00:24:25,290
for a long time been the lingua franca of a lot of things.

444
00:24:25,469 --> 00:24:27,719
Uh, data science, machine learning.

445
00:24:28,049 --> 00:24:32,190
And given that with PyTorch and the rest and all of the other AI

446
00:24:32,190 --> 00:24:35,250
things, it seems like that is the defacto thing that people go for.

447
00:24:35,400 --> 00:24:37,290
I always liked it because it's pseudo code.

448
00:24:37,290 --> 00:24:42,000
It feels very easy to read, easy to write badly, and it's the sort of

449
00:24:42,000 --> 00:24:45,779
thing that there's always an import library for something that I need.

450
00:24:46,275 --> 00:24:49,304
I don't hear as much about Ruby in the modern era.

451
00:24:49,784 --> 00:24:50,085
Why?

452
00:24:51,030 --> 00:24:53,040
That's a very, it's a very good question,

453
00:24:53,040 --> 00:24:55,110
and I think that there's a few aspects to it.

454
00:24:55,114 --> 00:24:56,250
It really is a great language.

455
00:24:56,250 --> 00:24:58,949
It is terrific at getting things out the door quickly.

456
00:24:58,949 --> 00:25:03,300
It is very approachable for folks who are not themselves software engineers.

457
00:25:03,600 --> 00:25:06,060
It is, there's certainly, it's been around for about

458
00:25:06,060 --> 00:25:08,670
as long as Python has give or take since the nineties.

459
00:25:09,000 --> 00:25:12,060
It's a, it is something that is you like,

460
00:25:12,060 --> 00:25:14,400
well, what can you possibly build with Ruby?

461
00:25:14,400 --> 00:25:16,775
And the answer is, most websites you have heard of.

462
00:25:17,150 --> 00:25:20,750
That our giant companies now started off with Ruby.

463
00:25:21,199 --> 00:25:21,889
It's true.

464
00:25:21,980 --> 00:25:28,070
Um, and, and in fact, uh, unless, unless it's Twitter, most of those

465
00:25:28,070 --> 00:25:32,300
giant websites that you've heard of still have Ruby at their core today.

466
00:25:32,659 --> 00:25:37,190
The backend API for Figma, still Ruby GitHub's backend,

467
00:25:37,429 --> 00:25:41,090
front end, middle end still, Ruby, whatever, Stripe

468
00:25:41,090 --> 00:25:43,880
Square, Airbnb, like all those companies still have.

469
00:25:44,219 --> 00:25:49,469
A pile of ruby in the middle getting, you know, slowly built

470
00:25:49,469 --> 00:25:52,795
into an even bigger tower with lots of other things around it.

471
00:25:53,625 --> 00:25:55,935
Yeah, I, I never liked the argument, by the way

472
00:25:56,054 --> 00:25:57,855
of, well, yeah, okay, fine.

473
00:25:57,855 --> 00:26:02,205
Ruby's easy to get started with, but it's not gonna scale to hyperscale speeds.

474
00:26:02,205 --> 00:26:05,205
It's, do you have any idea how little of what you've actually

475
00:26:05,205 --> 00:26:09,734
built will do that regardless of who you are and what you're doing.

476
00:26:10,034 --> 00:26:13,094
Because if you look at anything that is hyperscale, it's been rewritten

477
00:26:13,094 --> 00:26:17,205
a bunch of times because what you need to do to launch versus what

478
00:26:17,205 --> 00:26:21,554
you need to do to grow to service, uh, millions of requests a second.

479
00:26:22,194 --> 00:26:26,274
Uh, more millions of users a second are very different things.

480
00:26:26,304 --> 00:26:29,439
It, it's an early optimization until you suddenly have to get there.

481
00:26:30,149 --> 00:26:31,830
I, I do sometimes.

482
00:26:32,040 --> 00:26:35,580
One of, one of my favorite pet peeves, and this isn't even a Ruby specific

483
00:26:35,580 --> 00:26:41,699
thing, is watching companies talk about how they rewrote their system into a new

484
00:26:41,699 --> 00:26:47,520
language or a new stack so that they could support a hundred x more users and.

485
00:26:47,775 --> 00:26:49,964
Every time I've ever looked at one of those, I've been like,

486
00:26:49,964 --> 00:26:52,574
you could have just kept the same language in the same stack

487
00:26:52,574 --> 00:26:55,964
and rewritten it using the like architectural changes that

488
00:26:55,964 --> 00:26:59,955
you're describing to get the two orders of magnitude change.

489
00:27:00,134 --> 00:27:03,735
And nobody ever really seems to like acknowledge that part.

490
00:27:03,735 --> 00:27:05,924
It's always the new language and the new stack that

491
00:27:05,924 --> 00:27:08,444
really made it work for the a hundred x more users.

492
00:27:08,534 --> 00:27:11,955
There is a counterpoint that I will make, and I understand

493
00:27:11,955 --> 00:27:14,895
that this might not make me a popular man, but that's okay.

494
00:27:14,895 --> 00:27:16,755
That ship has sailed a very long time ago.

495
00:27:16,995 --> 00:27:17,355
Uh.

496
00:27:17,600 --> 00:27:22,790
The, there is an argument to picking languages, not just on the basis

497
00:27:22,790 --> 00:27:25,580
of technical capability, because let's face it, you can, with most

498
00:27:25,580 --> 00:27:29,989
programming languages, the read as all of them, if you squeeze it hard

499
00:27:29,989 --> 00:27:33,080
enough, you can make blood come out of them to do the thing that you need.

500
00:27:33,409 --> 00:27:33,440
Uh.

501
00:27:33,795 --> 00:27:37,455
It's very often a recruiting story of what language

502
00:27:37,455 --> 00:27:40,815
do the engineers you hire, know what language do those

503
00:27:40,815 --> 00:27:43,514
engineers you're attempting to recruit, want to work in?

504
00:27:43,725 --> 00:27:47,114
And there is a perception that Ruby's Star has faded

505
00:27:47,114 --> 00:27:49,514
somewhat, and I don't necessarily think that that's fair.

506
00:27:50,145 --> 00:27:50,505
Yeah.

507
00:27:50,505 --> 00:27:54,404
I mean, I, I think that from the perspective of.

508
00:27:54,929 --> 00:28:01,800
People who just want to work with the new hotness that, uh, Ruby is no longer

509
00:28:01,800 --> 00:28:06,989
the like, you know, star new hotness child, which I, I think it was for a while.

510
00:28:07,469 --> 00:28:08,940
Um, I guess I have.

511
00:28:09,674 --> 00:28:16,875
A, a small advantage personally in that I got into Ruby before Rails or any

512
00:28:16,875 --> 00:28:22,274
of the reasons to get into Ruby as a new hotness, commercial success existed

513
00:28:22,274 --> 00:28:26,174
yet, not, not very long before, but just enough where I was like, I love

514
00:28:26,174 --> 00:28:29,279
this language because of the language itself, and then turned around and

515
00:28:29,324 --> 00:28:32,024
I was like, oh, there's all this stuff where people will pay me to use it.

516
00:28:32,024 --> 00:28:32,804
That's very cool.

517
00:28:32,924 --> 00:28:34,335
Oh, there's a business model too.

518
00:28:34,335 --> 00:28:34,754
Wow.

519
00:28:34,754 --> 00:28:35,565
Imagine that.

520
00:28:35,685 --> 00:28:37,004
Yeah, absolutely.

521
00:28:37,364 --> 00:28:39,344
Uh, but it's, but it's also meant.

522
00:28:39,779 --> 00:28:43,534
That because my motivations for getting into it in the first place, were not.

523
00:28:44,205 --> 00:28:48,254
The new hotness motivations as it has been less of the new hotness.

524
00:28:48,254 --> 00:28:51,344
My motivations have basically stayed the same, and it is

525
00:28:51,344 --> 00:28:56,295
the language that feels the best for me personally to write.

526
00:28:56,924 --> 00:28:59,565
Uh, like, I don't know, it matches my brain

527
00:28:59,685 --> 00:29:01,875
more successfully than any other language.

528
00:29:02,225 --> 00:29:07,024
But as, as you were pointing out, uh, not all of us are Shopify

529
00:29:07,024 --> 00:29:10,685
with an entire legion of, you know, rust developers writing

530
00:29:10,685 --> 00:29:15,455
a ji to, uh, squeeze the blood from the stone to get, uh,

531
00:29:15,484 --> 00:29:20,134
millions of, of requests a second out of our Ruby web processes.

532
00:29:20,614 --> 00:29:21,185
And, uh.

533
00:29:21,735 --> 00:29:26,085
And to, you know, I, I gotta admit, RV is also not written

534
00:29:26,085 --> 00:29:29,295
in Ruby because we want it to be really, really fast.

535
00:29:29,295 --> 00:29:30,404
It's written in rust.

536
00:29:30,824 --> 00:29:35,384
And that is part of the, the thing that you were describing there, right?

537
00:29:35,384 --> 00:29:37,165
Like there are some languages that are.

538
00:29:37,964 --> 00:29:41,355
Constitutionally better suited to some specific use cases.

539
00:29:41,654 --> 00:29:44,024
I'm definitely not planning on quickly

540
00:29:44,024 --> 00:29:47,054
writing a new web app in Rust anytime soon.

541
00:29:47,444 --> 00:29:48,194
But if I'm writing, uh,

542
00:29:50,264 --> 00:29:54,435
if I'm writing a CLI tool that I want to execute really quickly,

543
00:29:54,734 --> 00:29:58,549
uh, I think, I think that Rust is actually a, a great fit there and,

544
00:29:59,170 --> 00:30:03,045
and actually some of the motivation, you know, for, for many years.

545
00:30:03,554 --> 00:30:09,344
We stuck, we put a lot of effort into making Ruby Gems and Bundler

546
00:30:09,344 --> 00:30:12,975
be written fully in Ruby, partly for deployment reasons where we

547
00:30:12,975 --> 00:30:15,705
just wanted it to work on, you know, if you have a Ruby interpreter,

548
00:30:15,915 --> 00:30:18,884
this is just pure Ruby code that any Ruby interpreter can run.

549
00:30:19,275 --> 00:30:24,435
But for the other reason of thinking that it would be easier to get

550
00:30:24,435 --> 00:30:29,235
contributors if you know the Ruby tool was written completely in Ruby.

551
00:30:30,315 --> 00:30:36,884
And I, I am unfortunately, unfortunately, after 10 years, I have to

552
00:30:36,884 --> 00:30:42,254
report back that that is not actually a viable strategy because it,

553
00:30:42,315 --> 00:30:48,420
it turns out if you are writing the dependency manager, you can.

554
00:30:49,109 --> 00:30:54,359
Use all of those dependencies, at least not in the same easy,

555
00:30:54,359 --> 00:30:58,020
straightforward way that all normal Ruby developers use them.

556
00:30:58,049 --> 00:30:58,409
Right?

557
00:30:58,409 --> 00:31:00,344
Like what's a normal Ruby developer?

558
00:31:01,125 --> 00:31:04,154
Uh, somebody, somebody, there aren't any.

559
00:31:04,544 --> 00:31:09,705
Um, but, uh, if you're working on an app and you have a GEM file

560
00:31:09,824 --> 00:31:12,554
and you want to do something new, you can say, oh, I know that

561
00:31:12,554 --> 00:31:14,895
there's a gem that does this for me, so I will add it to the

562
00:31:14,895 --> 00:31:17,475
GEM file and then I will solve the problem using the library.

563
00:31:17,895 --> 00:31:21,734
And if you are working on Bundler, you absolutely cannot do that.

564
00:31:22,125 --> 00:31:23,594
And so it turns out.

565
00:31:24,179 --> 00:31:28,590
That the subset of Ruby that we write, bundler and Ruby Gems

566
00:31:28,620 --> 00:31:33,750
in has continued to get more contorted and weirder and have

567
00:31:33,750 --> 00:31:37,199
more and more workarounds for the fact that we can't use any

568
00:31:37,199 --> 00:31:41,610
of the popular libraries that solve these problems in Ruby.

569
00:31:41,880 --> 00:31:45,000
And so it, it turns out that today, effectively, bundler and

570
00:31:45,000 --> 00:31:50,564
Ruby Gems are written in a. Interesting dialectic cousin of Ruby

571
00:31:50,564 --> 00:31:54,165
that does not overlap with the ruby that all of the other Ruby

572
00:31:54,165 --> 00:31:57,375
developers in the world are using every day in their applications.

573
00:31:57,495 --> 00:32:00,314
And that makes it a lot harder to get contributors.

574
00:32:00,554 --> 00:32:03,044
Um, because you know, the contributors show up and they say, oh,

575
00:32:03,044 --> 00:32:06,014
just solve this the same way I would my every day application.

576
00:32:06,014 --> 00:32:07,770
And then we have to say, sorry, we can't take your pr.

577
00:32:08,984 --> 00:32:09,105
Yeah.

578
00:32:09,105 --> 00:32:11,114
So I, I do wanna get into this as our last topic.

579
00:32:11,114 --> 00:32:14,025
You are the CEO at the Spinel Cooperative.

580
00:32:14,085 --> 00:32:17,355
Uh, you can visit that at spinel, S-P-I-N-E l.coop,

581
00:32:17,685 --> 00:32:21,884
uh, which it is a community nonprofit, which I read.

582
00:32:21,884 --> 00:32:27,645
Given your open source bonafides as you don't particularly like money, uh, how

583
00:32:27,705 --> 00:32:31,335
do you get people to support this financially from an open source perspective?

584
00:32:31,920 --> 00:32:32,550
Totally.

585
00:32:32,550 --> 00:32:38,190
So, so this, this cooperative is basically the latest step

586
00:32:38,190 --> 00:32:42,780
in my attempts to figure out how to balance, uh, sort of like

587
00:32:43,110 --> 00:32:47,429
community benefit and being as inclusive as possible to people

588
00:32:47,429 --> 00:32:51,360
who may not have money but are interested in participating,

589
00:32:51,480 --> 00:32:53,670
while also balancing it with that pesky food addiction.

590
00:32:53,670 --> 00:32:55,050
You have, you have to eat

591
00:32:55,050 --> 00:32:56,185
every day as it turns out.

592
00:32:56,835 --> 00:33:00,315
It's the, it's the food and housing addiction that it

593
00:33:00,315 --> 00:33:03,375
has actually pushed me in the direction of this co-op.

594
00:33:03,824 --> 00:33:07,395
I guess to provide a little bit of background for your listeners, about 10

595
00:33:07,395 --> 00:33:15,585
years ago, I started an, an actual bonafide IRS approved 5 0 1 C six nonprofit.

596
00:33:15,614 --> 00:33:21,074
It was called Ruby Together, and we ultimately,

597
00:33:21,074 --> 00:33:24,614
the, the mission of the nonprofit was.

598
00:33:25,004 --> 00:33:28,154
To figure out funding for kind of like the

599
00:33:28,154 --> 00:33:30,404
Ruby package management ecosystem, right?

600
00:33:30,404 --> 00:33:32,294
Butler, Ruby Gems, all that good stuff.

601
00:33:32,924 --> 00:33:33,404
I just learned.

602
00:33:33,404 --> 00:33:36,585
A 5 0 1 C six is things like business leagues, chambers of

603
00:33:36,585 --> 00:33:39,375
Commerce, real estate boards, boards of trades, and apparently

604
00:33:39,375 --> 00:33:42,134
professional football leagues, which I'm guessing it's not that one.

605
00:33:42,824 --> 00:33:44,234
It is, it is not that one.

606
00:33:44,234 --> 00:33:49,665
Although the NHL and some comic cons are very interesting

607
00:33:49,665 --> 00:33:52,605
examples of 5 0 1 C six s, they're trade associations.

608
00:33:52,964 --> 00:33:58,725
The NHL, the NFL is no longer a, not one of those after being

609
00:33:58,725 --> 00:34:01,304
basically dragged for that every year for, you know, 30.

610
00:34:01,949 --> 00:34:02,429
Yes.

611
00:34:02,459 --> 00:34:02,939
Yes.

612
00:34:03,000 --> 00:34:04,350
Uh, exactly.

613
00:34:04,859 --> 00:34:08,969
Um, and so the, the experience that I had with that type

614
00:34:08,969 --> 00:34:14,909
of nonprofit was that in 2015 when, uh, when corporations.

615
00:34:15,645 --> 00:34:19,094
Basically had money for free, you know,

616
00:34:19,155 --> 00:34:21,885
uh, 0% interest rate, et cetera, et cetera.

617
00:34:22,185 --> 00:34:24,945
Uh, you could actually just go to a company and say, Hey,

618
00:34:24,945 --> 00:34:27,435
I'm running a nonprofit that makes stuff that you use.

619
00:34:27,435 --> 00:34:28,065
That's good.

620
00:34:28,335 --> 00:34:29,534
Will you give me some money?

621
00:34:29,715 --> 00:34:31,304
And the companies were like, yeah, sure.

622
00:34:31,304 --> 00:34:31,815
Money's free.

623
00:34:31,815 --> 00:34:32,475
Here's some money.

624
00:34:32,475 --> 00:34:32,565
And.

625
00:34:33,840 --> 00:34:39,509
Around 2018 when money structurally stopped being free, uh, I

626
00:34:39,509 --> 00:34:41,850
suddenly had a very different conversation with all of those

627
00:34:41,850 --> 00:34:44,219
same companies where I said, Hey, will you give me some money?

628
00:34:44,219 --> 00:34:47,190
And they said, wait, so you're saying we could give you some money

629
00:34:47,489 --> 00:34:51,449
or we could not give you some money, and you would keep doing

630
00:34:51,449 --> 00:34:54,870
the same thing, and we would keep getting to use the same thing.

631
00:34:56,385 --> 00:34:58,875
And I would say yes.

632
00:34:58,875 --> 00:35:00,825
And they would say, great, thanks for stopping by.

633
00:35:00,825 --> 00:35:03,255
We'll take that option where we don't get dirty, but we'll

634
00:35:03,255 --> 00:35:05,685
say bad things about you over the drinks we can't afford.

635
00:35:07,845 --> 00:35:08,685
Exactly.

636
00:35:09,045 --> 00:35:14,925
Uh, and so ultimately I wasn't able to crack the nut of a

637
00:35:14,925 --> 00:35:20,805
nonprofit that is able to, you know, pull in enough money to.

638
00:35:21,825 --> 00:35:23,175
Feed my food addiction.

639
00:35:23,595 --> 00:35:28,245
And so this, this structure in, in the meantime, while I was figuring

640
00:35:28,245 --> 00:35:32,745
this out and while I was concluding that it wasn't gonna work for

641
00:35:32,745 --> 00:35:38,415
my day job, uh, a an an example popped up, uh, there is, there

642
00:35:38,415 --> 00:35:43,275
is another open source maintainers collective called the Geomi.

643
00:35:43,575 --> 00:35:48,165
Uh, started by, uh, Philippo Valora for the Go community.

644
00:35:48,555 --> 00:35:54,045
Um, and, uh, Filippo maintains the Go Cryptography libraries and various

645
00:35:54,045 --> 00:35:58,575
other useful and important tools that ship with the Go Standard Library.

646
00:35:58,875 --> 00:36:03,105
And, uh, he, he started a collective where what they do is

647
00:36:03,105 --> 00:36:06,615
they make open source that is useful to people critically.

648
00:36:06,705 --> 00:36:11,174
One, they are not a nonprofit, and two, they make money by

649
00:36:11,174 --> 00:36:15,285
offering goods and services to corporations in exchange for money.

650
00:36:15,475 --> 00:36:16,705
What an amazing model.

651
00:36:17,095 --> 00:36:18,024
I know, right?

652
00:36:18,325 --> 00:36:24,529
And so the, the primary thing that they do is they offer retainers where they.

653
00:36:25,605 --> 00:36:29,355
Happen to employ several of the, you know, world-class

654
00:36:29,355 --> 00:36:33,495
experts in their respective open source packages.

655
00:36:33,735 --> 00:36:36,765
And there are companies in the world that use those open source

656
00:36:36,765 --> 00:36:40,935
packages to build their business, and that makes it valuable

657
00:36:40,935 --> 00:36:44,385
and worthwhile for those companies to have that world-class

658
00:36:44,385 --> 00:36:48,105
expertise on tap to answer questions, solve problems.

659
00:36:48,145 --> 00:36:49,915
You know, resolve things that come up.

660
00:36:50,365 --> 00:36:56,695
So that is, you know, kind of like the initial model that we are taking

661
00:36:56,695 --> 00:37:03,475
for spinel, we, we would be actually pretty jazzed to succeed as a Geomi

662
00:37:03,475 --> 00:37:09,145
style, you know, collective, where people, you know, have companies that

663
00:37:09,295 --> 00:37:15,175
need to solve problems related to Ruby, Ruby Gems, bundler Rails, uh.

664
00:37:15,960 --> 00:37:20,430
Uh, not just Rails, but also, you know, stimulus, Hotwire,

665
00:37:20,430 --> 00:37:25,080
Hotwire native, all of these tools that companies are

666
00:37:25,080 --> 00:37:28,740
using to build really successful, profitable businesses.

667
00:37:29,100 --> 00:37:33,810
Uh, our co-op has at least one person who was either been

668
00:37:33,810 --> 00:37:37,740
on the core team of all of those things, or actually,

669
00:37:37,740 --> 00:37:39,840
you know, created those things in the first place.

670
00:37:40,095 --> 00:37:45,675
And so we have the expertise that can solve those problems and answer

671
00:37:45,675 --> 00:37:49,305
those questions and help those companies, you know, get out of those

672
00:37:49,545 --> 00:37:54,255
gnarly situations in dramatically less time than they would otherwise.

673
00:37:54,525 --> 00:37:59,025
And so we're hopeful that rather than rely on the nonprofit

674
00:37:59,025 --> 00:38:02,115
situation where we say, Hey, would you, you know, throw some

675
00:38:02,115 --> 00:38:06,465
money at us, we can say, Hey, would you be interested in.

676
00:38:06,900 --> 00:38:11,759
Saving yourself a bunch of money by paying us to solve your problems so that

677
00:38:11,759 --> 00:38:15,390
your actual engineers can build your actual product that makes you actual money.

678
00:38:16,020 --> 00:38:17,130
I like that quite a bit.

679
00:38:17,520 --> 00:38:21,990
The idea of being able to, you know, do things the smart way.

680
00:38:22,205 --> 00:38:25,860
It, it taking money from people who have it and wanna support what you're doing.

681
00:38:25,950 --> 00:38:27,090
Seems like a good model.

682
00:38:27,540 --> 00:38:27,810
Yeah.

683
00:38:28,110 --> 00:38:32,310
Uh, I'm, I'm very hopeful that, uh, that it will appeal.

684
00:38:33,165 --> 00:38:36,555
And, and our initial conversations with a bunch of people have been pretty

685
00:38:36,555 --> 00:38:43,635
positive, so we'll see how it goes, but ultimately the idea is, is definitely

686
00:38:43,965 --> 00:38:49,425
to sort of combine the tooling that I have always wished existed with.

687
00:38:50,385 --> 00:38:54,195
Expertise that actually saves companies money and appeals

688
00:38:54,195 --> 00:38:58,245
to them while making sure that we have funding to, as

689
00:38:58,245 --> 00:39:02,865
you said, uh, feed our ongoing and SRT food addictions.

690
00:39:03,405 --> 00:39:03,885
Exactly.

691
00:39:04,190 --> 00:39:07,725
I, I wish you well with this, and I definitely want to hear from you,

692
00:39:07,755 --> 00:39:11,655
feedback from you in a few months on how the adoption of RV is gone.

693
00:39:11,655 --> 00:39:15,555
I, if people want to keep a little bit more of a real time finger on the

694
00:39:15,555 --> 00:39:18,285
pulse, where's the best time, where's the best place for them to find you?

695
00:39:19,515 --> 00:39:22,845
Uh, I spend the most amount of time these days

696
00:39:22,845 --> 00:39:26,295
on Blue Sky, where my handle is indirect.io.

697
00:39:26,715 --> 00:39:31,245
Uh, I can also, you know, if you, if, if you need me,

698
00:39:31,305 --> 00:39:35,925
uh, my, my homepage@arco.net contains links to all of my

699
00:39:35,925 --> 00:39:41,265
various profiles on GitHub, Instagram, mask it on, uh,

700
00:39:41,355 --> 00:39:45,225
LinkedIn, you know, take your, pick your poison, but, uh.

701
00:39:45,555 --> 00:39:48,615
Yeah, any, any and all of those ways, uh, would be a great

702
00:39:48,615 --> 00:39:52,605
way to reach out if you're interested in providing feedback

703
00:39:52,634 --> 00:39:57,194
or, uh, hitting us up at Spinel about our expertise.

704
00:39:57,765 --> 00:39:59,924
And we will of course put links to that in the show notes.

705
00:40:00,105 --> 00:40:02,265
Thank you so much for taking the time to speak with me.

706
00:40:02,265 --> 00:40:02,654
I appreciate it.

707
00:40:03,435 --> 00:40:04,395
Yeah, absolutely.

708
00:40:04,395 --> 00:40:07,515
It's great as always to have a conversation with you, Corey.

709
00:40:08,294 --> 00:40:11,564
Andre Arco, CEO at Spinel Cooperative.

710
00:40:11,615 --> 00:40:13,634
I'm Cloud economist Corey Quinn, and this is

711
00:40:13,634 --> 00:40:14,595
Screaming In the Cloud.

712
00:40:14,774 --> 00:40:16,935
If you've enjoyed this podcast, please leave a five

713
00:40:16,935 --> 00:40:19,365
star review on your podcast platform of choice.

714
00:40:19,395 --> 00:40:22,245
Whereas if you've hated this podcast, please leave a five star

715
00:40:22,245 --> 00:40:25,694
review on your podcast platform of choice along with a comment.

716
00:40:25,694 --> 00:40:26,805
But let's be serious.

717
00:40:26,805 --> 00:40:28,575
You're not gonna have time to write that comment

718
00:40:28,575 --> 00:40:30,645
'cause you're still fixing dependency problems.