Brett Cannon (our unofficial ambassador to the Python community) is here to help alleviate our pip install anxiety. Along the way, we ask him about Python 4, removing the GIL, what he thinks about Chris Lattner’s Mojo project, Rust in the Python world & way more (of course).
Fly.io – The home of Changelog.com — Deploy your apps and databases close to your users. In minutes you can run your Ruby, Go, Node, Deno, Python, or Elixir app (and databases!) all over the world. No ops required. Learn more at fly.io/changelog and check out the speedrun in their docs.
Typesense – Lightning fast, globally distributed Search-as-a-Service that runs in memory. You iterlly can’t get any faster!
|Chapter Number||Chapter Start Time||Chapter Title|
|2||00:38||Tall, Snarky Canadian|
|3||01:54||Tall people club|
|4||04:34||On winning the weather|
|5||05:40||Listen to this & blog about it|
|6||08:48||In response to episode #526|
|7||10:23||Default Python things|
|8||17:39||Arch Linux happened|
|9||20:28||Timing the Python 3 transition|
|10||21:18||Thank God for Perl 6!|
|11||22:48||Perl 6 a.k.a. Raku|
|12||23:42||I'm no Perl Monger|
|13||24:43||Pythonistas thank you|
|14||25:40||Jerod likes Python!|
|15||26:24||pipx is the way|
|16||30:43||Will there be a Python 4?|
|17||33:13||Python's release cycle|
|18||36:32||Removing the GIL|
|19||41:59||Brett's time on the Steering Council|
|20||43:33||Good Python pods|
|21||44:27||A rolling council|
|22||49:37||Every pod must have an AI chapter|
|23||54:06||Really sorry for winning|
|24||55:17||Google uses it (good)|
|25||56:35||Google uses it (bad)|
|26||57:28||The ultimate Tic-Tac-Toe diversion|
|27||1:02:05||Textual takes us back to packaging|
|28||1:07:19||Brett's take on Mojo|
|29||1:15:12||Rust tooling for Python|
|30||1:19:05||The key word is "tool"|
|32||1:23:40||Canadian BBQ & ice cream|
|33||1:28:22||Brett goes to Austin?|
|35||1:30:08||Coming up next|
Play the audio to listen along while you enjoy the transcript. 🎧
So we’re joined by a tall, snarky Canadian. His name is Brett. What’s up, Brett?
Hey, guys. How are you?
Very good. I like to call you “tall, snarky Canadian”, because it feels almost like – not an insult, but it almost feels like edgy, except for you call yourself that; it’s your website. So I have the freedom. I can just call you that and I know you’re not going to be mad about it.
Correct. I’m trying to at least be honest about who I am.
You have no problem being tall, being snarky, or being Canadian. You just own all three.
I tried my best.
You have to own the negatives about you, I suppose.
Yeah… Well, and it’s a fun little dichotomy/contradiction. People typically do not think of most Canadians as being snarky… So it’s a slight ode to having grown up in the States, even though I am Canadian.
So you have a bit of snark.
Yeah… And my wife has pointed it out over the years… “You can cut the snark down a bit.”
He’s like “I can’t. It’s on my website. I have to embody my tagline.” Adam and I knew you were snarky, and we knew you’re Canadian, but… I don’t know, I forgot, or I never knew exactly how tall you were until we just met you for the first time in real life, and you are tall, I can confirm it.
Yeah. I’m 198 centimeters, or six foot six inches in US customary.
That is – that’s pretty tall.
Funny enough, a friend of mine, Thomas Wouters, he is one of the core developers on Python - he lives in Amsterdam, and he was telling us a story the other day about how there’s actually a tall person club in the Netherlands, and to be a member you have to actually be 200 centimeters, because they’re tall in the Netherlands.
Wow. That is tall.
So I’m just above – I’m at the upper echelons above average, at least there, so… It’s all cultural relative where you actually are whether I’m that tall, really…
What kind of a club is just like tall people only? Can’t we rally around something a little bit more in our control, you know…?
Do you think they’re like “Hey, can you reach that for me? Can you get that up there for me?”
The bar is just super-high…
The taller of the talls…
I know how to change many different types of light bulbs now, so that’s handy… And how to kill bugs, and get cobwebs in corners… I will say flying is not pleasant, and finding a car that I fit in is a real pain. Actually –
You drive a Tesla though.
Well, yes, but that’s because I’ve found a car that I –
You barely fit in that.
I do fit in that. But for instance, when we’re looking at EVs - -because we actually had a VW, but we had to give it up as part of Diesel gate…
We went around and looked, and–
So many gates.
Yeah, so many gates… I actually could not get into a Nissan Leaf. Like, literally could not get my legs into the car.
I can imagine watching that debacle… You trying to get into one of those…
“So do you want to buy this car?” “Oh, I guess not. I can’t fit in it.”
Yeah. I mean, thank goodness for North American and German manufacturers making cars for taller people.
Good for them. Gotta be inclusive of you tall, snarky folks…
You know who else is tall, which I’ve found out when we were in Vancouver? By the way, for our listener, I mentioned we met Brett for the first time a couple of weeks ago, months ago… I don’t know, years ago. It was recently… Time is a continuum. And that’s how we realized - yes, indeed, he is tall. You know who else I met for the first time and I’ve known for years? Adam, you as well… Was Feross Aboukhadijeh from our JS Party podcast. He is also tall.
…and it was a surprise, because he doesn’t put tall wizard – what does he call himself on his website?
Yeah, there it is; the mad scientist of open source. So that was a total surprise…
And then Beyang Liu. He was quite tall as well.
Why is everybody so tall?
The funny thing for me is that people forget. It’s not like it changed… Like, when I go to PyCon US every year, or PyCascades.
They’re all like “Wow! You’re tall!”
Yeah. Literally, every year, people go, “Wow, I forgot how tall you are.” It’s like, I’ve known you for a decade or more. How do you forget this?
It’s like Canadians and weather though, man… Like, you’ve got to talk about the weather when you meet for at least five minutes… That’s just how it works. You’ve got to forget how tall somebody was.
Is that a Canadian thing?
Talking about the weather? Yes, it is.
We talk about the weather here in the States quite a bit.
I mean, they will have a good 10 or 15 – and then we’ll be excited about it.
Mm-hm. Well, it’s a national competition… Yeah, who’s got the worst weather that day?
Oh, the worst. So it’s like golf.
Or the best, depending on where you’re coming from. Like, “Oh, I want to complain about my weather, so I get to say I have the worst day.”
Right. And whoever wins, it’s like “Well, okay, fine… You’ve got the worst weather there.”
Or “I’m sorry, I can’t brag about how good our weather is here today.” It really depends on which angle you want to win on that day.
Because you’d just be bragging and rubbing it in…
See, that part of it I appreciate… Like, just the opportunity to win something in conversation… I can appreciate that aspect of Canadians, I suppose… It’s like “How can I win this?” I’m always asking myself that question.
Like, when I’m going to pip-install something, how can I win this pip-install? How’s that for professional transition? Do we want to go there yet?
Go for it. It’s up to you.
[05:40] So the last time - this might become confusing, because we just had Mat Ryer on Changelog & Friends episode four… [“Mat Depends. Coming soon, from Changelog.”] But months ago, we had him on the Changelog… It was a Changelog & Friends prototype, episode 526… And I only have that memorized because I just said it last week when we had him on this show… And I was confessing to Mat and Adam my pip-install anxiety, mostly because a lot of the new tools, specifically it was Whisper, I believe… But a lot of the new fancy LLM/AI things are Python things; which as a non-Python regular user, it drags me back into the ecosystem to install these things and handle these things. And so I was confessing to them that I have this anxiety with pip specifically; not only with pip, I also have this with Ruby Gems, and I have this with npm sometimes as well, where it’s just like “I sure hope nothing goes wrong here… Because if it does, I’m going to switch tasks and not try to fix it, or not have a good day, one or the other.” And Brett wasn’t listening, because he listens on a six-month delay… But when we saw Brett, we said, “Hey, you have to listen to this, because I was a dissing on Python…” I brought it up a couple of times, and Adam was like “Jerod, you’re really anti-Python”, and I was like “No, I’m not. I just have this anxiety.”
And so Brett being our resident ambassador to the Python community, we should mention for those who don’t know you, a member of Python’s steering committee… Is what it’s called, Steering Committee?
Steering Council, but yes. Close enough.
Steering Council. What’s the difference between a council and a committee? You just pick which one –
I think so.
Yeah. And so you’re our ambassador of the Pythons, pretty much… Is that right, Adam?
I’d say so, yeah.
Apologise to the community on that one.
[laughs] So if you don’t think Python is well represented here on Changelog shows, email Brett… But he might give you some snark on the way back. And so we asked you to listen to it, basically, because we feel like if we’re gonna diss on Python for a while, we should give you all a chance to respond… And you responded in kind. Actually, I told you to respond in kind. I was like “Listen to this, and blog about it.”
Yeah. You said, “Have you listened to this yet?” and you both joked “Probably not”, knowing full well that it takes me a while to get through podcast episodes, since I don’t have a commute anymore… And you said, “Yeah, you want to go read this episode.” I said “Why?” He said, “Oh, I said some things”, basically…
“I said some things…”
It’s like a diss track.
I think Adam – yeah, you basically said “You might want to listen to that. Jerod said some things about Python in there.” It’s like “Why? What did he say?” “Just go have a listen.” And then I read the transcripts, and like “Oh…” And then I went and listened to it, so I can make sure I heard the tone appropriately… I’m like “Oh, okay…” And then that’s when I messaged you two and said, “Okay, you asked me listen to this… Where do you want your reply?”
And then Jerod said, “Just write a blog post.” And so I did.
Well, you’re a blogger… I mean, you write quite often, so I felt like that was a good place to put that down… And then I thought, “Well, I’ll write a response”, and then I was like “But I’m not a blogger.” So what I am is a podcaster, so let’s just talk about it. That’s a lot less strenuous for me. So we have your posts here, it’s in response to the Changelog Number 526… And if I might just summarize your point, and we can open it up from there - I think what you’re saying is “You don’t have a virtual environment, Jerod, and you should. And so this is why you have anxiety, because you’re afraid that it’s going to blow up your system in some weird way.” Which is true. I’m afraid I’m gonna change things in some way that I won’t know how to back out of. “And if you had virtual environments, you wouldn’t have this anxiety.” Is that pretty much your argument?
Yeah, it was basically that. I know people historically, especially from a Unix-based perspective, whether that’s Linux, or Mac, or whatever… Enough tooling now is written in Python that people have historically been scared about basically breaking their Python install, because that might break some OS-level install… I will say, Linux distributors have gotten way better about that. For instance, Fedora now has their own private copy of Python for their use, that you don’t get direct access to… So when you install Python, you get your own copy. So if you screw that up, it’s not gonna break your system. I don’t think Debian and Ubuntu thus have done the same thing… So that’s still a potential risk.
But yeah, basically I said in that post “Virtual environments are the tool that the Python community has to isolate things”, and I also took a dig at Adam for saying “I wish everyone would just make it available in my Linux distro”, and I pointed out how hard that actually is… But yeah, it was basically - yeah, you want virtual environments, and pointed out some tooling such as Pipx, which we can talk about, as ways to do that in a much easier fashion, without having to really be immersed in the Python community.
[10:22] How do people come to Python? So I think some of this might just be like marketing, in the broad sense of the term, like marketing problems, because as a person coming to a tool and an ecosystem, not necessarily wanting to write Python, but use Python, I don’t have information about this kind of stuff. Or maybe I do and I’m not looking in the right places, but mostly I’m like “Okay, I know that Python’s installed on my Mac out of the box.” I don’t know if it’s Python –
It’s actually not installed out of the box anymore.
Yup. They took it out. I think Ventura was the –
Why’d they do that?
They actually took out all the languages, I think.
Dead language? Dying language?
[laughs] They’re done with it.
Ruby’s still there, though… Which Python? Python not found. Which Ruby? User Bin Ruby.
Oh, User Bin. That’s not Homebrew…
The gauntlet’s thrown.
I was gonna have the snarky humblebrag that, well, if you’re young enough these days, you know Python because it’s been taught to you in schools, so everyone knows Python… But no, actually, I don’t know why they took it out specifically. There was a move at some point at Apple to try to have less stuff directly in the box, and stuff that people rely on, because they used to – I believe they were told it was used to generate the cover letters for the fax app way back when…
[laughs] The fax app…
That dates it…
There was some odd thing… I don’t know what they can use it for, but I think their use of it stopped, and so they just took it out, and they just didn’t need it anymore.
Okay. So maybe I go to python.org… I know what I did, because mine is Opt Homebrew Bin Python 3… So I know what I did, was like brew-install Python.
That’s what I do, personally.
Where do people who don’t know what to do go? Do they go to python.org? Do they google “how to install Python”? What do you think people are finding? Like, where would I get this virtual env information from? Is it on the Python website, or is it like the happy path?
Yeah, see, that’s the tricky bit… And something we’ve actually run into in my day job - because I’m the dev manager for the Python extension for VS Code. And one of the things we run into is where the gaps of knowledge are in the community. And we’ve discovered there’s kind of two camps when people are taught Python; even just explicitly taught, not people who just kind of fall into it because, as Jerod said, “I want this tool that happens to be written in Python. What do we need to do to get it?” versus “Oh, I’m learning Python, because I’m going to actually use the language.” And even when you’re taught, there’s a gap. Some people don’t like teaching virtual environments, because it’s kind of this extra step, so they want to start simple and not go there, and some people go “Well, you’re pretty much going to need this the instant you want to install anything, so we should just teach you this upfront, and chances are you’re going to want to install something at some point from PyPi, the Python Package Index, or somewhere. We should just teach you up front.”
And to be clear, I should clarify exactly what a virtual environment is. And kind of why this gets a little tricky - thanks historically to Debian, and thus Ubuntu. So a virtual environment is kind of what it sounds like - it’s an environment that’s virtual, which… I know, duh. But it basically creates a directory… It has a very specific directory structure. And I do have a whole blog post that explains how all this works, and it’s very straightforward. But it basically creates kind of a personal bin and lib directory on Unix. It’s scripts, and I believe just site packages on Windows… And it’s basically a directory where Python recognizes that it’s being run from such a directory, because there’s a configuration file, and then Python just goes “Oh, you’re running from a virtual environment. I won’t put anything you installed globally on sys.path”, which is the search path for stuff in Python. And if you’re using installers like Pip, they will recognize that you’re doing it in a virtual environment, and go “Okay, I should install into the virtual environment, not into where the physical copy is.” Because on Unix, they’re all symlinks. And that’s basically it. It’s not a complicated mechanism.
[14:22] If you look in the code, it literally just goes “Okay, from where the binary is on that first argument to sys.argv, if I go up a directory, is there a file called pyvenv.cfg? If the answer is yes, I’m in a virtual environment. If there isn’t, I’m not.” That’s it. The mechanism’s really straightforward and simple. But the key thing there is that mention of if the installers in Python notice “I’m in a virtual environment”, the tools all install into that virtual environment; so it gets put into that little subdirectory you created for your project, and thus it isolates it. So that environment becomes isolated from everything else, which just makes it easier for reproducibility, but it also means you won’t screw up your system install because you’re not gonna install that global directory in your user bin, or user lib, or whatever, wherever you happen to have Python installed. So it keeps that all kind of cleared out. The problem is a) knowing about it, and b) making sure it’s even available.
For instance, Debian historically has actually not shipped the module you typically use to do this. So in the standard library for Python, there’s a module called venv. And Debian does not ship it by default. Now, their policy on Debian is you do not package multiple apps together, because venv has a command line interface. Because usually, the way you do this is you go like ‘python -m venv’ and then a name of some subdirectory. Like, .venv is the kind of convention, but you can call it whatever you want. That’ll create the virtual environment in that directory. Because it has a CLI, Debian considers it its own app, and they ship it separately, and it’s not part of the default install. So if you’d go “sudo apt-get install python3” you get Python, but you don’t get venv. You have to do a separate python3-venv install. And you also don’t get Pip, so that’s a separate python-pip install, which is an extra stumbling block for people.
These are things you need though. Why would they not include that by default? It’s like, they’re kind of crucial to Python; you want to pip-install things, you want to prescribe this venv thing that you’ve got to use to be protected from botching your system…
Yeah. Is this addressed in– PEP 8 tells us why we can’t do this, or something.
Good one, Jerod.
So as I said, it’s Debian policy, the way they package things. The Python Steering Council actually had a meeting with the Debian equivalent; I don’t know if they call themselves the steering council, or committee, or the word they choose…
It’s actually a committee council. They are a committee around a council, and then another committee inside that.
There you go. Circles in circles.
Oh, man. That’s bureaucracy right there.
Anyway, we did meet with them, and we had a conversation with them. They were very nice and friendly, and totally happy to talk with us, but they said “Look, this is the Debian policy, that we view this as an app because of the way it looks and it’s structured, and we don’t ship multiple apps in a single apt package… So we’re making it separate.” Luckily, in the next release of Debian, whenever that comes out - because I know they have multi-year cycles - there’s going to be, I believe, python3-full virtual package that will install all that at once. But that is not out yet, that is not available yet, and all those instructions on the internet will have to get updated to say “install python3-full” when you’re on Debian, which unfortunately trickles directly into Ubuntu, and that’s where a lot of Linux people get tripped up.
But other places, like Fedora and stuff, do the thing you’d expect, where if you just install Python 3, it ships with all that stuff in the box.
So this is the issue right here, at least for me, to some degree… So I’ve gotta backtrack. So I said “Which Python?”, not “Which python 3?” So I did install Python 3 via Homebrew, and I also have a version of my user bin folder that’s Python 3. I didn’t say “Which Python 3”, I said “Which Python?”
Oh, so you do have a user bin Python?
Yes. I’m correcting that. It is installed, by default.
Yes, I did.
I think Brett’s right, that neither one of those come with the – he was ringing a bell when he was starting to say that at one point they took all those things out. And so I don’t have either of those things.
No? If you ls your user bin folder, I bet you’ll find a Python 3 in there.
Well, let me make sure I’m 100% true. Oh, dagnabbit, you’re right.
Mm-hm… So it’s there. Yeah. So that’s kind of the rub, to some degree. If you’re not steeped in Python daily, you forget to add the three, and then you’re searching for just Python. [laughter]
That sounds silly, but I’m with him, because I had to – even with Homebrew, I had to remember “Oh, it was Python 3, it’s not the word Python.” Now, that’s a Homebrew thing, right? Or is that like the way you guys do it now?
What, Python 3, with no Python?
No. Like, the Python community, if I type Python, it doesn’t show up. I have to type Python 3.
This is like upgrade versus update, Jerod.
There’s a whole PEP about that.
There’s a whole PEP about that. I think we’ve just found our show title. “There’s a whole PEP about that.” [laughs]
So actually, what happened was – so during the Python 2 to 3 transition, which is now old enough history that I meet plenty of people who don’t know what the heck that even was… Yeah, they don’t even know what happened…
That makes me feel old…
Yeah… Hey, try being a part of that whole transition, and making that actually come to fruition… Yeah, I feel you.
I don’t know; I might burn out if I did that. I might burn out.
Oh, that could be a whole separate episode. Yeah, so what happened was is Arch Linux actually decided at some point that – because they went Python 3 only earlier than most, they decided, “Yeah, maybe we should relink, or rebind (or whatever term you want to use). Point Python as a command, symlink it to Python 3, and have that be what Python points out.”
And the problem was it caused a huge amount of confusion, because at that point the transition in the community hadn’t happened yet… And because we just didn’t have the foresight to make it a Python 2, it led to a lot of confusion. So we wrote a whole about it, and just tried to give guidance to Linux distros, like “Okay, you’re the ones who are kind of doing this, because people don’t get it from an installer typically on Linux. You usually just have the system install, which has obviously changed it. But at that point it had happened, so we said, “Okay, here’s what you should do… You should have Python 3. You should only do it to Python probably way in the future, when there’s zero potential confusion…”
Wow, what a headache. So this whole Python 2 to Python 3 transition - how long do you think it took? Obviously, there’s no hard edges from Python 3 to Python 2. Let’s say like the 80% rule, to have most people moved over… Because it seems like it’s in the past now. But when did it become past?
So Python 3.0 came out, I believe, December of 2008.
Okay. So there’s one edge.
About a decade. So yeah, I would say roughly there. I’d have to look up numbers as to when, but yeah, about 2018, I would say, seems fair, for roughly that. I think it was maybe 2015-2016 when we maybe hit 50%. There was a really key tipping point where it kind of went fairly fast after that. But it did take quite a while to really hit that point.
So this whole time, as a member of the Python community, were you just thanking God that Perl 6 was a thing? Because isn’t that like the only other even more notorious version problem?
[laughs] No, although I did watch, and I did feel bad for them, that they were having to go through this exact same thing.
Yeah, it’s no fun, I’m sure.
The key thing for us was, while the breakage was in hindsight unfortunate, and things went the way they went, we did continue to improve the language and add features that tempted people more and more to want to switch, and that was what saved us, was because it was not a wholesale rethink, like Perl 6 seemed to feel like, from the outside - I’m not a Perl developer myself, but it seemed like they kind of went off the deep end a bit more like “Okay, this is really our chance to reset things”, while ours was more like “We just need to make sure we have Unicode everywhere”, because languages are a thing, more of a change than that.
[22:14] So while it wasn’t – it was still enough to break people’s code, it wasn’t enough to go “Oh my God, the transition is huge, and it’s a lot of work, and all that”, and we had to throw out a lot of code and redo our VM… We were able to just take the CPython virtual machine from Python 2 to Python 3 and just change it to upgrade it. We didn’t have to do a wholesale rewrite, so we didn’t end up with Perl 6’s Pugs was like the one written in Haskell, and Parrot, and all the other VMs that came about because of that… Because it wasn’t a wholesale redo, it made our lives way easier in terms of maintaining it.
I think they ended up just renaming it… I think Perl 6 was so different that they actually eventually renamed it to something else. Let me confirm that…
Well, if we have to, we can call it Anaconda.
My anaconda don’t want none. You know what I’m saying…?
You do know that’s an actual tool in the Python community, right?
I bet it is.
They call it Conda. Well, I think at this point almost every word is a tool. Raku. Raku is a member of the Perl family of languages. Formerly known as Perl six; it was renamed in October 2019…
There you go.
…and it introduces elements of many modern and historical languages. Not compatible with Perl… Yeah, so this is the design process for Raku. Well, yeah, in the year 2000. So Perl 6 renamed Raku, and if you’re gonna depart that much from your other version, you might as well just give it a new name and start fresh… Like calling it Mojo, you know?
Maybe just call it Mojo.
Is that much changed, Jerod, in your opinion? Is that a backwards-compatible change? How would you describe that change? Is it drastic in terms of like –
I’m with Brad, I’m not a Perl monger, as they call themselves…
Is that what they call themselves?
They do, Perl mongers.
I think so…
They used to, at least.
Confirm that too, Jerod…
Yeah, let me confirm that. I’m just second-guessing myself left and right here, but I think I’m correct on both accounts. Perl mongers. The reason I know that is because there’s a local Perl mongers group in Omaha. Yeah, Perl mongers. It’s an international association of user groups of the Perl programming language. So my history does serve well. But I’m no Perl monger, so I don’t know. I just read the news and followed along. I remember a lot of hemming and hawing about Perl 6, and it’s just like never been – either not ready, or just way too dramatic… There was a point where in 2019 they renamed it; I mean, that’s how much different it was. So it was not like we’re adding Unicode support and maybe that will break the way you do strings right now. It’s like, everything’s different. It’s a new version of Perl.
And not called Perl anymore.
It’s like – is it? I don’t know.
At least that version…
Yeah. Were you there then for this transition from Python 2 to Python 3, like you were a part of the steering committee? What was your role in the community at that point?
That was pre-committee, right? Pre-council.
Yes. The steering council didn’t exist yet. It hadn’t come about until 2018, when Guido returned. But I was a core dev; I was involved – I actually was co-author on PEP 3100, which was the miscellaneous PEP that collected all of the various little changes we were going to make that were not big enough to need their own Python enhancement proposal to go through… So I was directly involved. I was part of the competition, implicitly, who can delete more code out of the standard library that was not going to make it to Python 3.
That had to be fun.
I was around and actively involved, and I will say, I am part of the reason Python 3 happened.
Take the blame, or thanks, depending on your viewpoint of how it turned out.
Pythonistas around the world thank you.
Or hate me. It depends on how long you’ve been in the community.
Okay. Well, I don’t know much about Python 2. I know that I now have a reputation of dissing on Python, because Adam gave it to me… But I’m a big fan of the language. I really am. I used it for six months, almost full-time, and really enjoyed that time period. I like significant whitespace. I think it has lots of the stuff that I look for in a language built into it, especially probably over the years those things got built in… And I have to read some Python code every once in a while, just to do stuff, and whenever I read it, I’m like “Yeah, this makes total sense.” I mean, I think it’s solid.
[26:09] Well, to be clear, we weren’t dissing on Python itself, we were dissing on the pip-install process.
It’s just the pip thing.
They’re very specific… Because you don’t know where it’s gonna end up, if it’s gonna botch something, and how it works… And it’s just because you’re unfamiliar; you don’t do it daily, so…
It is. It’s mostly that.
Well, there’s a couple of aspects to that. So one is - you’re right, there’s a lack of familiarity with that key bit of technology, the virtual environments… Which, I will say there is a tool that is available called Pipx. And what Pipx was designed to do was specifically to help you install command line tools from Python Package Index. So what you do with Pipx - and you can install this with apt-get, or DNF, Homebrew, or whatever you want. It’s designed to be packaged independently on its own. You can do a Pipx install whatever, and it actually creates a virtual environment in your home directory for that tool, and then as long as you put that bin directory on your path, that’s the easiest way probably to get tools on your path that are not already repackaged by your package manager, whether it’s Homebrew, or apt-get, or whatever. If someone has a Python app that you want, that’s not packaged that way, Pipx can always do it.
The other nice thing it has is it has a pipx run command. You could do “pipx run whisper”, I think, Jerod, you said the tool was that got you down this rabbit hole… What that does is it actually will download it and install it into your temp directory, and then run it. And then it continually checks there if it’s there, and if your system clears it out, it just downloads and reinstalls it again, which makes it a really kind of nice way to do a ephemeral installs. Like, I just need this tool every once in a while. I don’t need to install it now, and I don’t want to think about upgrading it later… So like if it’s an occasional thing. Pipx run whatever quickly does the install, get to use it… As I said, it gets cache in your temp directory, and then if you forget about it and your system cleans it out - no big deal, it installs it again… And that way, you kind of always implicitly get a fresh version that you can just use. Versus “Oh, I installed it permanently. I’ve gotta remember to upgrade it on occasion.” Like, I personally just always use pipx run with any kind of tool that I need to use in the Python community, because it’s just fast and easy, and I don’t have to think about “Did I update this recently? Or is this like six months old, and I’m actually using an old version?” Because, you know, with CLIs there’s no API to tell you “Ya broke!” It just might have some weird bug. So that’s how I typically do it.
Very cool. Yeah, we’ll link up this Pipx. This looks like exactly what I need to just not have any more anxiety; just brew-install Pipx, and just go from there.
Yeah. And I think as a community - I think I mentioned this in the blog post - it’s just something we just haven’t gotten in the habit of documenting for those who aren’t in Python. Once again, humblebrag - we take it for granted there are people out there who don’t use Python regularly… Python’s everywhere at this point. Like, when kids are being taught in school - I mean, a) it blows my mind to this day still, but also just, you’ve got to remember, people don’t know this stuff. You’re not necessarily in this world. You might be doing Elixir every day, and you might have that little random Python script, and you might still be using Python, but just because you need that little Python script to do your thing does not mean you’ve been told “Here are the best practices of how to do things.” And unfortunately, we just don’t have that habit, especially when it’s your community… Like, “Oh, I’m a Python developer, I’m writing the Python tools. I’ll put this little blurb that everyone puts, and use pip-install whatever”, or python-mpip technically is what you should do… But you don’t stop and take yourself out of the space of “Okay, well, what if I’m not a Python developer, but I still want this tool? What’s the easiest way I can tell people to do this?” It’s either you put in all that time and effort to get it into the package managers, which is a lot, because every Linux distro has its own package manager, and their own rules for getting stuff upstream, right? This was the thing I pointed towards Jerod in the blog post, like, how do you get into apps? How do you get into DNF? How do you get an AUR for Arch? How do you get into FreeBSD ports? Getting into Homebrew? That’s not even covering Scoop and Chocolatey on Windows. And that’s just off the top of my head. That’s not even covering all the other Linux distros that have their own way.
[30:05] So if you don’t want to put in all that effort, what’s the easiest way to do it? And I would argue Pipx is pretty close to it, because that has been widely packaged and made available to people as a single install, without having to know how Python works. And it’s there, it’s just - I don’t think the community has that habit yet, of just going “Oh, yeah, if you don’t know Python, if Pip’s not a thing for you, go install Pipx from your package manager for your OS, and use that thing to run this tool. And it’ll just do the right thing.” And we just need to get that habit.
Yeah. Well, thankfully, you’ve got that blog post out there pointing to Pipx, because that is helpful. Pip run, easily doing that, or even the zip files that you mentioned…
Pipx run, to be very clear.
Sorry. Pipx run. What happens when we have to deal with Python 4?
I don’t know if there’ll ever be a Python four.
So that’s actually part of the trick here, was the Python 2 to 3 transition was so burdensome, and so basically scarring for the community, on the core team we’ve actually talked about potentially never doing a Python 4… Just because we never want to do what we did with Python 2 to 3. When we did that - I don’t want to say it was hubris. I know some people accuse us of that. But it was honestly - up to that point, the Python committee just came along with the core team when we made changes in the language, and we thought people would see why we were doing what we did for Python 3, and they would just come along… And yes, it took a little longer than normal, but at that point historically, most people upgraded within two years at worst to the latest version of Python. They’d basically skip maybe a version; 2 to 3 years they’d be upgrading and do it. This time - no. Too much work to upgrade. People said, “No, you’re not giving me anything new here. I don’t need Unicode. Why don’t we need Unicode? ASCII is great”, all this stuff. It was a real slog. And everyone, even not from the Python community, now knows about the Python 2 to 3 transition. There is like folklore around this at this point.
Yeah, it’s notorious.
Yeah, it’s notorious. So if we go from 3 to 4, are people going to assume it’s the same thing? Like “Oh, my God, they’re doing it again.”
It’d be an uphill battle.
“They’re doing a whole other major version upgrade.” Even if we didn’t mean to; even if we had a clear transition plan planned out, even within the community. Everyone outside the community would go like “Oh, my God, what the hell are they doing?”
So we’ve talked about like, yeah, maybe we never do a 4. Or what would take us to do a 4? I mean, there’s both camps. It’s like “Maybe we should do a 4 and make it completely innocuous, and take away that whole Mystique, and start doing Python 5, 6, 7”, or switch to a date-based one, because now we do annual releases… Like, switch to Python 23 for Python 2023… Once again, totally throw with the major number of versions, because –
You’re back to doing the Windows stuff again. Windows 95… Come on now.
Yeah, exactly. Right. But it’s one of these things… People don’t understand what the numbers mean, because Python predates semver. So since we don’t really have semantic versioning with those numbers, people don’t really have that proper Association… Because some people just assume it’s semantic versioning, and it’s not.
So you do annual releases?
Yeah, every October. We try to aim for the anniversary of the first broadcast of Monty Python’s Flying Circus in October.
Well, that’s important. That’s an important date right there. I like that. Okay, so is that like for major features, but there’s still like bugs and patches and stuff throughout the year? I mean, how do you guys –
About every three months, two, three months, we do a bug fix.
Okay. It’s like a patch release. Gotcha. What kind of big stuff is in the works that would like require even a 4? You asked yourself that… Or what’s like an annual feature that’s maybe in the works right now? Some big stuff.
Oh, that might call for a 4?
Yeah. Or maybe wouldn’t, but the kind of stuff you’re working on.
So the things that kind of triggered this kind of conversation - once again, there’s zero plans for there to be a 4, to be very clear. I don’t want anyone to misread anything I’m about to say.
This October, Python 4. It’s coming out this October.
[33:50] Python 3.12 will be coming out this October, to be very clear. But there’s kind of two things that lately have caused people to have like “Is this gonna be the thing? Maybe we shouldn’t make this thing and do Python 4.” One is our C API. We’ve been slowly trying to clean it up and make it a little easier to work with, and more backwards-compatible, and make it easier for people to work with. And we can actually talk about that later, because it turns out the whole reason packaging and doing all this virtual environment stuff even exists is because everyone’s used Python as a glue language of the internet, which is a blessing and a curse. But we’ve talked about changing that, and obviouslu, C does not exactly have great mechanisms for backwards compatibility.
So we’ve talked about if we did a massive switch to some better C API, would there be a way for us to brush the old one away and to be like “Let’s figure out a good transition plan from the current C API to a newer, better, long-term C API, and then when we’re ready to brush away the old C API, let’s make that Python 4”, and just say like “If you use the old API and you didn’t make the transition, we’re sorry, we’re deprecating all of it, it’s going away”, and that’s gonna be the Python 4 thing.
The other one that’s being very actively discussed right now, not because of potentially Python 4, but just it’s literally an active topic, is there is a PEP, I believe it’s 703… Is a PEP to remove the global interpreter lock for CPython. And that would bring true threading to Python programs. And people have talked about whether or not maybe that would have been the thing to cause Python 4… Because that global interpreter lock that Python has - there was never more than one Python thread able to run at once. The only way you could have threads doing their thing was at the C level, where you released it, go off, do your C thing with no Python objects, and then come back and require that lock.
The thing is, once again, C API changes to make that work… Like, literally, the C struct headers are going to have to change, so there’s gonna have to be a separate compile target for what we call Python wheels, which are the precompiled extension modules that you can get for Python… It’s potentially going to shift some things for Python code a bit, from code that’s just not used to it. There’s potential enough upheaval because of this, if we do this - once again, it’s active, it’s not officially been accepted - that some people have talked about “Well, maybe this should be the Python 4.” Like, we start a transition where we have both available, both a GIL-free and traditional GIL builds of Python, and then we reach a point where we say “Hey, in five years we’re ditching the version with the GIL, and then the no GIL version will be the one we stick with, and that will become the Python 4 original and we ditch the old version.” And that’s another thing that’s come up about discussing, “Is this going to be a Python 4?”
For the uninitiated, describe the reason to have a global interpreter lock, and then the pros and cons of either side… Because these are trade-offs.
Oh, yeah. So Python uses reference counting for garbage collection. We don’t have an actual garbage collector that does like traces along pointers, and all that stuff. It’s all literally reference counting. So we’re literally – every time you make an assignment, it increments a counter on that object, and when that reference goes away, that counter goes down. And when that counter hits zero, that means that object has zero references to it, so you can clean it up and free the memory.
The deal is if you have threads, as we all know, we have things called race conditions, and you don’t want race conditions with your reference count, because that’s how you end up having memory leaks. The problem is is if you put a little lock on every single object, your performance sucks, right? Because that’s a lot of locking and unlocking, and no one wants to put up with that every single time you create an assignment, especially in dynamic programming languages like Python, where you don’t have a compiler that can eliminate things because it can take a holistic view of the code and go like “Oh, well, I know this will hit zero here, so I can skip all the reference counts”, or whatever. So because of that, we had a global interpreter lock, that basically acted as the lock for every Python object. So you never had to worry about screwing anything up in terms of your reference count. But it had other knock-on effects too, where we didn’t ever have to design any of our data structures to worry about race conditions. There are no locks on appending to a list, or adding something to a dictionary, or deleting anything from any data structure.
[38:04] Because we had the global interpreter lock, we were able to design the entire system to have the best single-threaded performance we could, and not have the cognitive overhead of having to worry about threads at any point and any time in the codebase. And once again, this is all written mostly in C, so it’s not exactly high-level stuff where it’s maybe a little easier to reason about, but the problem is is we now live in this multi-core world, where people want a way to use all those cores. So it’s been looked at over the years, and people have never been able to find a way historically where we could get rid of that global interpreter lock and not take a nasty hit on single-threaded performance… Because, once again, most Python code at this point is not written for multi-threaded scenarios. And so if I came to you, Jerod, for instance, and said “By the way, that app you want to use is now going to run 30% slower”, would you have been happy?
Right. So it’s one of those things that’s held us up from trying to do anything about it, because there have been various scenarios to solve it without completely redoing how the garbage collector worked, because that’s really even worse, because this whole INCREF/DECREF thing is just baked into the C API, and it’s just how the whole thing functions, it’s baked into C code…
Ancient legacy… Like, the underpinnings of Python.
Exactly. And because it bleeds out through the C API, it extends outside of CPython itself as an interpreter. So we can’t kind of keep that under control. It’s out of the bag, and there’s nothing we can do about it. But the GIL is under our control, so we could theoretically do something. And at this point, Sam Gross from Meta did the work and actually got it down to roughly we think about a 10% performance loss on single-threaded code. But it does allow scaling with threads to the number of cores, roughly. And so that’s where we’re at with this, is –
It’s a better trade-off.
Yeah, yeah. And that’s the question, is “Is it a better trade-off?” Because–
Well, it’s better than 30%, but is it still better, right?
Yeah. Well, and the thing is we’ve all ended up with more and more cores, because CPU manufacturers have not gotten past physics yet to make single cores that much faster, so it’s just “Now we’re gonna throw more cores at it.” But because we’ve designed the entire system around this global interpreter lock, it’s complicated at it, and that’s kind of honestly, I think, where this whole conversation has ended up, is - I don’t think it’s necessary even about the single-threaded versus multi-threaded performance hit, it’s more I think heading towards a “Can we handle the cost?” Because once again, the whole codebase has been coded this way. What are the bugs going to look? Is the whole Python community ready for threaded code? Because we don’t have the historical toolchains and experience of writing threaded code in the Python community. Everyone’s just used to “I don’t have to worry about it. The global interpreter lock makes sure I don’t shoot myself in the foot.” And on top of that, are the core devs ready for it? Because once again, you might not have experiences with a Python core developer knowing how to write threaded C code, because you never had to till now.
So those are kind of the open questions we’re gonna have to answer for ourselves before we decide, “Yeah, we’re going to do this, we’re going to join the multi-core world this way, and do it.” Because we also have other things, too. We just landed what we call sub-interpreters, where you can have multiple interpreters in a single process, and those actually have a per-interpreter GIL. So it’s still threaded, but it’s more like Erlang, where it’s actor model in a way. Each interpreter is isolated, runs on its own, and it gets its own GIL. So those can all run in their own threads. But at least within that interpreter it’s still single-threaded. But that just landed in 3.11, and so that’s not really gotten wide usage yet. And we didn’t launch the Python API, because we don’t want to get feedback from the community like “Does this solve a problem for you? Is it enough? What kind of API would you want?” It’s actually – sorry, it’s gonna be in 3.12. I’m sorry.
Oh, it’s not even out yet.
Yeah. It’s really, really going to be new, and we just don’t know what the experience is gonna be like. The hot topics that won’t, but have caused people to go like “Python 4, maybe…”
How do you have time for the rest of your life with all these conversations going on?
Well, I don’t get to code as much. That’s how I find the time for all these conversations.
Oh, you just talk. I see.
[42:08] Yeah. I mean – so I’m a dev manager now, so I have reports – I’m basically in charge of the Python experience in VS Code, if you don’t count Jupyter stuff and the autocomplete. And it leads to a lot of talking, which is probably good, because if you can’t see on the screen, I have RSI on my thumbs right now, so it’s probably good that I’m not typing too much these days right now… But it’s tough. I don’t get to code nearly as much as I used to. I tried to find the time, but it is honestly a lot of talking. Because I’m a steering council member, it just innately leads to a lot of talking, and kind of thinking and positioning, and less coding things up to make things happen. I’ve also been a core dev now for 20 years. I’ve just had that anniversary in April.
Congrats, man. It’s a milestone.
That is a long time. It is.
Yeah, it’s kind of convenient. Basically, as long as the PyCon conference has been around is how long I’ve been a core dev, because I literally got my commit rights like the week or two after the first PyCon… So it makes counting really easy. Also, because I’ve been around long enough, I’m starting to become the institutional memory of the project, because there’s only so many people who’ve been around longer than me… And so it’s also led to more trying to
help the new people –
You’re an elder now. You’re one of the elders.
Yeah, exactly. Back when I joined, I was the youngest core dev when I got my commit rights. It’s no longer even close to being true. We’ve now had people join who were in high school.
So my record got shattered completely, because I joined right after I got my bachelor’s degree.
So you said you’re doing a lot of talking, right?
Yeah. Coming out to podcasts.
Podcasts, maybe some talks at conferences…
He’s an ambassador.
You’re on this show, but what other Python-related places do you talk, would you talk, or are places people should pay attention to if they want to dig further into like a Python podcast or content world?
So if you want the equivalent of this podcast, that’s probably the big ones… Talk Python to Me, or Real Python. Those are the bigger ones that are more about roughly weekly, someone comes on, does an interview, talks about some topic… If you want something more like Changelog News, that’s Python Bytes. There’s a couple other ones, but those are the ones that I’m personally on the most. Those are the ones I always recommend to people to check out, see which ones cover the topics the way they want… Because they’re all slightly stylistically different, and just obviously different content.
How often do you get on a call with the Steering Council? …the six of you, or eight of you, or four. How many people is it?
The five of you. Like, you five, on a call, Zoom, whatever it is. Microsoft Teams, I’m sure…
Nope, actually it’s Google Meet.
We have two members of the team from Google, so…
Okay, so you guys - you battle over communication tools… “Which one am I going to use…?!”
No… Meet is easier because it’s just in the browser, versus asking people to install Teams, so…
Right. Anyways, how often does this happen, these council meetings?
It’s every week for 90 minutes, plus anything we do outside of that meeting, including reading peps, keeping up with all the conversations around those peps… It’s kind of actually funny - it’s a little tricky being on the Steering Council and participating in the conversations, because you never know if people are going to listen to your comment as you personally, or as you as a member of the Steering Council. So it’s a bit of a shift being on it in terms of I have to be very careful about when I express an opinion, because people take it a bit too seriously. Like, I’ve said things and they’d start changing the PEP to meet my comment. It’s like “Whoa, it’s just my idea. It’s okay, you don’t have to follow this.”
Right… That’s because you’re an elder; they’re like “Brett wants it changed… We have to change it.”
To an extent, for some things… But for other things, it’s also the added Steering Council weight to it. So it’s one of those – I have to be a little careful to not overstep and give too much out there, because people will just listen to me… And that’s – personal comment, I even talked to my four council members/friends about my thoughts. I may have just thought of it at the moment, and suddenly, they’re changing the PEP for me. It’s like, the other four may completely disagree. But this is my last year on it, so I don’t have to worry about it past end of the year.
Are you actually retiring, or you’re just, your time is up?
From the Steering Council, it’s technically a retirement, but when we were designing our governance structure, I personally stated I thought five years was a good amount of time. It’s long enough for a whole length of time of support for a Python version today. These days, we support a Python version for five years. It’s the release, and then you get bug fixes for two years, and then you get security fixes for three. And then it hits end of life and we stop supporting it. And I always said, “Yeah, it’s good that you can start with a version, and that’s kind of the version you start with, and that’s originally – you kind of shepherd it through its life”, and then when it ends, probably a good time for people to step off. We did not put on term limits when we started, but I think term limits are good. I think turnover is good. I shouldn’t be constantly voted on due to people just going like “Oh, it’s Brett. I’ll just keep voting him on” kind of scenarios. So I would want people to want to vote me on because they actually care about what I want, and think, and want to do… It’s just habit, right? People, the way human beings are, they’re just going to vote for me, because they just know me. And so I personally just said “No, five years is good enough.”
And also because we’ve actually ended up in a funny scenario where there’s five of us and all of us have been on for a different amount of time. So I’ve been on for five years, Thomas has been on for four years, Craig’s been on for three years, Pablo has been on – no, Pablo has been on for three years, Craig’s been on for two years, and Emily’s been on for one year. So we have exactly 12345 years of experience.
It’s like a rolling council.
Yeah. And I’d honestly rather have it be like that.
That’s kind of cool, because you get one new person each year, and they can kind of get integrated and used to it, and everything, and then eventually they become the elder, until their time is over.
Yeah. So I’m just personally making the choice that I personally stayed in five years; it was a good amount of time. I’ve hit five years, with five people on the council, so I’m gonna step away. I was one of the inaugural members, so I’ve also served the longest at this point, and… You know, it’s all good. I’m ready to take a break, get that hour and a half every Monday back, plus get to comment as myself and not have to worry about people taking it too seriously. And just get a bit of time, and a little less stress.
Yeah. Watch a few more films every week now. You can have more time for movies.
Yeah. But honestly, I just want to give someone else a chance. I think turnover is good. I don’t think people who have been on the project the longest should be the necessary the people who keep getting voted in. I think people who are newer to the project, and other voices should get on and be heard, and try to make sure that the project stays fresh and has the forward momentum to keep going.
Yeah. I think a balanced mix is always best. You do want the people who’ve been there, with the experience, representing the history that a lot of people lack, but you also want the new ideas and some of the enthusiasm and maybe the different perspective on the world that those other people lack. So…
I liked the fact that you had like one each year. That’s kind of cool. If you can keep that momentum flowing… I guess if you just did one person every new year, it’s just going to work that way.
And it was totally accidental. Like, we literally just realized this in April, when we gave our update at PyCon US, and my final update, at least for now… Unless I decide to come back to the Steering Council later. Yeah, it just happened to turn out that way. But it’s a nice coincidence, and it’s nice enough a coincidence that I hopefully will kind of as a group continue that on… Assuming people are continually happy with the other four. I don’t want to say people should definitely vote the other four back in, but hopefully they’re happy with how they’re handling things.
When do you think the first AI will become a Steering Council member? How far are we from a transhumanist Python Steering Council?
I’m gonna guess never.
Yeah, I don’t think so either. I’ve been thinking about this with regards to Python, because one thing you mentioned earlier on in the show is like “We have to get all the blog posts updated”, which would be obviously an impossible task… But let’s just call it a very large task, because all those extent resources on the web need to point to the new thing, and that’s a very hard thing to do. And then I was thinking, well, now, with the trend, we’re actually two steps away, because you have to update all the sites, and then you have to retrain all the models. Because they’re gonna still be pointing out to the wrong information until they’re trained again. That’s kind of a bummer.
[50:17] So now we’re getting further and further away from being able to be up to date… And that got me thinking about this Python as a default language, which - you’re saying it’s so used; it’s taught. Of course, other languages are still taught as well, but it’s so entrenched that the tools that we have now are really good with it, or about it, or know it well. A lot of our models know Python really well. And what does that say for up and coming languages like Raku, for instance? They probably don’t know – for instance, Elixir, both ChatGPT and Bard are pretty bad at Elixir. It’s just, they’re not very good at it. They’re probably way better in Python. And so is this kind of a rich gets richer situation, as we move away from blog posts and Google searches to asking a GPT every single time, if they don’t know these new – I mean, it’s probably not as good at Rust as it is at C. Maybe. I don’t know. What are your thoughts, Brett?
Yeah, I think that’s a fair point. The Python community is spoiled to the hilt with a wealth of knowledge and content out there, because it not only has become as popular as it has, but because it’s been used for teaching. There’s a lot of documentation out there oriented towards beginners, and it just gets repeated in different ways to try to help reach beginners from different perspectives. And because Python’s – one of the lines we like to say in the Python language is Python’s the second best at everything… Because of that, it’s not hard to find someone who decided to use Python for something and wrote something about it. So because we have that breadth, there’s just a ton of knowledge out there.
So yeah, it’s gonna be very hard if people rely on AI to do this sort of thing, to get to do more. And let’s be honest, having Python be the lingua franca of the AI community is also adding even more weight to that. If you look at ChatGPT and their plugin system, one of the plugins is a built-in Python interpreter. So they even have already gotten ChatGPT to the point where you can talk to ChatGPT and tell it to generate Python code and then be able to execute it right there. So we’re already in a very blessed position of tons of content, and being used by the people for the thing that’s now taking the industry by storm, and kind of becoming a massive thing that everyone kind of has to think about, and learn about, and do stuff with. So it’s going to be hard, I’m going to fully admit it.
Now, there will always be places where Python is not necessarily the best solution. You’re not about to write the Linux Kernel in Python. C is there, Rust is starting to eat C’s lunch, I think, a bit, in that kind of perspective, in terms of really low-level system coding… So that’s, I think, going to be a place.
But yeah, it’s making it harder and harder for languages to kind of break out. And I would like to think that we’ve done a good enough job that you kind of also have to kind of stand out a bit, because the general good language that covers a plethora of possibilities is Python already. So how do you differentiate yourself against Python, and somehow come out as better, perceivably, or at least perceptually, to other people? It’s just hard. As I said, I’d like to think that we’ve done a great job, and will continue to do a great job, but add that on top of the volume that we have now in terms of information out there, and being taught to kids in high school and elementary school now around the world… It’s hard. I fully admit it. And I will fully admit, my position in all of this is total luck. I’ve always said this, success is a combination of luck, skill and risk taking, and I just happened to be at the right place, at the right time, and just happened to hitch my wagon to a project that happened to blow up shortly after I got involved. Because when I joined, no one knew what Python was. It was “What the heck is that?” Or “Is that that language where whitespace matters?” And now look at where we are. It still blows my mind personally, but… Yeah, I don’t know. I feel kind of bad, but…
Well, yeah, it sucks. I’m Canadian, right? I do want other people to have success…
You want to apologize, but… Here we are.
Yeah, I want to apologize. But I have to admit, it is rather nice to be in this position of working on a language that’s found this level of success.
Really sorry for winning.
Exactly. I’m sorry we’ve done well.
Because I don’t – honestly, none of us set out for getting to this level. We just all enjoyed the language, and just enjoyed working with each other, and it just happened other people agreed, and continue to agree, until we got to the point where we ended up with the Python Package Index. I’ve always actually said the Python Package Index is actually a trailing indicator, not a leading indicator of Python’s popularity… Because people had to get to the point that they wanted to write all those packages, and then it got big enough that that started to attract people… And now we’ve gotten big enough that people are forced to use Python, instead of choosing to use Python, which was also a really weird turning point. Hearing people complain that they were forced to use Python at PyCon, for the first time. Jacob Kaplan-Moss of Django pointed that out. He was like “Wow, we’ve really made it. People are being told they have to use it, not because they want to use it.”
Right. So the very first time I heard the word Python that wasn’t referring to a snake, but was referring to a programming language - I was in college. So let’s put it at ’03, ‘04, somewhere in that timeframe. And someone told me – I was in a computing class. I think we were writing C. I remember writing a Blackjack server in C. So it had like networking, TCP/IP, and then it also had like the Blackjack rules. It was really a fun project. I would love to have just the free time to just write that again today. But I was writing that in C, and somebody was writing some – I don’t think we had a choice what to write, but he was saying how much better Python was than C. And I didn’t know; I didn’t know any programming languages. I’m like “I don’t know, this seems better than C++.” Because my first class was actually C++, and they were using that to teach like programming, not to teach C++. And then my next class was C, and it was just so much simpler, and straightforward. I was like “Oh, this makes more sense.” Anyways… And he’s like “No, Python’s where it’s at.” You know? Did you ever get one of those? And I was like “Oh, okay, Python. Why?” And his reason, even back then, he said, “Well, Google uses it…” And I was like “Oh, that’s cool.” He’s like “Yeah, so if you ever want to work at Google, learn Python.” I’m like “Well, maybe I will.” Now, I never went and learned Python after that… But even way back then, it had this – “Because Google uses it”, it just had that instant appeal.
Yeah, I know some other people who had that same view. But I actually have some ironic story to go with that. One of my Alma Maters - and I’m not going to call them out - was talking about changing the intro language. And they were proposing Python at the time. And that came up, and it was used as a negative. It was like “Yeah, but they use this at Google. If you had to be as good as a Googler to use this, then there’s no way it’s gonna be approachable by students.”
Oh, because those are hardcore programmers. I see.
Yeah. And so they ended up, I think, going with Java.
I wish what I would have done that day, instead of picking up Python, is I should have picked up some Google stock, you know? I should have been like “Oh, they’re smart.” 2003, buy a bunch of Google stock, you know… It would have been smart.
Yeah. Hindsight. Didn’t pick up either. But I did write that Blackjack server, and… I should find that code. It’s probably just the worst code ever. But it was fun. That was a fun project.
I will say, the very first project I think I really wrote seriously on my own, for fun, and when I really knew I loved programming was Tic Tac Toe.
And because it’s a solvable game, I was able to just figure out the AI… The rules that the computer had to play in order to consistently win if I screwed up.
Yeah, you always start in the middle. Every time.
Yup. You’ve just got to do the right weights in the cells and just how to calculate.
[57:52] And so I did it, and I spent six hours without stopping, doing it in C. I was like “Oh, my God, this is amazing. I think I wanna do this for a living.”
Yeah, that’s super-cool. Did it have a little ASCII GUI, or anything?
Yup. And it tied to the numeric keypad for choosing where you wanted to place it… So you could just type the number on the keypad, and just have it go in the right spot.
Have y’all ever played the Ultimate Tic Tac Toe.
No. Is it the last one?
Oh, it’ll change your life. If you like Tic Tac Toe one dimensional…
For the better, or for the worse?
For the better. Oh, it’s challenging.
Oh, it’s 3D?
Is it Star Trek Tic Tac Toe?
So it actually takes what would typically be the nine squares you have for Tic Tac Toe, and in each of those is a separate game. So embedded Tic Tac Toe, essentially.
And so let’s say the rule of thumb is to start in the middle, right? So you start in the middle cell, which has its own Tic Tac Toe board, and you go in the middle of that one. Well, your player has to play in the middle too, so you follow it. So then if you go from middle, and you go to the top right, and you play - let’s say play…
You play a whole game in there?
Yeah, you just kind of follow – you go to the square, or to the game in which the person before you played. So as you move around within the individual board, you’re moving around on the grand board. And so you’re playing essentially nine games at once, which is one big game.
I don’t feel like that breaks the rules enough… Because wouldn’t you still be able to win every time?
Well, the problem is is you’ve got to follow. So you can’t just be like “Okay, well, I want to play here.” To get back to that – let’s say you’re about to win in the top right quadrant. I would have to play so that you go there to play. So you’re blocked by my ability to –
But you followed me there. You always play after me. So I could just keep playing top right corner and you’d have to.
Not necessarily. Let’s see… Well, yeah, I mean, you can keep playing there. But then I’m also there too, and I see your move, and I can block you easier. So if I see you’re about to win, it’s no different. You have to be more strategic. It’s like 3D chess, in a way… It’s Ultimate Tic Tac Toe.
I think we’ll just have to play after the show, Jerod.
Yeah, it’s really intense. I play with my son. Because he’s been very young playing Tic Tac Toe with me, and now he wins every time on a single board. And now on Ultimate, it’s like, it’s nine games at once, it’s very challenging. And it takes a long time to play. It’s a good half hour or so, versus minutes for a single game.
So it’s a different experience.
Yeah, I’ll have to check that out. The way I’m conceptualizing it, I don’t think that it would be any actually more complicated. I’m obviously missing some sort of rule that makes it that way…
What makes it more complicated is that you have the blocking. So you still have the freedom to move around, but only if I move there or if you move there. So after your play, you go to the bottom left, and there’s a strategy there, I have to play there with you, and then I can move to try to take my strategy elsewhere. It’s all about strategy, and like the ease of blocking…
What happens if you win an individual square?
So that’s a good point. We’ve recently done this… So I don’t know all the full roles, totally, but I think if you’re a circle, you circle it, and if you’re an X, you X it.
And so then if you push somebody into that place - my son calls it free play. And I don’t know if he’s got these rules. He introduced me to this game, I didn’t discover this.
Oh, okay, so this is a game that your son made up. Okay, so is this a real game?
It’s a true game, though. It is a true game, I promise you.
But he says it’s free play, which does not make sense to me rules-wise. So basically, if I take you – let’s say I’ve won the bottom left quadrant, and I take us back there… Or like I play in a different game in the bottom left corner, in a different quadrant - you cannot go there because I’ve won that board. If I try to take you there, you can’t go there. So I think you can play anywhere else, based on his interpretation of free play, but I don’t believe that’s how I would design the rule. So I want to investigate further. So question mark on that one. I don’t know.
I do know you can win boards, and something happens where you skip it.
Somebody out there is listening to this and they’re like – they’re an ultimate Tic Tac Toe grand champion, and they’re like “You fools. You don’t even understand the rules of ultimate Tic Tac Toe. You’re wasting my time with this guesstimating.” Well, Brett, once you are off the Steering Council, maybe you could code up one more Tic Tac Toe game. Go deeper, go 3D on it.
I think I’m gonna have to wait until the show notes come out to find the link to the official rules, to understand how I’m supposed to code that up.
Yeah, fair enough. Well, by then they’ll be out there.
Yeah. And I’ll use Textual to do it as a TUI, and…
…still be old school with new stuff, and… Yeah.
Ultimate Tic Tac Toe is on Wikipedia, so…
Okay, link it up. We’ll read the rules and we’ll explain them to you in the comments. We’re like “Adam, here’s how it works.” Brett, what do you think of Textual? Do you use it at all?
I haven’t had a need yet, but Will’s a great guy, and I think what he’s doing is really cool, and how he’s pulled that off is crazy. So I think it’s a really great resource for the Python community in general, and obviously, anyone who has to do a TUI these days. I think it’s a pretty neat and nice way to get a quick GUI going, because Lord knows, trying to do a cross-platform GUI is not easy.
Right. Yeah, somewhat ironically, when we had him on the show – I mean, I’m super-impressed with what he’s built over there as well. His main sticking point, I think, at this point, was distribution, you know? And he’s like “Yeah, I’m not sure if Python is the best choice for that particular problem. But everything else, it’s amazing.” I’m like “Yeah…”
So touching on that point. This is Brett’s – not a soapbox, but wanting to point out that part of the reason this is hard is because of Python’s popularity, and because of Python’s use as the glue language of the internet. If the world was just pure Python code, and people just used pure Python code with Python itself, none of this complication would be there. Pulling out the “Back in my day” phrasing…
“Back in my day…”
…when I first learned Python, you didn’t need any of this. You downloaded zip files, unzipped it, put it in the directory with your own code, and you just went with it. But when people started to lean into CPython and C API, and wanted to wrap – the canonical example is always like Libpng, or something… And get that shipped to people without forcing them to have to have a compiler installed, which was always a problem for Windows users, we had to come up with some way to have you be able to download the right thing, for the right version of the interpreter, and all that stuff, and have it all just work. And we did, and those are called wheels. The trick is, is those wheels are tied to the version of Python that you’re running, and the interpreter you’re running, and how it was compiled, and downloading for the right OS, for the right CPU architecture, and all this stuff… And so there’s a lot more work to it to download and put it on your machine for it to work, and have it work going forward. Because that’s the other thing - Python’s an evolving language, people will install versions of Python, and if you just dumped it into the directory with their code, and suddenly upgraded your version of Python, or downgraded, or whatever, moved to a different machine even - this is a generic problems with dynamic languages - suddenly it could break, because once again, it was compiled for a different thing, and made to work for a different thing. You can’t just copy that code over. If you’re going from your old x64 Mac to your new Apple Silicon Mac, you couldn’t just bring your hard drive over, because all those binaries are now wrong… Ignoring Rosetta, and all that stuff.
So that’s where this whole need for virtual environments came up, was a way to isolate it and make sure that “Hey, virtual environments are designed to be tossed.” They’re not designed to be an actual artifact that you do anything with. It’s designed to help you install something, and if you need to get rid of it and do a reinstall, they’re designed to be lightweight. As I said, they’re literally just like three directories and three symlinks. Like, whatever; you can delete them, recreate them, not a big deal. But because of that, and because of the desire to install the fastest thing, and the right thing, you need a way to stick it in the right spot, so you don’t shoot yourself in the foot. Once again, moving machines, that’s running a different version of Python, your OS is installing a different version of Python for you, because you did an upgrade in place, and suddenly - oh, you were relying on the system Python, that used to be 3.10 and now it’s 3.11, that kind of thing… So we had to have a way to kind of isolate stuff. And that’s where this complication came in.
[01:05:57.19] So if C, and Rust, and Fortran, and all that other wrapped code for Python went away, the problem would completely go away overnight, and we’d say “Yeah, just download your Python code, put it in the same directory”, and you’d be done. But once again, this is the curse of the popularity thing, right? Everyone uses Python for everything, and they wrap the world, and wrap some of the weirdest things out there, and so everyone loves that they have this stuff, but then they hate the overhead of having to maintain it. But this is part of the cost. There is no C package manager we can rely on. Everyone does it their own way. And not everyone even has a compiler setup, or the toolchain they need to compile that thing. Not everyone’s gonna have GNU Make versus BSD Make even. Like, even that’s a difference.
So it’s one of these things where we can’t have you just download and build it, we’ve got to make sure it’s precompiled, and then if you have that, you’ve gotta make sure it’s the right version, right thing for that scenario, and that it doesn’t suddenly go wonky if you change things around on your system, so we have to keep it isolated, so at least it’s still the right thing in that scenario.
Yeah, this is why packaging in Python is hard, and why you sometimes hear people complain about “Why is packaging so hard in Python? Why can’t it be simpler?” It’s like, “Well, it would be totally simple if we all just wrote Python code, and no one ever brought C, or Rust, or Fortran, or anything else over into the Python community.” But because we’re that glue language, people do that perpetually, and it just complicates things.
Here’s an idea… Why don’t you have a brand new programming language that combines the usability of Python with the performance of C, unlocking unparalleled programmability of AI hardware, and extensibility of AI models? Of course, you know –
Are you talking about a certain language that uses an emoji for its file extension?
Do they? I’m talking about Mojo. Do they use an emoji?
It’s optional, but yeah, Mojo - you can actually use the fire emoji as the file extension.
[laughs] I kind of love that, honestly…
I guess because Mojo is fire, if you’re hip to that lingo these days…
Mojo means fire, or it’s just on fire? I don’t know.
It just is fire. Don’t the kids just say “It’s fire”? Kids have moved on from seeing “It’s lit” to saying “It’s fire.”
Things aren’t lit anymore, they’re just like “That’s fire.” I’ve heard people say “That’s fire.”
You two tell me, you’re the parents in this call. What do the kids say these days?
I don’t let my kids use emoji. I’m just kidding, I don’t know… I’m intentionally dense sometimes. So Mojo is a new thing, sort of… Modular.com - this is coming from Chris Latner and friends - recently announced, made big a splash… It’s Python-compatible as a goal, but brand new in certain ways… I don’t know much about it. What do you know about it, Brett?
I only know what I’ve read on their website, and I did listen to Chris’s interview with Lex Friedman, and all the Mojo bits at least. So their goal, from my understanding, is to be a superset of Python. So fully backwards-compatible with Python itself, plus their additions to make additions to the language that allow you to design and write things that are as performant as possible. So they add, for instance, a struct, that I think is more like a C struct, in a way; very hard to find, you can’t add extra things to it after you’ve defined it, the order is specified, and all that stuff. They have, I think – I can’t remember what they call it; fn, I think, instead of def, for defined functions, where you can type the arguments and everything, and it’s guaranteed to be that by the compiler. Because Python’s type hints are hints; they’re kind of documentation that people statically analyze to make sure the documentation is accurate. But technically, you can’t rely on it being true necessarily… Well, I think Mojo’s compiler does that, or is supposed to do that. Otherwise, I don’t know, honestly. I haven’t talked to Chris or anyone from modular about this. They’ve talked to Guido, I think once; they just chatted about it and gave him the heads up that this was coming, I think… But they haven’t come to the core dev team to introduce themselves, or anything. I know there’s nothing publicly available to just randomly download. I think you have to be on the invite list to get to play with it through a Jupyter Notebook…
[01:09:57.08] So good luck to them… I will say that the history of the world of software is riddled with the dead bodies of people trying to reimplement Python… I hope they pull it off, because their goals are quite audacious, and if they pulled it off, that’d be amazing, because then it’d be even more Python software out there, and then stuff that makes it even faster, and it’d be fantastic… But I don’t know where they’re at, because as I said, they haven’t really publicly released anything yet. If you read the docs, it reads a lot of “This is what we hope to do, and plan to do”, not “What we have done.” So I’m just waiting to see where they’re “done” ends up being.
Hopefully. It’d be nice.
Yeah, I think a superset is smart. I think that’s a play out of TypeScript’s playbook, and I think that was one of the reasons why TypeScript was –
Yeah, Swift as well. Good call. Which, of course, Chris designed Swift, you know, so he’s done this before… He seems like a very talented engineer, and I think if anybody can do it, maybe he’s the one. Obviously, he’s not doing it alone, but it’s interesting, to say the least… And like you said, very early days, and lots of audacious goals. I’m always cheering for anybody with audacious goals. It’s not like it’s going to obviate Python, or something, even if they’re successful. Obviously, it’s a super-entrenched, and it’s the most popular thing there is. You guys just assume everyone’s using it, that’s how deep it’s in there. I mean, Google uses it, right? I heard that one time, Google uses it.
And Instagram. Don’t forget about Instagram.
Okay, never count out Instagram.
Their docs have some nice things to say about Python though. They say “We believe that Python is a beautiful language. It’s designed with simple and composable abstractions, it eschews needless punctuation that is redundant in practice with indentation, and it’s built with powerful (dynamic) metaprogramming features, all of which provide a runway for us to extend the language to what we need at Modular. We hope that the people in the Python ecosystem see our direction for Mojo as taking Python ahead to the next level, completing it, instead of competing with it.
Yeah. I mean, listening to that interview and reading those docs, I don’t think – I don’t view this as adversarial or confrontational at all. I think they’re coming from a position of mutual respect, I think, of just like “Yeah, Python’s successful, it’s done well for itself”, for a good reason; hopefully, they think it’s good reasons… “And we just think there’s some things we can tack onto the language to give you some performance boost in certain scenarios that people, especially in AI, really want right now, and bring Python along for the ride, so that when you need that, you can, but when you don’t, you don’t…” So yeah, it’d be great. As I said, I wish them luck. I hope they’re successful, because as I said, it sounds like they want to see Python continue to be successful, they just want to expand it a bit to make it even more successful in other places… Because historically, if you run into a performance problem, you jump out of Python in C or Rust, and then you do that extension module, but I think Mojo’s trying to present itself like “Yeah, you don’t even have to jump out of Python. Just write some extra Rust code over here”, and it just integrates directly into the system, and it’s just a part of their codebase. There’s no massive language jump to this crazy curly brace world. It’s just right there, and it’s just a couple of different keywords, but nothing exotic… And I think that’s how they’re trying to position it.
It’s like you just switch your file extension to a fire emoji, and now you got extra superpowers, you know?
That’s pretty cool, actually.
As I said, they’re aiming for a superset. It’s technically supposed to be fully backward-compatible. So yeah, technically, you could just make any – any Python project is a Mojo project by definition, for what they’re aiming for. I just don’t know if they’re long enough to have proven they’ve been able to pull that off. I hope they do.
So it’s like, if you want to do Python Plus, you would use Mojo to get there.
It’s one way. There are a couple other projects out there… There’s Cython, which used to have its own domain-specific extension to Python syntax to let you define more or less like C types, and then have that compiled down to the C API directly… They’ve subsequently picked up the type hints that Python has, so you don’t have to use their language subset. But it’s still different; it has slightly different rules, and all that stuff, but they do their best to be fully compatible.
[01:14:06.11] And then there’s another project called Mypyc; it comes out of the Mypy project, the type checker, where they try to take Type Python code and compile that straight to C code. But once again, they have limitations, because they only support certain constructs and certain types, and all that stuff. So it’s not fully generic, like Mojo is kind of aiming for, of “We’ll just take any Python code.” Hopefully, that base performance will be equivalent. I don’t think they are going to be claiming Python is going to be personally faster, just that it will be the same for us… But if you do Mojo, the Mojo bits will be way faster; I think 3,500 times faster kind of level claims. Like, really, really faster. And so that’s the interesting perspective they’re coming from, is like “You don’t have to code within a restriction because we’re a superset. You just take your Python code; it won’t be any worse, but if you toss in some Mojo stuff in there, that Mojo bit will be way faster.” So I think they’re trying to go like “Oh, yeah, write your Python code, profile it, any of the slow points - rewrite that in Mojo, right then in there, and just use that, and you’ll just be faster.” It’d be awesome.
Yeah. Alright, anything else? I know we’ve mentioned Rust… We haven’t brought it up too much, and I’m curious about Python, Rust… I know, Brett, that you’ve been doing some Rust yourself. What’s the story with Rust in the Python world?
Yeah, I will say I am a Rust fan. I actually created the Python launcher for UNIX, which for those of you who are Python developers on Windows and are used to the py command, so the Python launcher on Windows - I decided to kind of reimplement it in Rust for UNIX as my Rust learner project. I think it’s great. Honestly, if Python doesn’t fit the bill, I’ll see if Rust fits the bill. That’s kind of my decision tree now for languages.
Yeah, there’s actually pretty good synergy between the two communities. I think kind of the approaches historically around trying to be open and welcoming and all that stuff kind of tie the two together as being friendly towards each other very early on, plus Rust not kind of targeting the same aspects of the world in terms of Python, because Rust is not a scripting language or a dynamic language, it’s pretty much a –
Right. They’re complementary.
Yeah, it’s more systems-oriented. So yeah, it’s a complementary language to Python, I think. Yeah, there’s good support. So there’s a project called PyO3; that makes it fairly easy to take a Rust project and expose it to Python. There’s another project called Maturin, that is a build backend that lets you take a Rust project that you used with PyO3 to compile it, to build those wheels I mentioned earlier, to get those precompiled binaries so that it’s easy to just download install for Python on your machine.
There is a linter called Ruff by Charlie Marsh, where he decided to write a linter that more or less did what Flake8 does, if you happen to know that linter for Python, except he did it in Rust, and it’s blazingly fast. It’s one of those “Did it actually run? It exited with no errors in it, and it already said it’s finished. Like, is there a bug?”
It’s so fast, I’m not sure if it ran.
It’s like when I write Python code and it passes all the tests and everything works the first time. It’s like “I’ve gotta add a bug here to make sure that this actually happened.”
[01:18:03.00] We actually use TOML, partially on the recommendation of the Rust community. When we decided to standardize the configuration files for packaging, there were a couple options, and we considered TOML, and we went and talked to the Rust community about their use of cargo.toml.
Right. And they like it.
Yeah, they liked it. So that’s partially why we went with it for the pipeproject.toml, to the point actually that Pradyun, someone who’s now a core Dev and very active in the Python packaging committee - he’s actually now the co-maintainer of the TOML spec.
Is the TOML spec under development?
Not anymore. I think it’s pretty much stable. After they added date times, I think they more or less hit 1.0 and just kind of said “We’re good. We’re done.” I don’t think it’s changing very much, but…
Check out the Astro website. There’s definitely some cool testimonials for Ruff here. Nick Schrock, who was one of the guys who started GraphQL, called it a game changer. And he’s like “Why? Primarily because it’s nearly 1,000 times faster, literally. Not a typo.” So that aligns with what you’re talking about there, where it’s just so fast that it’s just like why not.
I think it’s cool that… Sometimes you can get – I think I’ve used the word “entrenched” too many times on the show, but you can kind of get like stuck in your own world, and think everything has to be in Python. Python this, Python that, and it’s like, that’s kind of goes against the best tool for the job principle… Because it’s a general purpose tool, but that doesn’t mean it’s necessarily the best for every job. And so if you have a job that you need done, and Rust is way better at it, 1,000 times, in terms of just execution speed on this exact same task, I think it’d be foolish not to look over there and say, “Hey, what if we just used both these tools together, and had a better life?”
I think the keyword there is tool… Just because a tool for your ecosystem was written in something, or used something that you wouldn’t necessarily want to use from that ecosystem doesn’t mean that your choice of that ecosystem is wrong. As I said, Charlie choosing to take the time and effort to write a linter for Python and Rust for speed doesn’t mean your choice of Python for your development needs was wrong. It just means Charlie was willing to sink in the extra hours it takes to implement the same thing from Python, just so that you would benefit with a shorter time to run that tool.
Absolutely. And if it’s the kind of tool that you run multiple times a day, all day long, having 1,000 times faster - it’d be foolish to not want that, as long as the trade-offs in their side weren’t significant.
Exactly. Like the Python launcher for UNIX. I wrote that in Rust because I didn’t want to code in C, but I also wanted it to be as fast as possible, because it’s what you use to launch Python. And no one wants Python to launch any slower than it does, so I just said “Alright, I’m gonna bite the bullet, I’m gonna learn Rust, and I will just maintain in Rust.” And I don’t regret the decision at all, because the performance is fantastic. But I will admit, it takes a bit more effort for me, because I tried to keep up with Rust, but I’m not exactly ingrained into the community like I am with Python, and not just living a Rust life every day, so it takes a bit more effort… But my pain is my users’ gain, because they get that performance perk, while I just have to put in a bit more effort to know how to do it… And it just worked out for me on this. But like all my other tooling, it’s still in Python, because it’s not performance-sensitive. They don’t need to worry about it, so what’s the point?
No, not yet…
Haven’t found that anywhere yet.
The gold hammer, nicknamed Python, or something like that. No, that’s not how it works.
What about RPython? We have CPython… Could there be a future where there’s a Python implementation in Rust? Or is it just too much groundwork to get that done?
It already exists, it’s called RustPython.
Well, that was easy…
So people decided to reimplement the CPython interpreter in Rust; they actually kept even the bytecode. I don’t know the current status of it, they haven’t done a blog post in a while. They did get Pip self-hosting on it. One of the big things initially was they can get it compiled to WebAssembly, and do it that way… I’ve personally subsequently gotten CPython compiling to WASI, specifically for WebAssembly, and the PyDy already existed and they got Python compiled to WebAssembly for the browser. So that’s definitely at least already there, even from the C code… But yeah, someone’s already done that project.
That’s my favorite kind of projects… You know, I have a good idea, and then it already exists in the world. I love that.
No work. Easy. Free win.
Yeah. No time either. I don’t even have to wait for it. Just like, it’s already out there, man. Somebody else had that idea a long time ago, and they did it, so… Kudos on them. Alright… Adam, anything else? You wanted to talk about your Canadian barbecue experience. I’ve got a few minutes, but… We can also just say goodbye.
Well, mainly just to throw a nod at Brett because he took us out… So we said at the top of the show we met Brett for the first time. We went to Canada, to Vancouver, Canada, which is where Brett’s from… And went there for Open Source Summit as part of the Linux Foundation’s big conference there. Many things happening. And in addition to the Open Source Summit we got to meet Brett. He wasn’t even at the conference. We’re just like “Hey, Brett, I know you live here. Do you want to get together?” And so Brett took us out to – what was the barbecue place, Brett? It was your spot.
Whiskey Six on Renfrew Street, in East Vancouver.
Whiskey Six. So he came and picked us up in his Tesla, we had a drink in the bar quickly, and then we went to this Canadian barbecue place, had some bourbon… I think bourbon and whiskey, potentially. I don’t know. Just maybe some bourbon. Some good barbecue… And that was good stuff. I’m from Texas, so barbecue is a thing around here. Very, very popular to be around here. And there’s lots of good barbecues. So to impress somebody who’s impressed by Texas barbecue is a good thing, and so that’s why I wanted to mention it, because it was a really, really good barbecue.
Kudos to my wife, Andrea. She’s the foodie of the house, and loves to stay on top of all the restaurants… I’m like “Where do I take them?” She’s like “Oh, you just take them to Whiskey Six.” Like, “Oh, okay.”
Smart. She’s smart.
And you had to get reservations. It’s like a –
It’s a one-man show.
…small, local town kind of spot. It doesn’t seem like a place you would have to get reservations, but you do.
But it’s tiny. So there’s one guy, he owns and operates, and he’s the bartender, he’s obviously the cook, he’s doing the barbecuing all day, he’s the waiter, he’s probably the…
The drink maker…
I was gonna say the pool boy. What’s it called, the guy who – the busboy. He’s the busboy…
The pool boy… [laughs]
I was gonna say, he’s the pool boy… [laughs]
It’s a different podcast, Jerod.
So that was cool. I don’t think I’ve ever seen a place like that, just run entirely by one person… It was just kind of cool.
And it was different, too. I tried to ask him about like his rub, and he was like not having it. There was zero information coming from that guy. He’s like –
“I ain’t giving away my secret…”
Well, that too. He was busy, but he was also not going to disclose any detail about his process. Very protective.
Yeah. Well, I mean, you don’t go and ask somebody their secret sauce, you know? It’s just rude.
Well, that’s not the truth here in Texas, though. I mean, the Texas barbecue folks - it’s like a community, similar to the way software is for us. They get together, they share “Oh, what’s your method here?” And they’re sharing constantly. There’s no secrets, really. I mean, there’s obviously some secrets, because there wouldn’t be any if there wasn’t any… But they’re not trying to try to keep the secrets, you know? It’s like time and temperature is the primary thing. You can cook it on a Traeger, which is wood pellets, or you can cook it with legit post oak, which is legitimate wood, and tending a fire. But it’s really just time and temperature, seasonings, rubs, whatever…
That’s what you think.
Well, I mean, that’s what I hear.
This is why you’re gonna have Craig backstage and you’re gonna have your barbecue episode.
That’s right, we do have to do the Craig Kerstiens barbecue episode.
Well, you know, Craig’s got to come on, share his thing… And he’ll probably agree. I mean, it’s mainly time and temperature. At least here, there’s almost no secrets with which your process is.
If you had a secret though, and some guy came into your restaurant asked me what your secret is, you might tell him “Yeah, I’m not gonna tell you what my secret is.”
Well, I was just trying to BS with the guy, and he wasn’t having any of it. He was like “Nah…”
No, he wasn’t.
“Sorry. We’re not gonna tell you about my rubs at all, okay?”
[laughs] “Just enjoy.”
“Did you get your bourbon? Do you like it? Okay, good. Drink that.” But there you go. Yeah, it was a good experience though. It was nice meeting Brett… Cannot believe how tall he is. And then obviously, the barbecue was stellar.
So tall. Not quite as tall as some people who join clubs, but…
And then we got that ice cream afterwards. What was that ice cream?
Oh, we went to Ernest Ice Cream. One of our favorite ice cream joints.
Y’all got Sundaes
So if you’re ever in Vancouver, meet up with Brett and Andrea. Or just go to Whiskey Seven? Whiskey Six?
Six. You can’t have a seven –
Ice cream at Earnest Ice Cream. Although–
Well, I’m actually thinking about making Whiskey Seven after I talked to him. I was trying to take his secrets…
Yeah, you were. Yeah, you’re like the same guy going to add one more ingredient…
I’m going next door, okay? I’m gonna have two people work there, not just one.
Yeah. Get your food twice as fast.
Yeah. We were very lucky to have that, because there’s not a ton of barbecue places in town, which is probably why he was a little protective. We are very lucky to be spoiled for ice cream though, so…
He’s like “You cannot take my recipe man. I’m killing it here, okay? I’ve got the market cornered!”
He’s got a monopoly on good barbecue there, so he can’t give that up.
I can definitely take you to multiple ice cream spots next time you come. There’s lots of great ice cream spots there.
Well, when you come here to Texas, I’ll take you guys – Jerod, I’ll take you any day.
They still let you in the States, Brett? They still let you come?
Yup, I actually have –
Well, he’s a dual citizen, right? Aren’t you a dual citizen.
Now I remember, he turned it over.
You gave it up. You wanted to be fully Canadian. You didn’t want to straddle the line anymore.
I was born here, so the American was bonus…
It was s a bonus. Here’s a bonus - you get to pay more taxes. [laughs] Congratulations, you get to pay the taxes of two countries.
You’d be surprised at how complicated forms get when you have two citizenships on these applications and stuff, when you travel abroad… It was a massive hassle, so it’s just simplified my life and just like “I’m good. I’m living here. I’m married to a Canadian. I just don’t need it.” But yeah, it was a lot of fun. But I actually have a Nexus pass, which is really fantastic for getting across down to the US. So getting down’s not a hassle. It’s more time and carbon footprint at this point.
Well, if you find yourself in the Austin, Texas area, for whatever reason, I’m super-close, so I’ll take you out.
Oh, I know. Don’t worry. Next time I’m in Austin, Adam’s getting a message on Slack about it.
Oh, man… The day before. Let’s go!
Hey, Anaconda is actually a local company to you. They’re actually based in Austin, Texas.
Is that right?
He’s been on Practical AI.
Never heard of it.
Smart guy. He’s been on Practical AI a couple times.
Is that right? A different – okay. Well, I hadn’t heard of Anaconda. So many anacondas out there…
The ones that will get you, and the ones that want to get you as a customer.
The ones that don’t want none. Brett, thanks for hanging out with us, man. It was fun.
Hey, anytime. Great talking to you both…
It was fun, Brett. Bye, friends.
Our transcripts are open source on GitHub. Improvements are welcome. 💚