Speaker 1: Hey, folks, welcome back to Ruby Rogues this week, it
Speaker 1: looks like it's just me. We kind of took a
Speaker 1: break from recording for a little while, but I'm back
Speaker 1: at it and I had some stuff to talk about.
Speaker 1: So I'm going to just jump in and talk about
Speaker 1: some of the stuff that's going on out there in
Speaker 1: the Ruby community, just to give a little bit of
Speaker 1: context on how I expect this to flow effectively. I'm
Speaker 1: just going to kind of explain what I've been able
Speaker 1: to gather is happening. I'll probably interject my opinion or
Speaker 1: feelings on things as I go, and then at the end,
Speaker 1: I'll give some conclusions as far as what I think
Speaker 1: we ought to be thinking or doing regarding the situation
Speaker 1: with Ruby Central and Ruby Gems. I'm also going to
Speaker 1: be gearing up and recording more episodes, and I'd like
Speaker 1: to add another host or two to this show, so
Speaker 1: if you're interested, feel free to email me Chuck at
Speaker 1: topendevs dot com. I've also got some other stuff coming
Speaker 1: just to kind of give you all a heads up.
Speaker 1: I'm going to start recording a Ruby Tip of the Day,
Speaker 1: and so that'll be a daily podcast. It'll probably be
Speaker 1: five to ten minutes, and I'll just explain some stuff,
Speaker 1: and I'm planning on putting out some video content related
Speaker 1: to that, right, So I'll explain the concepts behind a thing,
Speaker 1: and then and you know, hey, you probably want to
Speaker 1: do this, or you probably want to do this instead
Speaker 1: of that, and then do a quick video demo and
Speaker 1: show you what the difference is. But in the meantime,
Speaker 1: let's go ahead and dive in and talk about the
Speaker 1: situation with Rocky Mountain Ruby or sorry, with Ruby Central.
Speaker 1: I kind of Freudian slipped, I guess with mentioning Rocky
Speaker 1: Mountain Ruby. I was at Rocky Mountain Ruby a week
Speaker 1: or so ago. There were a number of people who
Speaker 1: are involved in the whole Ruby Central situation that we're there.
Speaker 1: I'm not going to attribute anything to anyone person, because
Speaker 1: I kind of got the story from a handful of
Speaker 1: people that are involved, and then another handful of people
Speaker 1: who have been following things pretty closely. And I don't
Speaker 1: want to represent that what I've gathered is necessarily the
Speaker 1: opinion or you know, any kind of statement from anybody
Speaker 1: who's involved, because honestly, I'm not sure if I remember
Speaker 1: which details came from which people, and so anyway, I
Speaker 1: feel like I've been able to gather more information than
Speaker 1: what's kind of out there at the moment, so we
Speaker 1: can dive into that. One other thing is is that
Speaker 1: if you're looking for me to take sides on, you know,
Speaker 1: these people did everything right and these people did everything wrong.
Speaker 1: I don't feel like that's the case in this case.
Speaker 1: I feel like both sides have made decisions that definitely.
Speaker 2: Could have been made better.
Speaker 1: And I don't think anybody comes out of this looking like, oh, well,
Speaker 1: we did everything right and they screwed us over. So anyway,
Speaker 1: I'm just gonna just kind of wanted to put that
Speaker 1: out there as we get into it. So anyway, so
Speaker 1: let me back up and give some historical information for folks.
Speaker 1: I know that there are a lot of people that
Speaker 1: are newer to the community and haven't been around for
Speaker 1: all of the things that we've kind of lived through
Speaker 1: over the last fifteen or twenty years. I've been programming
Speaker 1: Ruby for around twenty years, and so I've kind of
Speaker 1: seen a lot of the things that add up to this,
Speaker 1: and you know, and so I want to give that
Speaker 1: context as well. Essentially the situation, I'll just give a
Speaker 1: little bit of that, and then I'll go back historically,
Speaker 1: you know, so that you can kind of see where
Speaker 1: it's headed. But the situation is that a few weeks ago,
Speaker 1: maybe a month or so ago, sounds like it was
Speaker 1: in early September or maybe late August, ruby Central. So
Speaker 1: some people came out who work on some of the
Speaker 1: projects like ruby jumps dot org, the Ruby Gems command
Speaker 1: line interface, and Bundler, and they said that they had
Speaker 1: had their access to the repositories revoked, that the organizations
Speaker 1: that on GitHub that those repositories belonged to had been
Speaker 1: reassigned to Marty HoTT, who's the developed director of open
Speaker 1: source at Ruby Central. And then I guess they got
Speaker 1: their access back for a little bit, and then they
Speaker 1: had their access finally revoked. So then people were saying, well, hey,
Speaker 1: you're essentially taking these projects that people work on for
Speaker 1: the community out of their hands, and so people were
Speaker 1: saying it was a hostile takeover and things like that.
Speaker 1: I'm finding that there's a lot more context here, right So,
Speaker 1: like I said before, I think the reasons that Ruby
Speaker 1: Central's doing what it's doing are understandable, and I think
Speaker 1: there are which could have been much much, much much better.
Speaker 1: And I also understand where the contributors are coming from
Speaker 1: because they've been working on this stuff for a really,
Speaker 1: really really long time. So let's rewind way back, right,
Speaker 1: and let's talk about the way things worked when I
Speaker 1: started doing Ruby back in like two thousand and six.
Speaker 2: So I was working for a company that.
Speaker 1: I was actually running their tech support department, and we built,
Speaker 1: we built the infrastructure for our support teams in Rails,
Speaker 1: me and another guy that were running the support team.
Speaker 1: And back then, when you built a Ruby or Rails application,
Speaker 1: there was no gem file right, no bundler didn't exist,
Speaker 1: and so what you would do is you would do
Speaker 1: a gem install on your machine and it would run
Speaker 1: whatever version of Ruby you had on your machine. And
Speaker 1: there weren't these convenient switchers like RVM or OURBND, and
Speaker 1: so you just had to have the right version on
Speaker 1: your computer, have the right gems installed, and then you
Speaker 1: would require them and it would pull them out of
Speaker 1: wherever you had them installed.
Speaker 2: And so.
Speaker 1: If you had jim incompatibilities, you would get errors.
Speaker 2: When you ran your Ruby code.
Speaker 1: And as applications got more complicated, especially for Rails, applications,
Speaker 1: dependency management became a huge nightmare, and then when you
Speaker 1: upgraded from one version of Rails to another, it became
Speaker 1: even more of a nightmare. So when we transitioned from
Speaker 1: Rails two to Rails three, and Yahuta Katz and Carl Lerchie,
Speaker 1: I can't remember how to say his name, anyway, they
Speaker 1: were ya hootah did most You know, he was kind
Speaker 1: of the front man for a lot of the work.
Speaker 1: He was the one that was out there, given the
Speaker 1: talks and things like that, and so I kind of
Speaker 1: want to give him more credit, but I don't know
Speaker 1: how much of the work was done by either of
Speaker 1: those guys. And I can't remember if Tom Dale was
Speaker 1: involved in that or not, or if he just got
Speaker 1: involved later and was more of an influence in Ember,
Speaker 1: which is a JavaScript framework. But anyway, so they they
Speaker 1: did this work in the eight they had been working
Speaker 1: on a competitor to Rails called MERB and Rails and
Speaker 1: Merb decided to merge, and so they merged, and that
Speaker 1: that upgrade was kind of a big, big, big move.
Speaker 1: But a few of the things that came out of
Speaker 1: that were eventually we got Bler from a lot of
Speaker 1: that work and I think Carl and Yehuda were the
Speaker 1: ones that started it. For a really really long time,
Speaker 1: andre Arco was the one that was kind of spearheading
Speaker 1: the work on that, and so we got Buler from that.
Speaker 1: It changed a lot of things because then you could
Speaker 1: just put stuff into the gem file and Butler would
Speaker 1: figure out what dependencies you needed and it would align
Speaker 1: all that stuff, and then if it couldn't find compatible
Speaker 1: versions with everything that you've ad for, then it would
Speaker 1: tell you. And so anyway, that became kind of this
Speaker 1: critical thing. Ruby Gems the cli and ruby Gems the
Speaker 1: server were around before I was programming Ruby, and so
Speaker 1: a lot of that work was done by Eric Hodle
Speaker 1: and some of the other folks around there. And my
Speaker 1: understanding is is that for the RubyGems dot org service,
Speaker 1: somebody had to pay the server bills, right, and Ruby
Speaker 1: Central had kind of informed to run Ruby komf and
Speaker 1: rails comp and so it's my understanding that they just
Speaker 1: took that under their wing kind of formed something that
Speaker 1: looks like a foundation. I'm not sure if they're organized
Speaker 1: in the same way as kind of like the Rails
Speaker 1: Foundation or some of the other open source foundations like
Speaker 1: Linux Foundation, but ultimately they have corporate sponsors, and I
Speaker 1: think they were actually making money from the conferences and
Speaker 1: anyway they were able to pay for the infrastructure to
Speaker 1: run regems dot org and so you know they've hosted
Speaker 1: those servers and things like that. And then of course,
Speaker 1: you know, over the years, people have become more sophisticated
Speaker 1: in the way that they try and compromise people software,
Speaker 1: and one of them are supply chain attacks, and so
Speaker 1: you know, they've had to become much more sophisticated in
Speaker 1: the way that they handle requests or you know, posting
Speaker 1: of Ruby gems and things like that to make sure
Speaker 1: that when you pull in a gem that it's what
Speaker 1: you expected to be and it doesn't have any malicious
Speaker 1: code in it or you know, open up vulnerabilities in
Speaker 1: your application and things like that, and I think they
Speaker 1: do a pretty good job of that. I can't think
Speaker 1: of any major problems that you know, that have come
Speaker 1: from ruby gems itself, and if they have been issues,
Speaker 1: they've been on top of fixing those.
Speaker 2: Right.
Speaker 1: Most of the time, it's oh, we overlooked a thing
Speaker 1: in you know, a gem or something, right, and so
Speaker 1: then you get a patch.
Speaker 2: To ray or something like that.
Speaker 1: But anyway, so that's where a lot of this comes from.
Speaker 1: And then a few years ago, I say a few,
Speaker 1: but I think it was probably like ten or more
Speaker 1: years ago, a lot of these folks were spending quite
Speaker 1: a bit of time maintaining a lot of these projects
Speaker 1: for the Ruby community, right, so rubygms dot org and
Speaker 1: Bundler in particular, and so, and it's all open source software,
Speaker 1: and they weren't really getting paid. This was before you
Speaker 1: could sponsor people on GitHub, and there really weren't other
Speaker 1: terrific mechanisms for people to say, hey, I'm doing this
Speaker 1: work that benefits you. Do you want to throw me
Speaker 1: a few bucks? And so they founded a group called
Speaker 1: Ruby Together. And what Ruby Together did is it it
Speaker 1: collected a fund similar to Ruby Central, right where you
Speaker 1: have these companies that are donating to them. And then
Speaker 1: they were able to pay the open source maintainers at
Speaker 1: least something for kind of the above and beyond amount
Speaker 1: of time that they were spending on Bundler and ruby
Speaker 1: gems and RubyGems dot org so that they could provide
Speaker 1: us with secure, functional tools that do the job that
Speaker 1: we need them to do.
Speaker 2: And then you know, and that all made sense, right.
Speaker 1: It was kind of in a time where I felt
Speaker 1: like some of the social agendas were starting to crop up,
Speaker 1: and they were a little bit vocal on that. But
Speaker 1: for the most part, they you know, they mostly were
Speaker 1: just raising money for you know, for the the infrastructure
Speaker 1: work that they were doing, right, and so, you know, great,
Speaker 1: we still get all of the goodies for free.
Speaker 2: They're doing work that we all need done.
Speaker 1: You know, they're getting paid for it, which I think
Speaker 1: is great, and so more power to them. And so
Speaker 1: my understanding is about three three to five years ago,
Speaker 1: Ruby Central and Ruby Together figured out that they were
Speaker 1: basically going and asking for support from the same groups,
Speaker 1: from the same folks, right, because the folks that support
Speaker 1: Ruby Central or companies that use Ruby on a regular basis,
Speaker 1: you know, so Shopify and you know, base Camp and whoever, Right,
Speaker 1: they all run on Ruby and use the Ruby infrastructure.
Speaker 1: And so they were giving money to Ruby Central. But
Speaker 1: then a lot of the infrastructure that's supported by Ruby
Speaker 1: Central runs on software that's being developed by Ruby Together,
Speaker 1: and so they decided to merge, and so they did,
Speaker 1: and they merged, and so what wound up happening was
Speaker 1: now Butler rubygms, dot org and Rubygms are all maintained
Speaker 1: by Recentral, along with the.
Speaker 2: Conferences that they are no longer going to do.
Speaker 1: I don't know if they're going to still do ruby COFF,
Speaker 1: but they publicly announced that they are not going to
Speaker 1: do rails COMF so so anyway, so that's kind of
Speaker 1: where we wind up sitting for a while, right is,
Speaker 1: Ruby Central is paying the developers you know as contractors basically,
Speaker 1: so they're paying a lot of these people to work
Speaker 1: on the Ruby GM's infrastructure and the Bundler infrastructure and
Speaker 1: a lot of this other stuff that we use all
Speaker 1: the time. And Ruby Central is now responsible for all
Speaker 1: of this infrastructure and our supply chain to get us
Speaker 1: gems right. And so you can kind of see where
Speaker 1: we're headed with this, right So, if they have a
Speaker 1: responsibility for that, then they might have some liability if
Speaker 1: there's a supply chain attack and you know, the problems
Speaker 1: aren't handled properly. And so it's my understanding. And again
Speaker 1: this is I talked to a whole bunch of people.
Speaker 1: I can't really name anyone source for this. It's it's
Speaker 1: been gathered over a number of conversations. But my understanding
Speaker 1: is is that the board Ruby Central started getting legal
Speaker 1: advice that indicated that they could have some level of
Speaker 1: vulnerable or of liability if there was.
Speaker 2: If there was a supply chain attack.
Speaker 1: And the other concern was that the developers that work
Speaker 1: on these systems didn't really have the kinds of liability
Speaker 1: protections that they ought to, right, so if somebody made
Speaker 1: a mistake building ruby gems the CLI, and somebody else
Speaker 1: was able to exploit that and do a mass supply
Speaker 1: chain attack, they might be personally liable. And so there
Speaker 1: were these concerns that were coming up, but mainly, if
Speaker 1: Ruby Central gets sued and gets taken down, then who's
Speaker 1: going to run RubyGems dot org and who's going to
Speaker 1: do the work to protect the supply chain and things
Speaker 1: like that. So, and here's where I'm not going to
Speaker 1: represent anything that I haven't heard or don't know, but
Speaker 1: it's my understanding that they determined that they needed to
Speaker 1: amend the agreements they had with these other open source
Speaker 1: maintainers so that Ruby Central could protect itself in the
Speaker 1: case of, you know, something going really badly, and on
Speaker 1: the other side, provides some level of indemnification to the
Speaker 1: Ruby The Butler and Ruby Gems maintainers, right, so that
Speaker 1: if something happened and they got personally sued, that Ruby
Speaker 1: Central would be in a position to help protect them
Speaker 1: from legal jeopardy. And so the other thing is is,
Speaker 1: and I've seen this in other open source systems where
Speaker 1: if you contribute to a project, so legally under US law,
Speaker 1: if you write code, you own the code. And so
Speaker 1: usually if you're working on some kind of system that's
Speaker 1: out there at all, then especially if it has a license,
Speaker 1: it's not like MIT, right, because if it's MIT license,
Speaker 1: the license basically says take this and do whatever you
Speaker 1: want with it, right, And so then there's there's not
Speaker 1: really any like I can't come after you for using
Speaker 1: my code because it's MIT license.
Speaker 2: Right.
Speaker 1: If I license an MIT, it says explicitly in there
Speaker 1: you can do whatever you want with it, and so
Speaker 1: I'm essentially giving over my copyright protection on the code
Speaker 1: and allowing you to do what you want with it.
Speaker 1: But some of the other licenses out there don't allow that.
Speaker 1: And so then what happens is a lot of times
Speaker 1: you'll have a contributor agreement that says, if you contribute
Speaker 1: to our code base, then we own the code, and
Speaker 1: we control the license, and we're able to write, we're
Speaker 1: able to put it out however we want, right and
Speaker 1: so then they can continue to maintain it under an
Speaker 1: Apache license or things like that, and they don't have
Speaker 1: any obligation to you to you know, they don't forget
Speaker 1: your permission if they want to do something else with
Speaker 1: the project leader, and so it gives the project owner
Speaker 1: of flexibility. And so it's my understanding that that's kind
Speaker 1: of the direction that Ruby Central was looking to go to,
Speaker 1: where they could then have these kinds of contributor agreements
Speaker 1: that would allow them to operate and have a little
Speaker 1: more control over how rubygms, RubyGems dot org and things
Speaker 1: like that we were managed. But if you look at
Speaker 1: it from the other side, I mean, some of these
Speaker 1: folks have been working on these projects for more than
Speaker 1: ten years and have done a ton of work, and
Speaker 1: they've kind of operated in this arena where they didn't
Speaker 1: have as much oversight and they didn't have people telling
Speaker 1: them what they could and couldn't do, and you know,
Speaker 1: they felt a sense of ownership over the project, which
Speaker 1: you know, I think is terrific. And so Ruby Central
Speaker 1: coming in and saying hey, guys, we need you to
Speaker 1: sign these agreements and do X, y and z in
Speaker 1: order to continue to work on this project. And you know,
Speaker 1: we're going to take a more active and controlling role
Speaker 1: on this open source project that you've just worked on
Speaker 1: and contributed you know, hours and hours and years of
Speaker 1: your life to. Right, we're taking a level of ownership
Speaker 1: away from you. I totally understand these people going, whoa, whoa,
Speaker 1: Wait a minute, right, we don't remember signing up for this, right,
Speaker 1: we signed up for Hey, you know, let's fund this
Speaker 1: stuff in the way that it gets funded.
Speaker 2: Right.
Speaker 1: But I also can see the side of things from
Speaker 1: Ruby Central's angle where they're looking at it and going,
Speaker 1: if we own and are responsible for the code in Bundler,
Speaker 1: in the Ruby gmc l I and rubygms dot org,
Speaker 1: and something bad happens even though we didn't do it, right,
Speaker 1: it's it's a contributor that's here, that's contracted through us.
Speaker 1: We bear the brunt of that liability, and so we
Speaker 1: need to have certain guarantees in order to be able
Speaker 1: to say no, we've done everything we can, because then
Speaker 1: if they get sued and they say, look, you know,
Speaker 1: we've done we did everything we could, We followed all
Speaker 1: the best practices. Right, we shouldn't be held liable for
Speaker 1: a thing that is impossible to foresee and uh, where
Speaker 1: there's not really a good practice for protecting against it, right,
Speaker 1: then then they can they can put together a much
Speaker 1: more sound defense because at the end of the day,
Speaker 1: they can tell the court, no, we did everything we
Speaker 1: were supposed to do, right, and it's not it's not
Speaker 1: negligence or malice on our part, and so we can't
Speaker 1: be held liable. Right And and so I understand. I
Speaker 1: understand both sides. I understand the push and pull. So
Speaker 1: here's here's where things kind of get a little dicey
Speaker 1: for me on the Ruby Central side, right, because for
Speaker 1: the most part, I understand where Ruby Central is coming from,
Speaker 1: and I support them in what they were doing as
Speaker 1: far as their motivations and things like that. Right, I
Speaker 1: haven't seen any evidence that suggests that this was some
Speaker 1: kind of hostile takeover, that there's some ego involved, or
Speaker 1: that there's some kind of you know, malicious intent to
Speaker 1: screw over the community, or some political gamesmanship that has
Speaker 1: to do with these contributors. I haven't seen any evidence
Speaker 1: of that at all. And so for the most part,
Speaker 1: I think Ruby Central was just trying to do the
Speaker 1: right thing, and they did.
Speaker 2: It really really really really really really.
Speaker 1: Really really poorly, right, because the first thing they should
Speaker 1: have done is they should have been doing all of
Speaker 1: this in public, right. I understand that maybe they don't
Speaker 1: want to public publicize, Hey, we have this legal exposure, right,
Speaker 1: you know, if this, if any of this happens, then
Speaker 1: we're legally liable, and so we're trying to fix it. Hey, folks,
Speaker 1: don't sue us in the meantime, Right that maybe that's
Speaker 1: not the best.
Speaker 2: Way to go.
Speaker 1: But what they could do could have done, is they
Speaker 1: could have said and they could have come out and announced, right, hey,
Speaker 1: we are putting a new policy in place for contributors
Speaker 1: so that you know, so that we have these kinds
Speaker 1: of guarantees on the work that they do, and we're
Speaker 1: providing these kinds of protections for the contributors on the
Speaker 1: work that they do. And we're we're just trying to
Speaker 1: kind of button up some areas so that we can
Speaker 1: protect the community and that we can protect the we
Speaker 1: can protect rev Central, right, and that way we can
Speaker 1: continue to provide services, we can continue to work on
Speaker 1: these libraries and we can continue to give people what
Speaker 1: they need, right and maybe you know, not in so
Speaker 1: many words, tell us, you know that they're they're trying
Speaker 1: to they're trying to for the longevity of the of
Speaker 1: the system to make these changes and then acknowledge right
Speaker 1: that this may be painful and that the contributors are
Speaker 1: probably used to working under different constraints, and we're working to.
Speaker 2: Make sure that this is as painless as possible. Because
Speaker 2: then when you go in and you.
Speaker 1: Eventually revoke access or you know, try and get really
Speaker 1: you know, maybe even push twist arms a little bit
Speaker 1: to get them to sign these agreements, then people know
Speaker 1: it's coming.
Speaker 2: They know what's up.
Speaker 1: They know that the Ruby Central I keep wanting to
Speaker 1: say the foundation, but again I don't know if it's
Speaker 1: organized that way.
Speaker 2: But at the end of the.
Speaker 1: Day, right, just so that people can see this coming
Speaker 1: and go, oh, well, they obviously wouldn't agree to the
Speaker 1: you know, the terms on Ruby Central, and yeah, I'm
Speaker 1: frustrated on behalf of these folks, but you know, it
Speaker 1: was all done above board, It was all transparent. We
Speaker 1: all knew it was coming, right, and then they can
Speaker 1: come out and they can make similar announcements because these
Speaker 1: people are people that we all really rely on and
Speaker 1: in a lot of cases at least trust, right, we
Speaker 1: trust their code and things like that. So, you know,
Speaker 1: they had to know that these folks have a little
Speaker 1: bit of pull and that you know, if if it's
Speaker 1: painful for them, we are all going to know and
Speaker 1: a lot of us are going to be sympathetic to them, right,
Speaker 1: and so, and again I don't know what level they
Speaker 1: had communication with the contributors themselves. It sounded like they
Speaker 1: were somewhat blindsided or completely blindsided, and that's not okay, right,
Speaker 1: And so what what Ruby Central should have done is
Speaker 1: they should have done this all above board and transparently
Speaker 1: so that people could kind of connect the dots and
Speaker 1: see it all coming. And they definitely, definitely, definitely should
Speaker 1: have been talking to contributors, right. This should not have
Speaker 1: been a surprise of contributors. It should have been a hey, look,
Speaker 1: this is this is the contributor agreement that.
Speaker 2: We're gonna we're going to enforce.
Speaker 1: If you have any concerns or you think we could
Speaker 1: change things in it, right, we're welcome to talk through it.
Speaker 2: Right.
Speaker 1: You know, this is what we're trying to do with
Speaker 1: liability and longevity and things like that. And so ultimately
Speaker 1: we're just trying to do the best by you, but
Speaker 1: also make sure that we're doing right by the community.
Speaker 1: And so then at least then you might have some
Speaker 1: of the contributors coming out and saying, no, they told
Speaker 1: us a while ago, and we've been negotiating on the
Speaker 1: on the contributor agreement, and you know, and so you know,
Speaker 1: these are the areas where it broke down. These are
Speaker 1: the couple of things in the agreement that I didn't like,
Speaker 1: and so you know, ultimately I wound up not signing
Speaker 1: it and resigning right that that it just changes the
Speaker 1: whole tenor of the thing, right, And and then on
Speaker 1: the other side, right then we can also see that
Speaker 1: they're negotiating in good faith right anyway. So so Ruby's
Speaker 1: Central just screwed this up like massive, big time. And
Speaker 1: then the other thing I understand is that somebody in
Speaker 1: them in who was one of the major contributors left
Speaker 1: or be Central, and so they had to replace somebody anyway.
Speaker 2: And so my understanding is is.
Speaker 1: That that caused the board to want to accelerate the
Speaker 1: timeline because whoever they brought in was going to be
Speaker 1: working on some pretty major stuff, and if they brought
Speaker 1: them in, they could just have them under the agreement
Speaker 1: to begin with. And so it's my understanding that they
Speaker 1: started looking at that, and then that's when the board
Speaker 1: essentially directed the folks that run the infrastructure to start
Speaker 1: removing access and you know, changing the GitHub organization and
Speaker 1: things like that, and so that kind of happened in
Speaker 1: a hurry all at once. And again that was something
Speaker 1: that they really shouldn't have done, because there's no reason
Speaker 1: that they can't bring the new people on under the
Speaker 1: under some kind of agreement and keep the old people
Speaker 1: on under you know, and just tell them, look, you know,
Speaker 1: we're bringing we're starting to bring you know, more important
Speaker 1: players in the in this system in under the agreement.
Speaker 1: So we need to get you on the agreement by
Speaker 1: this date, right and then and then work with the contributors.
Speaker 1: So so anyway, so that you know that that's that's
Speaker 1: kind of the mess. Now, a couple of other things
Speaker 1: that happened. We're so RubyGems dot org got forked and
Speaker 1: I need to go look up. I think it's Ruby
Speaker 1: dot coop. I'll have to find it. I was reading
Speaker 1: up on it the other day anyway, So so yeah,
Speaker 1: so uh kind of the way that things are looking now, yeah,
Speaker 1: I'll find I'll find the link. But anyway, feel free
Speaker 1: to go check it out. I'm personally not uh, I'm
Speaker 1: I'm gonna keep using Ruby gems until until I feel
Speaker 1: like I have a real reason to switch. Right now,
Speaker 1: I think again, you know, I think they're trying to
Speaker 1: act in the best interest of the the the community.
Speaker 1: But at the end of the day, yeah, and anyway,
Speaker 1: it might it might not be Ruby dot coop, but
Speaker 1: it might be like co op is the way that
Speaker 1: they're looking at it.
Speaker 2: Anyway, So gem dot coop. There we go.
Speaker 1: Okay, so it's gem dot coop. It's at gem dot
Speaker 1: co op. So it's a new Ruby gem server. Looks
Speaker 1: like Mike McQuaid is helping them set it up, and
Speaker 1: it kind of follows the homebrew model. And then yeah,
Speaker 1: you can swap in your bundle, bundle, your gem file.
Speaker 1: You can swap out Ruby gems dot org to gem
Speaker 1: dot coop. So anyway, and yeah, you know, so, so
Speaker 1: the contributors are upset.
Speaker 2: They went and started their own thing.
Speaker 1: But this is where it gets a little it weird
Speaker 1: on the contributor side. So apparently, and there was a
Speaker 1: whole write up on this on Ruby Central and all
Speaker 1: linked to it in the show notes. But apparently, so
Speaker 1: they went and they revoked everybody's access to the the repos, right,
Speaker 1: and but they're all they're all public.
Speaker 2: Reposts, so you can go and you can fork it, right,
Speaker 2: not a big deal.
Speaker 1: And so I'm assuming that that's what gem dot coop
Speaker 1: is doing, is that they just forked RubyGems dot org
Speaker 1: and then you know, they're seeding it with whatever Gem
Speaker 1: information they have. But it's all hosted on AWS. And
Speaker 1: apparently the route access certificate or credential wasn't rotated when
Speaker 1: they removed people's access to the other stuff, and so
Speaker 1: a lot of folks were still able to access the
Speaker 1: RubyGems dot org servers and so and so this is
Speaker 1: the other part of the drama. And you know, and
Speaker 1: a lot of people have weighed in and said no
Speaker 1: ruby jams, blah blah blah. I've heard some people try
Speaker 1: and pin a lot of this on shopify. I don't
Speaker 1: find any of that evidence compelling. I really think that
Speaker 1: it was just the Ruby gems board and then really
Speaker 1: screwing it up anyway. So a lot of the contributors
Speaker 1: who had helped maintain the systems still had access to
Speaker 1: the ruby gems servers, and so the folks at Ruby
Speaker 1: Central actually posted some of the emails that they got
Speaker 1: from Andre Arco and where he was saying, Hey, maybe
Speaker 1: we could monetize or otherwise lease the log information from
Speaker 1: RubyGems dot org and you know, work out some kind
Speaker 1: of arrangement where they could use that. And Ruby Central
Speaker 1: told them no, told him and whoever was working with
Speaker 1: him no. But then they show Mode that and he
Speaker 1: told him he still had access to the servers, and
Speaker 1: apparently they didn't solve that in a timely manner, right,
Speaker 1: there was a few days and he still logged in,
Speaker 1: and they imply that it was him without actually directly
Speaker 1: saying it. They implied that it was Andre that was
Speaker 1: getting in. The evidence really does point that way, But
Speaker 1: I haven't seen the logs firsthand or anything to be
Speaker 1: able to definitively say no, this really, you know, really
Speaker 1: implicates Andre. So I'm a little uncomfortable putting his attaching
Speaker 1: his name to it. But somebody who had that level
Speaker 1: of access logged in and then they started changing credentials
Speaker 1: on the ruby jem server, and so the folks at
Speaker 1: Ruby Central couldn't get in, They couldn't get into the
Speaker 1: AWS setup, and so they wound up having to contact
Speaker 1: AWS and doing a credentials reset, and then they went
Speaker 1: in and they fixed it all up. But they could
Speaker 1: see that whoever it was it logged in several times
Speaker 1: had accessed a bit of information. It didn't look like
Speaker 1: they had copied anything off, but.
Speaker 2: He did.
Speaker 1: Anyway, there are a couple of things here that just
Speaker 1: kind of really make me scratch my head, I mean.
Speaker 1: And then Andre came out later and actually and so
Speaker 1: this is where it really looks like it was him.
Speaker 1: He said in his blog post that he went in
Speaker 1: and was changing the credentials so that the system wouldn't
Speaker 1: get a compromise. But the way that it was explained
Speaker 1: on Ruby Central, and you know, the logs that they
Speaker 1: presented and things like that, some of that just doesn't
Speaker 1: quite add up to what Andre says he was doing
Speaker 1: in there. And the other thing is is that I
Speaker 1: think he probably could have done more to just kind
Speaker 1: of force them around, because yeah, I mean, at some
Speaker 1: point you're gonna, you know, you could get enough public
Speaker 1: out cry from the community saying, you guys are putting
Speaker 1: us all at risk if you don't change this. But anyway,
Speaker 1: but the flip side is is than anybody who wants
Speaker 1: to go in and try and hack it right might
Speaker 1: be able to get in. So I don't know, I
Speaker 1: don't know what the answer would have been, but I
Speaker 1: think there were better ways for him to handle it.
Speaker 1: And the other thing is is that if he wanted
Speaker 1: that data because it would help them set up gem
Speaker 1: dot coop and make gem dot coop you know run better,
Speaker 1: or know what kinds of performance aspects or you know,
Speaker 1: access patterns or anything else. I mean, all of that
Speaker 1: stuff would have been in those logs and probably could
Speaker 1: have helped them get that set up. And so that
Speaker 1: that doesn't sit quite right with me.
Speaker 2: And just you know, getting in and accessing stuff that.
Speaker 1: Way when you've been you know, when they've basically let
Speaker 1: you go from the organization and stuff like that, that
Speaker 1: doesn't sit right with me either, And so I have
Speaker 1: some really really grave concerns there. I've also seen Andre
Speaker 1: do some other things where he's gone on the attack
Speaker 1: for against other people, and so he seems like as
Speaker 1: far as like a maintainer of Butler, I think he's
Speaker 1: done a terrific job.
Speaker 2: But as a member of the community.
Speaker 1: I think sometimes he is a little bit of a
Speaker 1: loose cannon and the way that he approaches some of
Speaker 1: these issues, and so I'm I'm very not comfortable with,
Speaker 1: you know, letting him off the hook either. In fact,
Speaker 1: if I were Ruby Central, I would I would be
Speaker 1: giving a serious look to you know, what repercussions can
Speaker 1: you know, come against him. I don't know that I
Speaker 1: necessarily want them to sue him or anything, but you know,
Speaker 1: it's like, hey, look, you know, how do we how
Speaker 1: do we curb this so that other bad actors aren't
Speaker 1: going to do this kind of thing, right, that they'll
Speaker 1: play ball in a way that actually is ethical, because
Speaker 1: I think it was unethical for him to log in
Speaker 1: and do any of the stuff.
Speaker 2: That he did.
Speaker 1: But again, you know, I mean, he said he was
Speaker 1: just trying to change the credentials, and if that's true,
Speaker 1: then maybe he deserves the benefit of the doubt. But
Speaker 1: some of the other things that were done on the servers,
Speaker 1: I just I don't know, but it does look like
Speaker 1: he didn't actually compromise the systems and so anyway, I'm
Speaker 1: going back and forth mostly because I don't know if
Speaker 1: I want them to throw the book at him. But
Speaker 1: I don't think he should get away with it either,
Speaker 1: because I don't think what he did was right. So anyway, whatever,
Speaker 1: whatever the appropriate outcome is there, I don't know if
Speaker 1: I have a proper recommendation, but anyway, so that's where
Speaker 1: things are sitting. I've told a few people at Ruby
Speaker 1: Central at this point that what they need to do
Speaker 1: is they need to just come out and come clean
Speaker 1: on all this stuff, right, just say, hey, look, this
Speaker 1: is where the decisions were made, These are the strains
Speaker 1: we were working under, These are the concerns that we had,
Speaker 1: and so this is what we did, and this is
Speaker 1: the stuff we got right, this is the stuff we
Speaker 1: got wrong, and these are the procedures that we're going
Speaker 1: to put into place to make sure that we don't
Speaker 1: mess it up again. Right, And that way the contributors
Speaker 1: can all be comfortable that they're not going to pull
Speaker 1: anything where they feel like they're getting screwed over. And
Speaker 1: then also you know, feel like the the GEM repositories
Speaker 1: and stuff like that are all in good hands, right
Speaker 1: that hey, look, yeah, we should have changed the credentials
Speaker 1: and rotated the credentials, and.
Speaker 2: So we have a procedure for that now.
Speaker 1: And you know, we just go through the whole list
Speaker 1: of things whenever somebody you know is no longer a contributor,
Speaker 1: right to make sure that only authorized people have access,
Speaker 1: and yeah, just stuff like that, right, and just make
Speaker 1: sure that everybody knows. And then yeah, just do a
Speaker 1: big Maya culpa to say, hey, look, you know, we
Speaker 1: know we messed up, and so this is what we're
Speaker 1: doing to be more transparent so that people don't have
Speaker 1: to be concerned over the infrastructure or over the treatment
Speaker 1: of the contributors because the contributors are working for us
Speaker 1: for free in a lot of cases, or if they
Speaker 1: are getting paid by Ruby Central, I don't think it's
Speaker 1: full time, and he's just part time, and so they've
Speaker 1: got to go figure out other stuff in order to
Speaker 1: make stuff work. And so you know, do right by
Speaker 1: those guys, right. And then on the other side, I
Speaker 1: think we deserve a much better explanation from Andre regarding
Speaker 1: accessing those servers. Honestly, it makes it really hard for
Speaker 1: me to trust him, just because it seems like there
Speaker 1: are some kinds of ulterior motives here, but I don't
Speaker 1: know what they are. I don't know if gem dot
Speaker 1: coop is supposed to have some kind of commercial backing
Speaker 1: or right, so maybe they'll offer like private GEM repositories
Speaker 1: and stuff like that like NPM eventually wound up doing
Speaker 1: or stuff like that, and so anyway, I'd like to
Speaker 1: see a lot of that. And then I think, I think, honestly,
Speaker 1: we need to have an honest discussion in the community
Speaker 1: and just be like, Okay, so at the end of
Speaker 1: the day, what you know, what's our expectation from these
Speaker 1: organizations that are are doing this work and from contributors
Speaker 1: to our our kind of core offerings.
Speaker 2: In the community.
Speaker 1: And then we need to make sure that these folks
Speaker 1: know that these are the expectations we all have. And
Speaker 1: then lastly, when they do stuff, right, I think we
Speaker 1: have to show a little more appreciation.
Speaker 2: Right, So, like I said, you know.
Speaker 1: The work that's been done on Butler and Ruby, gems
Speaker 1: and reegms dot org, right, regardless of you know, some
Speaker 1: of maybe the bad things that we're done. I mean
Speaker 1: I've befit benefited from that work, and so you know,
Speaker 1: a hearty thank you to the people that are doing
Speaker 1: making those gone ttributions. And at the same time, you know,
Speaker 1: I have a friend that kind of messed his life
Speaker 1: up making some poor decisions, and so, you know, as
Speaker 1: he was going through some of the consequences for the
Speaker 1: things that he did, you know, I went to lunch
Speaker 1: with him multiple times. I tried to support him as
Speaker 1: best I could, but I looked at him and I said,
Speaker 1: You're never going to get me to give you a
Speaker 1: pass on what you did right. But at the same time,
Speaker 1: I'm going to support you in moving forward in the
Speaker 1: right way to make things right. And that's kind of
Speaker 1: where I feel like I'm at with these folks. Right
Speaker 1: It's like, look screwed up. I'm not giving you a pass.
Speaker 2: You know.
Speaker 1: I think I can eventually forgive you if you prove
Speaker 1: out that you're going to do it right. And in
Speaker 1: the meantime, you know, let me support you in doing
Speaker 1: the right thing.
Speaker 2: And so.
Speaker 1: Anyway, hopefully that that helps kind of paint a little
Speaker 1: bit more of the picture for people so that you
Speaker 1: all understand, you know, what's going on and where things
Speaker 1: are at. And then yeah, at this point, besides kind
Speaker 1: of supporting people and doing the right thing. I personally,
Speaker 1: I mean, I don't feel like it's picking sides to
Speaker 1: say that I'm sticking with Ruby gms until you know,
Speaker 1: they prove that I can't trust them and then you know,
Speaker 1: the behavior as far as like logging into the servers
Speaker 1: and stuff.
Speaker 2: I just I don't think that using gem dot coop is.
Speaker 1: Necessarily dangerous or you know that that I can't trust
Speaker 1: them to take care because I think they have an
Speaker 1: interest in making that service work and work as.
Speaker 2: Best it can.
Speaker 1: But it does create a trust issue for me with
Speaker 1: with Andre So yeah, some of that would probably have
Speaker 1: be resolved before I'm full throated endorsing, you know, switching
Speaker 1: or adding them as a source in your gem file.
Speaker 1: So anyway, that's that's kind of where things sit for me.
Speaker 1: I'm sure that there are things that you know will
Speaker 1: come out later or that I haven't heard, that are involved.
Speaker 1: There are a lot of other opinions that have come
Speaker 1: out on this stuff. You know, Ara Howard came out
Speaker 1: and you know, it was pretty vocally upset with Ruby Central.
Speaker 1: You know, I've seen other people come out and say
Speaker 1: I'm not taking sides. You know, they kind of took
Speaker 1: the tack that I did and said both sides screwed up.
Speaker 1: I've heard people come out and say both sides screwed up.
Speaker 1: But I still trust Ruby Central and have kind of
Speaker 1: defended them, and I feel like I guess I've kind
Speaker 1: of done that to some degree. But at the end
Speaker 1: of the day, you know, do your homework, go figure
Speaker 1: out what's going on, figure out if this changes anything
Speaker 1: for you, and then let's go and write beautiful code
Speaker 1: that makes us happy. All right, So I'm gonna switch over.
Speaker 1: I'm going to do some picks. So my first pick
Speaker 1: I always pick a game. I might have picked this
Speaker 1: one on the show before. I'm and pick it again
Speaker 1: if so, and if not, then you're hearing about a
Speaker 1: terrific game. It is called infiltrators, and it's not spelled
Speaker 1: like infiltrators the regular word. It's spelled like infiltrators. If
Speaker 1: the last part of the word was spelled like traders,
Speaker 1: like people who betrayed their country and so anyway, so
Speaker 1: it has an extra eye in it. Basically, it is
Speaker 1: a card game and it has essentially it comes with
Speaker 1: a deck of cards, not face cards. It has its
Speaker 1: own cards and they're all I think there are five
Speaker 1: colors numbered two to fifteen. And what you're doing is
Speaker 1: you have traders that are.
Speaker 2: Basically cards. You're trying to figure out what they are,
Speaker 2: and so each player will pick.
Speaker 1: So you have a you have a hand of cards,
Speaker 1: and then you have a card in front of you
Speaker 1: that's face down, and so people can hand you a
Speaker 1: card that you use as a clue to let them
Speaker 1: know what the card.
Speaker 2: Is that's face down in front of you. And so if.
Speaker 1: You put it sideways, it means it has nothing in
Speaker 1: common with the card that's face down, right, So if
Speaker 1: it's a blue two, then it means that the card
Speaker 1: is not blue, and it's not a two, but the
Speaker 1: two has all of its multiples on it, so it
Speaker 1: has two, four, six, eight, ten, twelve, and fourteen on it,
Speaker 1: And it means that your card that's face down is
Speaker 1: not a blue, and it's not a two, four, six, eight, ten,
Speaker 1: twelve or fourteen.
Speaker 2: Right.
Speaker 1: If you hand you the blue fifteen, then it has
Speaker 1: the factors of fifteen on it, and so you know
Speaker 1: that it's not a three or five or a fifteen,
Speaker 1: then you know it's not blue. If it's faced the
Speaker 1: other way, then you know it's a blue or A three,
Speaker 1: a five or fifteen or both, right, But there's only
Speaker 1: one copy of every card, and so if it's the
Speaker 1: blue fifteen, you know it's not the blue fifteen, right,
Speaker 1: does that make sense? So anyway, so you clue until
Speaker 1: you get the cards. There's a prop gun and you
Speaker 1: get so many bullets because you execute the traders. Eventually,
Speaker 1: we just got to the point where we just point
Speaker 1: and say that's the red three, right, and so we
Speaker 1: sometimes people would pick up the gun and use it,
Speaker 1: but I'm.
Speaker 2: Executing, but most of the time people just point.
Speaker 1: So if you don't you don't like the gun in imagery,
Speaker 1: you don't have to have it, and you can use
Speaker 1: other markers instead of bullets. But anyway, there's a little
Speaker 1: dry erase card that has all the numbers and all
Speaker 1: the colors on it, so you can mark off the
Speaker 1: ones you know that.
Speaker 2: It's not.
Speaker 1: Anyway, it's super fun game. It's a deduction game. You're
Speaker 1: working together to you know, expose all the traders. It
Speaker 1: has different levels that you play through kind of like
Speaker 1: what is it the crew?
Speaker 2: So anyway, fun game.
Speaker 1: So yeah, I definitely go check that game out Board
Speaker 1: game Geek has it weighted at two point one one
Speaker 1: I always tell people too is kind of complicated enough
Speaker 1: to be interesting, but simple enough that a casual, not
Speaker 1: hardcore gamer would enjoy it. So I'm going to pick
Speaker 1: infiltrators as that. And then the other thing I wanted
Speaker 1: to just put out there is there are two things
Speaker 1: that have happened over the last month, maybe you know
Speaker 1: since we were recorded last that I just wanted to
Speaker 1: talk about briefly. So one of them is the hostages
Speaker 1: in Israel were returned. And I get that there are
Speaker 1: people that have feelings about the whole conflict in Israel
Speaker 1: right on both sides, and I'm not going to wait
Speaker 1: into that. I have my own opinions on it, but
Speaker 1: you know, the hostages look like they were mistreated. It
Speaker 1: is terrific that they get to come home to their families,
Speaker 1: and it looks like the killing has stopped for a while,
Speaker 1: which is also a good thing, regardless of which side
Speaker 1: you come down on. And so I am going to
Speaker 1: pick peace because I just I'm all for it. I've
Speaker 1: seen some people saying we want peace, but we don't
Speaker 1: want Donald Trump to negotiate it. I frankly don't care
Speaker 1: who negotiates it as long as we get it right
Speaker 1: and as long as we can make it last. So
Speaker 1: you know, if it raises Donald Trump's status, fine, if
Speaker 1: it raises somebody else's status, right, if it's Barack Obama
Speaker 1: over there negotiating it, and that's what's effective.
Speaker 2: Right.
Speaker 1: We're not killing people as much anymore so, which is
Speaker 1: a good thing. We got hostages back, which is a
Speaker 1: good thing. And hopefully the bodies that the other hostages
Speaker 1: come back and those families can have closure.
Speaker 2: It's a good thing. And then the other one.
Speaker 1: And this affected me much more deeply, and a lot
Speaker 1: of it's because it occurred here at Utah Valley University,
Speaker 1: which is like fifteen minutes away from where I'm sitting
Speaker 1: in my house. Maybe twenty minutes depends on traffic, I guess.
Speaker 1: And that was the Charlie Kirk assassination. And you know,
Speaker 1: this kind of speaks a little bit to what we're
Speaker 1: talking about here, except you know, nobody's getting killed over
Speaker 1: Ruby Jims.
Speaker 2: But we go out a lot.
Speaker 1: Of times and we just demonize the other people on
Speaker 1: the other side, and I think a lot of that
Speaker 1: rhetoric was what led to somebody shooting him here.
Speaker 2: And it's it's sad.
Speaker 1: Right, It's like for me, it's hey, look, you know,
Speaker 1: and I agree with Charlie on a lot of the
Speaker 1: things that he.
Speaker 2: Talked about, right, But at the end of the day.
Speaker 1: We need to be good to each other. We need
Speaker 1: to understand each other. Right, this kind of violence, celebrating
Speaker 1: that somebody got killed, you know, the way that we
Speaker 1: treat each other sometimes because you're on the other side
Speaker 1: of the political aisle, it's not okay. And I think
Speaker 1: a lot of times if we just go talk to
Speaker 1: people and understand where they're coming from and what they're
Speaker 1: worried about and what they're dealing with and all of
Speaker 1: that stuff.
Speaker 2: Things get a whole lot better.
Speaker 1: And sure, you know, maybe I don't come around to
Speaker 1: the other person's way of thinking, but at least I
Speaker 1: can understand them, right, at least I can think about
Speaker 1: it and say, Okay, you know, do they have a
Speaker 1: good argument or do they not have a good argument?
Speaker 2: Why?
Speaker 1: And then maybe I can argue my understanding better next time,
Speaker 1: or maybe I change my mind, or maybe I just
Speaker 1: change it a little bit. Right, It's like, no, they're
Speaker 1: generally not right about this stuff, but these couple of
Speaker 1: points tell me that, yeah, maybe there's a little bit
Speaker 1: more nuance here or there within within this space. And
Speaker 1: I think if we can understand each other that way,
Speaker 1: you know, maybe we can heal. I hear too about
Speaker 1: like people's families being porn apart, because you know, people
Speaker 1: do or don't like Donald Trump or Kamala Harris or
Speaker 1: whoever else, and you know, it's like, hey, you know,
Speaker 1: there are so many more important things, so many more
Speaker 1: important things that we have in common. And so I
Speaker 1: really am just I guess I'm picking piece again, but
Speaker 1: mostly I just I want I want people to understand,
Speaker 1: come to understand each other, right, show some respect to
Speaker 1: each other, be good to each other, and anyway, So yeah,
Speaker 1: sorry to end on kind of a low note, but yeah,
Speaker 1: hopefully this helps some folks get some context on this stuff.
Speaker 2: I guess one last pick.
Speaker 1: So I am getting things together on top end devs
Speaker 1: so that we can relaunch Ruby Geniuses. I had Ruby
Speaker 1: Geniuses running before and it kind of fizzled out a
Speaker 1: little bit, so I'm bringing it back.
Speaker 2: I want to be doing the Ruby book club.
Speaker 1: I try to do like a general programmer book club,
Speaker 1: and I just figured out that that's not really I mean,
Speaker 1: we read some interesting stuff, but I think they're I
Speaker 1: think doing a Ruby focused one is a much better
Speaker 1: approach because then we can get into stuff that's relevant
Speaker 1: to stuff that you're working on at work. And then
Speaker 1: I'm going to be putting out videos for the Ruby
Speaker 1: tip of the day. I'm going to be putting out
Speaker 1: a series kind of like Go Rails or Rails casts
Speaker 1: or Drifting Ruby that is essentially AI on Ruby. And
Speaker 1: I'd like to get some series going on just Ruby
Speaker 1: or just rails right, or some blend. And so if
Speaker 1: you're interested in authoring something like that, I am actually
Speaker 1: I'm happy to talk through some of that with you.
Speaker 1: And then I'm also looking at putting courses and stuff
Speaker 1: up on top end devs. I kind of want to
Speaker 1: make it the Netflix for programmers, and so then you
Speaker 1: can come in and instead of like horror and comedy
Speaker 1: and you know whatever, you can come in and it's Ruby, JavaScript,
Speaker 1: you know, DevOps, infrastructure's code, right, and so then you
Speaker 1: can kind of pick your topic and then you can
Speaker 1: find whatever it is that you're looking for, right, And
Speaker 1: so I'm working through that and I'm looking for authors,
Speaker 1: So if you want to author a series on that,
Speaker 1: or if you just listen to Ruby rogues and you
Speaker 1: mostly write go or something like that. I'm looking at
Speaker 1: pulling some stuff together and some of those other areas
Speaker 1: like Go, React, JavaScript.
Speaker 2: And and things like that.
Speaker 1: So and I really want to kind of become the
Speaker 1: central place for people to come to get up to
Speaker 1: date information on how to build AI and you use
Speaker 1: AI tools in development. So anyway, that's what I'm kind
Speaker 1: of heading toward here. Maybe I'll give like the full
Speaker 1: vision and a little bit of the history on that,
Speaker 1: but anyway, in the meantime, be good to each other.
Speaker 1: You know, we'll get past this as a community and
Speaker 1: until next time acts out