#209: Inside Python's new governance model Transcript
00:00 We all got a bit of a shock to the system when Gito Van Rossum decided to step down as the leader
00:04 and top decider of the Python language and CPython runtime. This happened due to many factors,
00:10 but was precipitated by the so-called walrus operator debate. That's over at PEP 572.
00:17 It's been about nine months since then, and the Python community has responded and things are back
00:22 on track. I'm excited to welcome Brett Cannon to this episode to give us an update on where we are
00:27 and how we got here. He's a frequent guest and Python core contributor, so he has an inside view
00:33 of what happened. This is Talk Python to Me, episode 209, recorded April 18th, 2019.
00:39 Welcome to Talk Python to Me, a weekly podcast on Python, the language, the libraries, the ecosystem,
00:57 and the personalities. This is your host, Michael Kennedy. Follow me on Twitter where I'm at,
01:02 mkennedy. Keep up with the show and listen to past episodes at talkpython.fm, and follow the show on
01:07 Twitter via at Talk Python.
01:08 Brett, welcome back to Talk Python.
01:11 Thank you, Michael. Glad to be back.
01:13 It's good to have you back. I love all of your appearances here and all the stuff that you're
01:16 doing for the Python space. And this is kind of a double one. You're a core developer and
01:23 participating in this new governance model at a higher level. So you sort of helped create it and
01:27 then got put into position. So that's going to be so much fun to talk about. And I feel like,
01:33 I don't know how you feel, just to kind of kick this off, but I feel like the Python space is in
01:37 a brighter, nicer place than it was eight months ago, six months ago, whatever that whole time was.
01:42 Yeah, I'd like to think so. I mean, when Guido dropped his big surprise bomb on everyone on
01:48 July 12th, 2018, a day I will never forget. Things were kind of hectic there for quite a while.
01:53 And well, I'm sure we'll get into it. Things kind of calmed down back in December and then things
01:57 really settled down February. And I think we're starting to get back into our groove and things
02:00 are going, but I think everyone's more or less happy with where things are. We're still feeling
02:04 our way through because it's all still very fresh, but yeah, I'm optimistic about the future.
02:08 For sure. So am I. So before we get into all those topics though, maybe let's just
02:13 sort of set the stage with you as a guest. So folks know, tell us what you do day to day,
02:18 maybe in your regular job in the open source space, you've got a lot going on.
02:21 My job is actually divided into two sections. One is I am a principal software engineering manager now
02:29 as of last month at Microsoft, leading the dev team for the Python extension for VS Code.
02:36 Right on. Congratulations. That's great.
02:37 Yeah. Well, one of the reasons I did that was dividing my time allowed me to do that. And now
02:44 I get to divide the other part of my time working on Python. So Microsoft's just letting me basically
02:48 split my time between the two and just get to do both.
02:51 Oh, that's really cool. So they're giving you like 50% time or something in that realm to just
02:56 make Python better?
02:57 Yeah. Basically, when I agreed to be a manager, I also was able to then say like, I'd like to divide
03:03 my time between the two. And I say, yep, sure. Great. You're now on this steering council thing.
03:08 It makes sense. So go for it. So based on how I'm able to find the time, I get to spend it.
03:13 You feel like Microsoft's in a different place than it was 10 years ago with regard to open source?
03:17 Yeah. Had you asked me 10 years ago, would I even have been willing to consider working for Microsoft?
03:21 The answer would have been a flat out no. So very much a different place than it used to be. I know when I
03:26 told my family I was going to accept a job offer for Microsoft, their jaws dropped to the floor.
03:31 And then I had to explain, it's a different place. You don't know about the new CEO. It's a thing.
03:34 And it's continued to be a very good thing.
03:37 It seemed like that.
03:38 Yeah. Well, exactly. And you hear Satyaki talk internally where he says like,
03:42 when it makes sense to give back to open source, give back to open source. We're consuming it.
03:46 We should give back where it makes sense. And it's great.
03:49 That's fantastic. Yeah. I mean, when I saw him, researched him a little bit when he was promoted to the CEO job, I thought there's a chance that
03:57 something like this will be happening, but you never know, right? You never know what's going
04:00 to happen. But I feel like it, you know, like the sort of the good optimistic view that's coming to
04:05 reality. Yeah. I continue to be very happy to be working there and have absolutely no qualms.
04:10 And I would hope people who know me well enough know that if I had moral issues, I would not be there.
04:14 And I continue to be happy to be there. So.
04:16 Right on, right on. Well, you know, it's, it's kind of a world where you have a lot of choices
04:22 as a experienced developer. So pretty much if you're an experienced developer and you're somewhere
04:26 consciously or not, you're kind of choosing to be there, right?
04:29 Yeah. Yeah. I'd like to think so at least.
04:31 Yeah. Cool. All right. So that's the day to day W2 side of the world. What about the open source,
04:38 you know, MIT GPL side of the world?
04:40 And actually it's a T4 side of my world because I'm in Vancouver, Canada. So I get a different
04:44 text form. Beautiful. I tried to weave them together.
04:48 Yeah. Other than that, the, the open source specific bit is I've been a core contributor
04:55 to Python going on 16 years, actually, as of today of our recording. Exactly.
05:02 Wow. What a cool anniversary.
05:03 Yeah.
05:04 That's a long time.
05:05 Yeah. First commit was exactly in 20, sorry, 2003 as of today. Wow.
05:12 Yeah. That's awesome. And then on top of that, I am now one of the inaugural members of Python's
05:17 steering council, which we will obviously be getting into.
05:20 Yeah. That's the main topic, which is really cool. Congratulations on being nominated.
05:23 I know that your name got thrown around in a couple of ways and there was definitely different
05:29 competing styles of governance that were thrown out. And one of them was, we pick a new BDFL and people
05:36 are like, we're going to pick Brett Cannon. That'd be fun. Did that kind of scare you a little bit
05:40 or is that okay? Or what do you see? Like when you heard your name being passed around like that?
05:44 Yeah. So, I mean, we, we obviously can get more depth into it when later on, if we did,
05:49 when we discussed the possibilities we had for our governance models, but it was very humbling
05:54 and flattering when people brought up, well, maybe we should just stick with the single dictator,
05:58 even if they're voted in or what have you. And that my name, I feel like such a humble brag on this,
06:04 but my name was consistently tossed around as who, as the, one of the few people, people were
06:08 comfortable with potentially having that position. So it was very nice. I did have conversations with
06:13 my wife that if this did happen, are you okay with this? Luckily my wife, Andrea is very
06:17 understanding. It's like, yes, as long as you get to continue to take your month off from open source
06:22 and you still dedicate at least one full day every weekend to not touching your email on open source,
06:27 she was fine with it. So, but yes, it was extremely flattering that people thought that of me.
06:31 Yeah. I would have been happy had that been the outcome, at least on the personal level,
06:36 but your wife does a good job of protecting your energy and your time. And I think, you know,
06:41 we all kind of need something like that as well, right? Like it's easy to say, at least for me
06:46 personally, it's easy to say yes to a hundred things and then go like, wait, I have time for three of
06:49 these. Yeah, no, I'm extremely lucky that, I was already heavily involved in Python when I met her. So she knew
06:55 what she was getting into and actually I think, I don't know how much I've told this story publicly,
06:59 but when I first met Andrea, she did the usual and Googled me and then found out what I did.
07:06 And then subsequently she basically understood it. And then she later told a friend of hers who was
07:12 getting their degree in CS who I was and her friend said, Oh, that's epic. And she's never forgotten
07:17 that, that, that, that played a part in my life. And so she's always been very understanding about
07:21 making sure that I never felt like I can't participate. It's just been making sure it's
07:26 at a healthy level. Yeah, absolutely. Absolutely. And, you know, I guess maybe that's a good segue
07:30 into maybe back into July, not you individually, but you know, open source. Yeah. It definitely has
07:38 some, some sides that can be rough, right? Like you work on these projects and you don't have time or
07:42 energy necessarily to keep adding features or that you don't want to go in the direction that someone
07:47 else wants to go to. And then all of a sudden, you know, you're on the receiving end of somebody's
07:52 unpaid, unearned expectation, right? Yeah. Yeah. July of 2018 and the subsequent couple months before
07:59 then were a very rough time to be a core dev and specifically to have your name be Guido Van
08:06 Rossum. It was not, not a pleasant time in the world. For those who don't know, basically Guido ended up
08:13 going with an idea that's encapsulated in Python has proposal 572. It's assignment expressions.
08:19 Emily Morehouse landed that feature support actually, I think a month or two ago. And so it will be
08:25 actually in Python 3.8. So don't be upset if you don't know what it is. You'll know by the end of
08:29 the year, but it was extremely controversial. For those of you that don't know, it's a new piece of
08:34 syntax that basically lets you do assignments in context of where you can do expressions. So for instance,
08:41 an expression would be like the guard you put in an if statement, right? So you could do if a colon
08:48 equals function, expensive function call. Call a function. Yeah. Exactly. Now you have access to a
08:54 and you don't have to do that as a separate line like you normally would have done before where you
08:57 would do a equals expensive function call if a then do something. Right. And it sounds so like,
09:02 okay, we don't need it to be that concise, right? It's not like APL or something insane.
09:08 We could have that extra line. But the thing is, it opens up new possibilities around like
09:14 expressions, generator expression, listed comprehensions, things like that, where you can't
09:19 have more than one line, right? Like I want to for something in a group, test that thing and then
09:25 return some part of that, right? Those would actually be like double function calls without
09:29 the assignment operator and things like this. Exactly. There are certain things that you
09:33 basically couldn't do without making your function calls item potent and such in generator
09:39 expressions. I personally also think it's a key point that it improves the expressiveness and
09:45 conciseness of some code. Like before, if you did the a equals solution and then did the guard on the if
09:52 on the a, you didn't necessarily know if the author of that code meant for the scoping of that variable
09:59 to be just that if block. But if you use an assignment expression, it's very much communicated
10:04 that I do not expect anyone to necessarily touch this outside. Now, obviously, Python doesn't add
10:08 scoping to that level, but it does show intent. And because Python is always very much about readability
10:15 and productivity and making it easier to read code, the hope is, is that in those cases, this will help
10:21 in that area. Yeah. So I don't think we need to dig too far into this feature. But I do want to make a quick comment because
10:26 I think it's pretty interesting on like this whole feature and the debate around it was kind of what was the
10:32 straw that broke the camel's back for Guido and like all the pressure and stuff. But so my first impression was
10:37 interesting, not terrible syntax. I'm not sure that we need this, you know, so I'm just like, well, it's just adding more
10:44 syntax that I don't really know necessarily super. But like six months later, I'm like, yeah, that's a pretty nice
10:50 feature. I kind of like having it there. And so, you know, I feel like I could have been, you know,
10:54 theoretically a person like, oh, we don't need this, get it out of here. And now I'm, I'm pretty happy with it.
10:58 And that's not how it was. But I, you know, shifted a little.
11:01 Yeah. And honestly, that happens a lot. I mean, a lot of people had the very much the initial,
11:07 and I don't want to say knee jerk, that seems almost rude, but the initial reaction that you
11:11 did, Michael, where it's like, okay, that's nice. But do I really need new syntax for this? Because
11:16 I don't know how many people remember this phrase, because this was bigger back like a decade ago,
11:22 but saying that Python fits your brain, right? People like Python, because the core concepts to be
11:28 fully productive in the language are small and encapsulated and flow through each other nicely
11:33 enough that it doesn't take a lot of mental effort to fully understand how the general language works.
11:37 Now, that doesn't mean you understand how metaclasses work, and that's fine. But the general day to day
11:42 stuff can all fit in your head. And anytime we ever add anything to language, especially syntactically,
11:47 it causes everyone to suddenly go, is this going to finally be the thing that pushes a part of Python
11:53 semantics out of my head day to day, and I'm suddenly going to end up, we're going to suddenly swing
11:58 towards C++. And for 8% of the projects, you use 1% of the language, and you'll never fully understand
12:05 how it works. So, a lot of people had that reaction. And it was really, really voracious,
12:11 I think, because a lot of people realized it didn't, it opened up cases, as you said,
12:16 about generator expressions, and it did open express enough, but not enough people recognized
12:22 in their own cases where they would have needed this to alleviate a problem, that it caused a huge
12:28 backlash. Like, I saw people state publicly, I will refuse to review pull requests that use this
12:35 syntax. Now, granted, this was also said somewhat early on, and the PEP did evolve a good amount over
12:41 its lifetime. Like, when it first got written, it got sent to Python ideas, and then it got cleaned up,
12:47 and then it kept iterating there, and that got sent over. And then before complete rewrites were finished,
12:53 and everything that was brought up on Python ideas were put into that PEP, it got moved over to Python
12:57 dev, and then a whole other set of arguments happened that actually had been covered on Python ideas.
13:04 And so it was very, it was a very long, sustained amount of negativity towards Sweeto, and just the
13:13 PEP in general, and just a lot of, I'd like to say incorrectness, but honestly, a lot of rudeness,
13:18 and just people really overreacting, I think.
13:21 Yeah.
13:21 Why do you think that is? I'm not questioning, I know that it's out there. Like, if you do anything
13:25 on the internet, you know that no matter even how good intended it is, you're going to receive it.
13:29 And I feel like this is even deeper into people's identities, right? If you're a Python developer,
13:34 and you go messing with what Python is, like, that can definitely bring out some emotions.
13:39 I think a lot of people view what programming language they use, like, the equivalent to artists
13:47 having preferences over the paintbrush, or the pencils that they use, or what have you. Ask any
13:52 artist what medium they work in, and they'll tell you. But then ask them exactly what tools they use
13:56 to work in that medium, and they will have, like, a brand name of a pencil that they buy all the time,
14:01 and they will only draw with, because it just feels exactly the way they want. I mean, artists are very
14:05 opinionated about the tools they use, and software developers are no different. If you ask them what
14:10 programming language they use, and what, like, frameworks they use, the stuff that they live and
14:15 breathe every day at work, they will be very particular if you give them the option. And so,
14:20 the idea that someone is going to take their favorite thing, and potentially change it in a way
14:25 that they view as negative, and especially if they view it as changing it in a way that will
14:29 open the floodgates, because this is the other thing, is everyone always feels like this is going
14:33 to be a magic tipping point for Python, that suddenly we do this one thing, and it's going to lead to a
14:37 cascading effect, which, honestly, after 16 years has never happened. Because we had this exact same
14:43 argument when we were adding true and false as keywords, right? Like, this is long running,
14:47 like, people did not like the idea of making keywords out of true and false way back in the day,
14:52 and the world's not falling over. So...
14:55 I'm so glad they are.
14:56 Yeah, exactly. Everyone's happy with that. But once again, it's one of those initial reactions
14:59 is like, no, we really don't need this. This is unnecessary. We can keep using zero and one.
15:03 Python has existed without it for this long. Why do we have to go screw with something that's
15:08 working great? To, oh, yeah, this is beneficial. It's a lot of, over the years,
15:13 trusting Guido's design sense. And a lot of people just don't have that history of realizing that this
15:20 stuff's come and gone before. I mean, history is cyclical. And it just, we're just more connected,
15:27 and the community is literally just bigger. And it seems like we're constantly hitting, like,
15:32 exponential growth. I don't have numbers to back that up, but it sure seems like it sometimes,
15:35 which just leads to that many more people suddenly coming in and just feeling the need to comment and not
15:41 only provide feedback, but provide negative feedback in a non-constructive fashion. And
15:45 it's exhausting. And especially when there's one Guido or one PEP author and the whole community.
15:53 And if the community is growing exponentially, it's not shrink, it's not scaling the number of people
15:57 who are proposing something to the number of people who are coming and leaving comments.
16:00 And so, it can feel a little crushing, honestly.
16:03 Yeah, my visual thing when I heard about all this and Guido and all this, I felt, I was just like,
16:09 okay, there's like this huge press of all this community pressure. And there's like a diamond
16:13 at the end, like a sharp diamond, just focusing it all like right onto him. And I don't fault him at
16:19 all for just going, I just need to spread this out. The PSI is too high. Like the pressure is too high.
16:24 I can't take it all. It's going to make me unhappy, right?
16:26 Yeah. And I mean, the thing that people have to remember, it's not like Guido had staff,
16:30 right? It's not like, oh yeah, Guido can hand this off to his communication manager to handle the
16:37 feedback or a PM who's going to take the feedback from the community and sort through and go like,
16:40 okay, that person's just really upset and angry. That's just vitriol. That's not really providing
16:46 constructive feedback. Oh, that actually is constructive feedback. We should handle it a lot.
16:49 We're not staffed. We're not a company. We're a volunteer run group of people. And so, yeah,
16:54 it's very much, as you said, it's a lot of pressure pushing down to a single point.
16:58 And that's a lot. And in the end, he basically snapped or not snapped. That sounds overnight. He
17:05 basically broke.
17:06 He made a, yeah, he made a decision that that was enough. He'd had enough.
17:10 Yeah, exactly. For sure.
17:12 On July 12th, after all this, Guido sent an email unannounced. No one knew it was coming. Not me,
17:18 not single other core dev I've ever spoken to saying he's retiring. He was going to retire from
17:23 being the Benelit Dictator for Life for Python. And it was going to take a permanent vacation
17:27 because it's just like, I never want to have to go through this ever again. And I don't blame him.
17:32 Yeah, I don't either. There's an interesting interview with him on the MIT
17:35 artificial intelligence podcast, where it's, they actually talk a lot about the history and
17:41 this kind of stuff. And you can, you know, like sort of hear his story and the timeline.
17:44 He personally went through on that as well.
17:46 This portion of Talk Python to me is brought to you by Linode. Are you looking for hosting that's fast,
17:53 simple, and incredibly affordable? Well, look past that bookstore and check out Linode at
17:58 talkpython.fm/Linode. That's L-I-N-O-D-E. Plans start at just $5 a month for a dedicated
18:05 server with a gig of RAM. They have 10 data centers across the globe. So no matter where you are or
18:10 where your users are, there's a data center for you. Whether you want to run a Python web app,
18:14 host a private Git server, or just a file server, you'll get native SSDs on all the machines,
18:19 a newly upgraded 200 gigabit network, 24 seven friendly support, even on holidays,
18:25 and a seven day money back guarantee. Need a little help with your infrastructure?
18:28 They even offer professional services to help you with architecture, migrations, and more.
18:33 Do you want a dedicated server for free for the next four months? Just visit talkpython.fm
18:38 slash Linode.
18:39 If this is the end, you know, how much of the Python two versus three debate, do you think
18:46 wore him down such that this was enough to make him go, fine, I'm done, instead of just go,
18:51 well, that was a bad week or whatever?
18:53 No, I don't think the two to three transition in the community really did it. That was very long and very low level,
19:00 just continual over a decade. We'd all dealt with it. We've all seen that Python three,
19:04 one in the end, and everyone's been happy with that and all that. It's just been long.
19:10 I think it was really Guido had over time just been slowly scaling back his day-to-day involvement
19:17 anyway because he realizes that someday he will have to retire for just because he's tired.
19:22 Honestly, he could die. Who knows? It's just something we always had to plan for anyway.
19:28 So, he was always scaling back his involvement and this just finally, I think I saw it. I mean,
19:34 had you asked me before this happened when I thought he was going to retire, I would have said,
19:38 yeah, based on how he looks and how he's feeling, not physically look, just how he looks in terms of
19:44 his interactions and the way he's communicating and stuff, I would have said, yeah, I'd give it two or
19:49 three more years before he says like, okay, let's start to work on a transition. But I think this
19:53 hyper-accelerated it and made it a very clean and somewhat abrupt break to just like, okay,
20:02 we're just going to deal with this now. Maybe it was better because it's like,
20:05 this is how you're going to deal with it. You're going to deal with it now. Not like slowly ease
20:09 into it, right? Yeah. Although funny enough, you say this is how we're going to deal with it was not
20:13 really how it happened because if you go back and read his email, it's like, you're all going to figure
20:18 out how to deal with it. I'm just stepping back. Good luck.
20:22 I called the great Guido mic drop because he literally basically said like, I'm taking
20:27 permanent vacation and I'm not going to dictate how you handle this. I don't want to. And if you
20:31 know Guido, it makes sense that he would approach it this way that he wouldn't want to force anything
20:35 upon people. But it did put everything in an interesting position on how to handle this very
20:42 unique situation. Yeah, definitely unique. So maybe we can dig into that. Like it was,
20:48 I'm not going to be the leader or decider of this community anymore. Figure it out, like you said.
20:54 And so I guess that really started to take structure around PEP 8000, right? And that's where the
21:00 potential options were gathered up.
21:03 Well, that was honestly...
21:05 Was that farther down?
21:06 It took a little longer than that because first there were... We went through the five stages of
21:12 grief, right? Like there was literal denials. Like, is this a weird joke? He said vacation.
21:18 What's the date?
21:19 Yeah. Well, yeah, exactly. He said vacation. He didn't say retirement. Does that mean he could
21:23 come back? Could we maybe ask him to help make the decision? All this stuff. And I mean,
21:31 like I emailed private... I mean, we'd email him and he'd go like, yeah, nope. I'm not kidding. And
21:35 nope, I'm not making any decisions. I'll provide feedback where I think it's timely and appropriate,
21:40 but otherwise I'm staying out of it. He basically really took a step back and just like, I'm not
21:44 getting involved. I will provide suggestions if I think something would really make a difference.
21:48 But I mean, really like he... I don't know if I could... He made more than five suggestions
21:54 throughout the history of the whole process. So like he really stepped back. So yeah,
21:58 so we went through all that and then we started to talk as a group, how are you going to handle
22:03 this? How do we make this decision? How do we decide how we're going to decide even, right?
22:08 It's a really odd situation to be dropped in where you have a preexisting group of people
22:13 who had a very clear governance structure of there's Guido and that's it. Basically,
22:19 we can come to our own agreements, but basically Guido always was the last resort, was the final
22:24 decider, was the king of the seven kingdoms or queen. It was the way it was. And so it was very
22:32 weird to suddenly go like, yeah, you have no leadership now. There's absolutely no one in
22:35 charge. No one has any more rights than anyone else technically to make decisions, to say anything.
22:42 it truly had to all come through consensus, which is dicey, right? Because you have to also remember,
22:47 this is the same group of people who also had just gotten really riled up about Pup572,
22:53 who are very passionate about this project, who all have opinions. And we're talking about a project that
22:59 like for me, for instance, I've put 16 years of my life into this, right? So I'm deeply invested.
23:05 Hundreds of thousands. Yeah. And millions of people, this is their job, right? Or they've
23:12 built companies on it or they built products on it. I mean, there's, there's a lot at stake.
23:15 Look at you, right? If I screw this up, suddenly poor Michael doesn't have a great podcast to talk
23:20 to and has his training that he does. And like, oh my God, I suddenly put one of my favorite podcasters
23:25 out of work because I screwed this up, right?
23:27 Yeah, no pressure.
23:28 No pressure. It was a heavy, it was a heavy responsibility, but it was also a heavy one
23:33 with no clear guidance on how to handle it because no one was in charge. It was really weird. It was
23:39 pretty much almost the epitome of anarchy. It was just a bunch of people who happened to know each
23:44 other having to figure out how to run themselves.
23:46 It's almost like there was a country in the government, the leader just stepped down or
23:50 something, right? There's all these people that are still, they're committed to being there.
23:53 They live there or whatever. Now, what are they going to do, right?
23:55 Yeah, exactly. It's like we were a little country and suddenly the government just said,
23:58 yeah, we're just allowing ourselves. Good luck. Bye.
24:00 Okay. How do you rebuild a government from scratch? I mean, who gets to ever do that?
24:08 And a lot of people don't because it turns out it's kind of hard.
24:11 Yeah. Yeah. It's definitely hard. I guess maybe we could talk about some of the options. I thought,
24:16 I know we spoke a little bit on Python bytes long ago, probably August or late July about this.
24:23 Let's maybe just go through some of the proposals that people had.
24:26 Yeah. So basically, while we were actively discussing how we were going to handle voting,
24:31 we started to more or less quickly solidify that we're going to handle it through the PEP process
24:36 because that's what we were all familiar with. Things would have to be written down and very
24:39 clearly defined because this was basically going to be our version of a charter or constitution or
24:44 basically our set of rules and laws of how we were going to run the project. So that quickly at
24:49 these got settled. And in the end, we ended up with six options. One was PEP 8011. And by the way,
24:55 all of these PEPs start from 8010 and stay within the 8010s range. So 8011 was a proposal to have
25:05 a trio of Pythonistas. So basically that was taking Guido and split it up into three ways,
25:10 more or less.
25:11 Were they going to have like a voting bloc style where they all were kind of co-equal or was it
25:17 this person's going to handle this aspect and that person's going to handle that aspect?
25:21 It was very, basically, we were going to elect three people and it was, they were going to act as if
25:26 they were unified as a single dictator. So it was very much just-
25:31 I see.
25:31 Single responsibilities split into thirds and basically had to agree, at least two out of the
25:36 three had to agree to make anything happen.
25:38 Yep. Okay.
25:38 To compare that to actually 8010, which I accidentally skipped, which was basically,
25:42 let's have an elected dictator and a single individual. That was what you commented about
25:47 where my name got tossed about.
25:48 Exactly. Guido stepped down, who's going to take his place?
25:51 Yeah. And that one was a little interesting from the perspective of some people said like,
25:54 we really can't have a discussion about this, that PEP and that model without knowing who we
26:01 are specifically talking about. Right? So some people are like, I'm not even willing to discuss
26:06 this unless we have a name attached to it, because it's really going to be a vote for that person.
26:10 And other people are like, no, it shouldn't be. It should really be about whether or not we like
26:14 this model and then we will just all choose who we think should handle that. And if you happen to
26:19 think no one, that's fine, but we don't have to have it specifically attached to a person.
26:23 It honestly, very quickly though, became very clear that people in general did not like that model.
26:28 So it was there kind of to fill and there was some initial interest in it, but it really didn't
26:34 stay a top contender for very long. In my opinion, the trio one did, I will say PEP 8012 was a
26:41 community governance model. That one was basically following rust model, if I remember correctly.
26:49 Yeah, exactly.
26:49 And that's very much basically people form working groups and the working groups make decisions and
26:57 there are ways to form working and the PEP specified how working groups would be formed and how they
27:02 would be potentially dissolved. And, but basically everyone's equal footing. People could create work
27:08 groups as necessary. People would get voted into adding to working groups and then those working
27:15 groups would work together to reach conclusions for things. That I believe came in actually second
27:19 in all the voting in the end. Well, the trio selection was third.
27:23 Okay.
27:23 Pep 8013, external governance model. That one was somewhat interesting, but actually never really
27:31 caught on with anyone. That one was basically saying what we should do is almost run Python as a company
27:39 where we have some people from outside the project act as almost our, our VPs. And we just go up and
27:46 report to our VPs about what's going on. Like, here's a pep. I'm going to give you the quick
27:50 presentation on it. They would ask questions and they would say, yep, we're going to do it. Or they
27:54 would say, nope, you need to go fix these things.
27:56 Kind of like a board of directors.
27:58 Yeah, exactly. It was very much a, yeah, you come forward with your proposal. They'll look at it
28:03 during your monthly meeting, sync up with them and they'll go, you got to change these things,
28:08 these things, or yep. Okay. It's all good. And we'll take it and go for it. But the interesting
28:12 was it was specifically required the members of this board to be not Python core developers to try to
28:20 bring in basically unbiased viewpoint from outside the project. And honestly, I think a lot of core
28:27 developers just didn't like that idea. They thought too much history and too much understanding how the
28:31 project works and just potential disconnect from the project of the community would be too much.
28:35 And it necessarily wouldn't lead to the right result.
28:37 Yeah. The people making decisions, they don't have as much skin in the game, right? They don't have to
28:42 live with it. They don't have to implement it. They just like it or don't like it.
28:46 Yeah, exactly. Right. So it was one of these things that honestly, I just, it was an idea that got
28:52 proposed, but I don't think it ever, ever really went anywhere.
28:56 So the next one was 8014. That one was basically anarchy. And actually in the pep, Jack Jansen wrote it.
29:07 He said he would have just used the term anarchy because it was technically accurate,
29:11 but there's such negative connotations around the term that he didn't want to use that in the wording
29:16 of the actual pep. But it was basically just everyone's on equal footing. People can propose
29:20 stuff. There would be a voting certification council kind of, where basically there would be a group of
29:27 people who, when people wanted a PEP decided, for instance, they would call for a vote and people would
29:32 vote. And that council would decide whether the vote passed or not, but they would decide not only
29:37 based on numeric numbers, but also on who voted and who voted how. And it was potentially going to be
29:43 open to the whole community or just core devs. It was basically after them to decide how they'd run the
29:48 vote and make that final call of how that outcome really looked. So I think it was just basically too
29:55 wishy-washy for a lot of people to go like, yeah, I want that.
29:58 Yeah. Some of these juice sound kind of wishy-washy. It's like, well, that could be good or it could go
30:01 really bad. And it depends who's here. And it just, I don't know. It just, it seems really vague and vague
30:06 and like law governance kind of seems like a bad combination.
30:11 Yeah. And so, I mean, the idea of like, let's not necessarily put people in the same position that
30:15 Guido has put into, but I think developers being developers, we like structure. And I think there just
30:22 wasn't quite enough structure for that to catch.
30:23 Sure. Okay.
30:24 The next one was 8015. That one, Organization of the Python Community, it was kind of a hybrid between
30:31 let's do everything through working groups and let's do everything through a trio, but with a
30:35 panel of five. But everything was basically going to be done through a more or less a vote.
30:39 So it was another one of those that had ideas, but I think everyone viewed it as enough of a hybrid
30:46 that it never quite caught the eye of people who liked the trio idea or who liked the working group idea.
30:51 And honestly, if anything, I know from my, when I was thinking about it, I was like,
30:54 I was thinking this was really going to be a vote splitter between those two.
30:58 Yeah.
30:59 Depending on what voting system we ended up choosing in the end, that was going to potentially hurt those
31:03 other peps.
31:04 Right.
31:05 So it was there, but it never, I don't think once again, really caught on because it wasn't quite
31:10 clearly as strongly positioned as like, this is how we're going to do it. And this is a easy way to
31:16 explain it versus it has a panel or a board or whatever term, but it also has working groups
31:23 and it's all been done through voting. So I just, I think people typically in all this kind of much
31:28 like politics felt very strongly on one way or the other. And this was once again, too much of a hybrid
31:33 to really catch it.
31:33 Right. This middle ground. Yeah. It's a little too nuanced or whatever.
31:36 Yeah. And then the last one, which was the one that ended up winning, it was 8,016.
31:41 It's now actually known as PEP 13 and that's the steering council model. And basically what that
31:46 did was it said, okay, we're going to choose a council of five people. And those five people are
31:55 going to have basically absolute power, except for changing what's in PEP 13. And PEP 13 basically said
32:03 they can make any decision. They make decisions in all the peps and all that stuff and basically
32:08 decide how things happen, but they should always try to seek to do it through consensus. So it's,
32:14 it's funny. It basically says short of what's written in PEP 13, the council has absolute power,
32:18 but they should look to use it as little as possible.
32:20 Right. I see. So they could theoretically take the steering council down and like change the model
32:25 or something, right?
32:25 Well, no, because that's actually specifying PEP 13 that they can't do that. So that's one of the
32:29 things they can do. So PEP 13 very much is not, is not about necessarily specifying what powers the
32:34 board has, is very much specifying how the board gets elected, how the council, sorry, gets elected
32:39 and how the potential voters for the council get brought in. So the PEP is very much structured
32:46 around the council can do almost anything except it can't dictate how the elections occur for the
32:51 council. And they can't dictate how someone becomes a core developer and who's considered a core
32:55 developer. And that's really what PEP 13 is focused around because otherwise,
32:59 sort of keeps the few pieces in place to keep it on.
33:02 Yeah. And the interesting thing was, is the way it was kind of structured initially,
33:05 and it still is, is it was almost worded in a way of, I publicly said this when it was being
33:11 discussed is this PEP was almost worded as if it was kicking the can down the road. If you know,
33:15 this expression of basically we're going to elect a council that's going to choose how we're going
33:19 to run the project. Because once again, it was, as it was worded is like they have absolute power,
33:23 but they're not supposed to really use it. So it was really like, all right,
33:25 are we going to do kind of more of a, are they going to act more like a trio or are they going
33:29 to do more of a working group approach? And the PEP actually said they should look at the voting
33:33 results of this overall thing and work with that to choose how to happen, how it should work.
33:39 Now, I personally didn't like that approach because it's like, that's not really what's going to
33:45 happen here. What's going to happen is you're going to elect a council that has power more or less
33:50 like, like Guido, except if I had five ways and you're just asking them to please consider doing other
33:55 things, but technically they don't have to do any of it. As long as they don't interfere with how
33:59 core devs are chosen and who qualifies as a core dev and how the elections happen,
34:04 they can basically do whatever they want. And so basically I was saying, you might as well just
34:08 specify the trio because the hopefulness of that, I just didn't think it was actually going to happen.
34:12 Yeah. So what's the difference between the steering council and the trio of Pythonistas? I mean,
34:17 it feels like maybe the steering council just has more, but is there some other principal
34:22 difference between those two models?
34:23 From the top of my head, this is some of this information, luckily it's just completely left
34:28 because it's no longer relevant. Now it's all historical interest.
34:31 That's right.
34:32 But for whatever, technically I don't, the election cycles are different. Like the trio,
34:36 I think was going to be elected for longer and PEP 13 has the councils elected per release cycle.
34:42 Okay. And right now that's every 18 months, right?
34:44 Although this initial one's truncated because we have a release later this year and we all got elected
34:50 starting in February. So this first inaugural group is going to be kind of truncated,
34:55 but it was also brought up that pretty much every group that has a system like this,
34:59 pretty much once you get on the council, chances are, unless you really screw up or you step down,
35:04 you're just going to keep getting reelected because people are always happy with the status quo
35:09 working much like people not wanting to add new syntax to Python. If the status quo works,
35:13 why mess with a good thing? So I think everyone kind of went into it knowing that the first set
35:17 of people who got elected will more or less continually be reelected.
35:20 Yeah. They had a chance. Yeah.
35:21 Sticking around for a long time.
35:23 But yeah, I think it was more the fact that the steering council, PEP, very explicitly says,
35:28 try to find consensus. Don't try to spring anything. Don't try to run as a dictator.
35:32 Don't suddenly make big sweeping decisions. Try to talk to the group and try to work through it.
35:36 But in terms of a last result backstop, the council's there as necessary. So I think that's
35:43 really the difference. This is the spirit really behind it.
35:45 Okay. Yeah. Interesting. Cool. That's the model that won, the steering council model.
35:49 Yes.
35:50 And we've had the elections.
35:51 Yes.
35:51 And we have Barry Warsaw. We have you on there. We have Carol Willing, Nick Coughlin, and it's really nice to see Guido is on there as well. That actually
36:01 surprised me a little bit, but in a good way.
36:03 Yeah. So actually, I'll admit Guido actually asked me if I thought it was a good idea personally. And I
36:08 said, yes, because Guido said, he's always said he wanted to continue to contribute technical insights
36:14 in his design sense, which I think we can all admit based on how Pythons turned out is very good.
36:20 And actually, one of the reasons a lot of people didn't like the new dictator model that 8010 proposed,
36:26 because a lot of people said that they didn't feel there was a single person other than Guido who had
36:32 his design acumen, his technical insight and abilities, and his way to kind of project and manage the
36:41 community as it were. So when Guido decided to do it, he said, like, I'd like to still run and be a part of
36:49 it not because he necessarily likes the day to day like management bits, but because he still wanted
36:53 to be able to contribute his technical insights and his design acumen. And I think it honestly also
36:58 provided some transition and some validity to the council, right? Because while Guido is not running
37:06 it as a dictator anymore, he's still participating in an acts of nice way to just smooth things over.
37:10 And it's not just suddenly jarring like, all right, now the person who was involved is completely gone.
37:14 It's like, no Guido's here. He's just sharing the load now across four other people.
37:18 Yeah, exactly. He doesn't have to take all the work and especially he doesn't have to take the
37:23 negative pressure out there, right?
37:24 Yeah, exactly.
37:24 So he can let you have that.
37:26 Just kidding.
37:27 That's good.
37:31 This portion of Talk Python to Me is sponsored by Backlog from NewLab.
37:35 Developers know the importance of organization and efficiency when it comes to collaborating on a team.
37:40 And Backlog is the perfect collaborative task management software for your team.
37:44 With Backlog, you can create tasks, track bugs, make changes, give feedback, and have team conversations
37:50 right next to your code.
37:51 You track progress with features like Gantt and burndown charts.
37:54 You document your processes right alongside your wikis.
37:58 You can integrate with the tools you use every day like Slack, Jira, and Google Sheets.
38:01 You can automatically register issues from email or web form submissions.
38:05 Take your work on the go using their top rated mobile apps available on Android and iOS.
38:09 Try Backlog for your team for free for 30 days using our special URL at talkpython.fm/backlog.
38:16 That's talkpython.fm/backlog.
38:21 So how does it feel as a core dev, you know, inside that group now that this change has been made?
38:30 Like, does it feel significantly different?
38:31 Does it feel like kind of the same?
38:32 And I guess it's worth also pointing out that from July until like two months ago,
38:37 whenever this election was finalized, there was no progress on peps or other decisions.
38:42 Or like, you had to first decide how to decide.
38:44 And now you can start making decisions on stuff that's been backlogged, right?
38:47 Yeah, so and only on top of that.
38:50 So yeah, you're right.
38:51 Basically, anything that Guido would have needed to make a decision on, which is pretty much
38:55 anything in a PEP or anything fairly controversial, dev team felt split on.
39:00 But where the status quo was not an option was completely put on hold.
39:03 Peps came in, but no peps went past being open.
39:09 Nothing.
39:09 We froze completely from July 12th all the way until February 3rd, I think?
39:15 3rd, 4th?
39:16 Yeah.
39:16 I can't remember.
39:17 I was in New Zealand.
39:18 So my day of the year was completely skewed.
39:20 It wasn't the same day.
39:21 It was not the same day that everyone else was dealing with when they got the results in
39:24 and they were voting.
39:25 So yeah.
39:27 And then on top of that, what I also added to this was every so often, usually at the
39:32 language summit, Guido would do what we called a PEP parade, where he would go through
39:35 all the open peps and sometimes just make decisions right then and there that he just
39:39 hadn't gotten through or had been putting off or for whatever reason, had open peps that
39:43 we had not dealt with.
39:44 And so at language summits, sometimes he would go like, okay, let's go through the list of
39:49 open peps.
39:49 Like, okay, let's keep working on that, reject that, accept that.
39:53 And it's literally, we just go through the list and we just get basic updates and shut
39:57 some of the, close some of them, accept some of them, and then just kind of kick some
40:00 of them back up into happening.
40:02 But we hadn't done that in the 2018 language summit.
40:05 So not only did we have anything that came in, but we had everything that was still open
40:10 prior.
40:11 So actually, when we started, I did a quick count and there were 38 open peps when the
40:17 steering council was formed for the first time.
40:19 So we've had a backlog.
40:21 But in terms of how it feels, I have a weekly meeting now with four of the people who I consider
40:28 friends.
40:28 So that's kind of cool.
40:30 It allowed me to ask Microsoft to let me split my time more evenly and more in Python's
40:36 favor than I had got to before, which was great.
40:39 And so the workload honestly hasn't actually really felt like it's increased too much.
40:43 Although honestly, a lot of stuff's been management stuff's been backing up over the last week,
40:48 but that's here nor there.
40:49 But yeah, otherwise, it basically just feels like a more concentrated conversation with
40:54 Guido that I normally would have potentially had anyway with some other people.
40:57 And I guess kind of hard to balance based on the amount of extra time I'm now getting things
41:02 to work, the things that Microsoft's given me versus before and the added responsibility
41:06 because there's technically added responsibility.
41:09 But it also doesn't feel bad because like I trust Barry and Carol and Nick and obviously
41:13 Guido.
41:14 And so having us all just basically decide as a group over something versus just asking Guido
41:18 and all going, okay, sure.
41:19 Technically, it doesn't feel more stressful that way.
41:21 Yeah, it's probably not so different.
41:23 I mean, if Barry and you and Carol and Nick all went to Guido and said, hey, I know you're
41:27 considering this.
41:28 We all don't like it.
41:29 He would probably take that strongly under consideration, right?
41:32 Yeah, exactly.
41:33 So if there was an all out like beforehand, the pre-July 12th days, yeah, the whole community
41:40 just like, don't do it.
41:42 This is not a good idea.
41:43 Please don't do this.
41:44 He really would have taken it under consideration.
41:45 And now there's just five of us.
41:46 Right.
41:47 So that's the benevolent part.
41:49 He wasn't like a violent dictator or something.
41:52 He was a benevolent dictator.
41:52 You could talk to him.
41:53 I mean, to be perfectly honest, the hardest part to deal with this right now is we are
41:57 all both the council and everyone who every other core developer.
42:00 We're still just trying to figure out how all this functions.
42:03 It's like very topical.
42:04 Like literally before I came on to do this recording with you, Michael, is I opened up
42:09 a proposal to set voting timelines in PEP 13 for new core devs and for changes to the
42:16 PEP itself.
42:17 And I thought it was innocuous.
42:19 It was specifying we're going to leave votes open for one week for new core devs.
42:24 And we're going to leave votes open for two weeks for any changes to PEP 13.
42:27 That was it.
42:28 The council did think it was easy.
42:30 The council thought it was simple.
42:31 And then right now we're having an active conversation like, well, okay, when we're proposing changes
42:35 to this PEP.
42:36 And I did it as one because in my mind, it's just specifying timelines.
42:40 So it was a single change versus, oh, this is one proposal for one timeline and one proposal
42:45 for another timeline.
42:46 But it's led to like, hey, you didn't talk to us about this.
42:49 Why are you doing two at once?
42:51 Just all this stuff that we just never really had to think about before.
42:54 Because before it would have just been, we just did it and it was over.
42:57 But now that we're trying to do this more consensus based and, but we also don't know where the
43:02 line of, do we really need to bother Python development team with everything?
43:06 We don't know quite.
43:07 We're still filling out like, where's the line?
43:09 Where do we bring in the whole team versus let's just get it done and let's not bother
43:14 everyone.
43:15 And everyone's still feeling this whole situation out.
43:18 So that's probably the biggest difference is just, we before this just innately kind of
43:24 just knew how things ran and how things worked and when we should and shouldn't do things.
43:28 And now it's kind of more of an open, okay, I'm not quite sure how to have the situation.
43:31 I'm going to try it and we'll see what happens.
43:33 And some people are happy and some aren't.
43:36 Luckily, everyone's being very nice about all this, but we're, we're.
43:39 It's like when you move in with someone, right?
43:40 There's these things that come up.
43:42 You have no idea.
43:43 Like, I didn't know you left the dishes out all night.
43:45 I always do them.
43:46 I can't believe I wake up.
43:47 Like, wait a minute.
43:48 That was a thing.
43:48 I didn't even know this was a thing, right?
43:50 Just all these surprises, right?
43:51 And then you quickly learn about which ones you can live with and which ones you really
43:54 are going to have to work with the other person to change because it just drives you
43:57 bonkers.
43:58 Marriage.
43:59 So, yeah.
44:01 So it's an ongoing, it's an ongoing conversation really between the council and the core devs about
44:07 how we want to make this situation work and how best to handle things.
44:12 Because we honestly, a lot of this is brand, brand new and it still is.
44:16 Yeah, sure.
44:17 You're optimistic about it in the end though?
44:19 Yeah.
44:19 I mean, if you look at it, we've gone through, I think the vast majority of the open peps
44:26 have now either been closed because they were rejected or we deferred them because they were
44:31 just sitting there incomplete.
44:32 Or we've been finding BDFL delegates.
44:35 We kept the term for finding people who we were going to delegate the decision of a PEP to.
44:41 Or the steering council has decided that if the steering council ever makes a decision,
44:46 one of us will be the point person, but we'll decide as a group.
44:49 Unless it's very specifically, we're specifically choosing an individual for a reason like Guido
44:53 on some typing peps.
44:54 It's just going to be Guido.
44:56 He's not going to need to consult the rest of us because Guido is the expert and has a very specific...
45:00 That's his main focus.
45:01 His focus and has a vision and we trust him on that.
45:03 So he doesn't need to consult with the rest of us on how to handle typing peps.
45:08 But like two peps just the other day, I assigned to myself as the delegate, but it specifically
45:12 says Brett Cannon in parentheses on behalf of the steering council.
45:16 But yeah, I mean, otherwise it seems to be going well.
45:18 As I said, I think it's really just at this point feeling out how, what the balance is in
45:23 terms of what the steering council should do on its own and be self-driving versus getting
45:29 feedback and direction from the core team versus when we should just make decisions versus
45:36 consult and just where are the lines?
45:39 Where's the balance?
45:40 What's everyone happy with?
45:41 And but otherwise, yeah, I think it's good.
45:44 It's stable.
45:45 It puts in place a mechanism to make sure there is always basically five people in charge, which
45:50 helps give some form of stability that I think was really critical that we never really,
45:56 we kind of all thought about in the back of our head about Guido always talking, joking
46:00 about his retirement, but never really took too seriously because we figured it would be
46:03 a slow control transition versus a more abrupt get it solved in the next six months transition.
46:08 Yeah.
46:08 Otherwise, yeah, I think it actually puts us on better footing because as I said, yeah, because
46:13 now there's an explicit mechanism on how to always make sure there's always five people
46:17 around to be in charge of the language and to make sure that it's functioning.
46:21 Right.
46:22 Yeah.
46:22 And with five, there's probably always going to be some continuity, right?
46:25 Like you won't have the council overthrown.
46:27 It will be unlikely that that happens.
46:29 I would be a little shocked.
46:32 We released the voting numbers and there were, once again, it feels like such a humble brag,
46:38 but Guido and I both got voted fairly high, fairly quickly, but everyone across the board
46:43 got pretty good numbers.
46:45 So I don't think, I feel like the spectrum of vote counts, it doesn't look like all of
46:51 us like barely squeaked in compared to anyone else.
46:53 So like if just one person had flipped their votes, it would have been a completely different
46:58 outcome.
46:58 So I think there would definitely, there'll definitely be stability in transitions of certain
47:03 people consistently making it through.
47:05 And once again, I suspect all five of us have a decent chance of being reelected if we chose
47:09 to, just because once again, if people decide the status quo works out and we, as we work
47:13 out the, feel out these kinks and how people want to handle things, I think as long as
47:17 we don't step on anyone's toes and make anyone feel really marginalized and like the core team
47:21 doesn't have their voice being heard.
47:23 Hopefully they're just going to be happy and just like, all right, just keep doing what
47:26 you're doing and won't be an issue.
47:28 Yeah.
47:28 So like if like for a three, nine, you guys come out and say, we've decided to make a
47:32 Python a statically typed language and we'll have interfaces and all that, like that
47:36 may cause some ruffled feathers, but.
47:38 Yes.
47:38 And actually there is a way to recall the entire, to recall individuals or the council.
47:43 in PEP 13.
47:43 So there is a mechanism to basically.
47:46 Interesting.
47:46 Pull the lever and eject us.
47:48 I don't see that happening because Lord knows none of us want that for Python either.
47:52 So yeah, no, I think it's going to work out well.
47:55 It's just a matter of, as I said, just figuring things out.
47:58 Ask me again in a year and then I could probably give you a bit more definitive answer, but I'm
48:03 very optimistic and I, and it's not even cautious.
48:05 I'm just flat out optimistic.
48:07 Yeah, that's great.
48:08 I am as well.
48:09 I mean, there was a lot of uncertainty in August and September, but now it feels like,
48:13 well, the people that were generally running it, the core devs who are doing the heavy lifting
48:19 are kind of still doing that.
48:20 Right.
48:20 And people who are well-known in the community are kind of making the decision.
48:24 So yeah, I mean, the day-to-day never even stopped, right?
48:27 Even on July 12th, people were still committing.
48:30 I think the day-to-day changes and PRs and issue closing and all that stuff, that never,
48:36 ever stopped.
48:37 So that day-to-day definitely was never, never threatened and really an issue.
48:41 So yeah.
48:42 Yeah.
48:43 Cool.
48:43 So one thing I did want to ask you about is Python's been growing like crazy and it's been
48:48 bringing people from different areas and its growth in sort of corporate development world
48:53 is certainly seems like it's growing.
48:56 And there's a lot of folks who are coming in and, you know, Peter Wang, who was one of
49:00 the potential people to be in the election, one of the candidates, I guess you would call
49:04 him for the steering council.
49:05 He was on the show 198 and he had some really interesting thoughts that having a lot of these
49:11 corporate developers that are used to working with say Oracle or Microsoft or someone who
49:16 they're paying and then their role is to work with the tools and then maybe ask for features
49:21 or give feedback because they have this commercial relationship.
49:24 A lot of them may be bringing like that mentality to interacting with the core devs and the Python
49:30 community.
49:30 And he's, he put out the idea that maybe that's going to change.
49:34 It's going to put different kinds of pressure and maybe a mismatch of expectations on these
49:39 interactions.
49:40 What do you think?
49:40 Are you concerned?
49:41 Do you think it's okay?
49:42 I'm not concerned just because I haven't seen it yet.
49:45 Okay.
49:45 That's good to hear.
49:46 I've not seen any new corporate onslaught of suddenly corporations coming in and saying,
49:51 I want this.
49:52 I want that.
49:53 I mean, the closest thing I can think of that's even on that vein is VX works has been
49:58 working on adding Python to support to the real-time operating system.
50:01 But they came in and just said like, okay, hey, we want to add Python support to VX works.
50:06 We have some patches we need to make Python work.
50:08 What can we do to try to make it an official supported thing?
50:12 And we pointed them to the PEP.
50:14 I can't remember the number of what it takes to be an officially supported platform.
50:18 And that honestly, probably what's best is if you have patches that just make things function
50:22 better.
50:23 We'll take those.
50:24 But if they're very VX works specific, we'll probably just ask you to maintain your own
50:27 patch set.
50:27 But that was it.
50:28 They very much came in and were very inclusionary and not making demands like, we are this company
50:34 and we want this and you should make this happen.
50:36 Like some users can be.
50:39 Yeah.
50:39 His thought was more not in that realm.
50:42 Like I can certainly see a good relationship there.
50:44 It was more like there's a person who is sort of a nine to five developer.
50:48 They're not super passionate.
50:49 They were doing Java, but then they got moved onto this other project.
50:51 And oh, it happened to have been done in Python.
50:53 And maybe it's Python 2.
50:54 And it's kind of old and has these problems.
50:56 And they didn't really choose Python, but they have to make it work because they were told
51:00 they have to make it work.
51:01 And now you support the package that's in the way of their thing working.
51:05 And so you receive, you know, sort of that disconnect there.
51:09 Yeah.
51:09 So that would be more at the community level, I would argue, though, not at the core dev slash
51:14 council level.
51:15 So like.
51:16 Yeah, yeah, of course.
51:17 Yeah.
51:17 So I personally haven't bumped up against that.
51:20 But the other thing I would say is, is Python's been successful at the corporate level for
51:25 quite some time, I would argue.
51:27 Right.
51:28 It's not like Instagram showed up yesterday.
51:30 And Instagram is probably one of the largest single Python applications in terms of volume
51:35 of users out there.
51:36 So I don't think it's necessarily any different than any other growth we've seen in the community.
51:42 I mean, from my perspective on the Python extension of VS Code, for instance, I do see somewhat
51:49 uptick in terms of people learning.
51:51 And I definitely see that as increasing over the last year and a half since I've been leading
51:57 that team.
51:58 But I haven't seen a shift in something like all these corporate people coming like Google
52:01 without this, I can't use this.
52:04 Yeah, yeah.
52:04 All right.
52:05 That's good.
52:06 But I do see where I have seen a feeling of corporations and just the general enterprise
52:13 world coming in saying like, okay, what Python, we now really rely on Python.
52:17 This isn't just some little side thing that we rely on.
52:20 Like, we're billions of dollars in kind of relying on.
52:25 What are we going to do?
52:26 Because something I think a lot of people really don't realize is if you look at the
52:32 popular languages out there, and I know you can choose whatever scale you want, right?
52:36 Python's always in the top five now.
52:38 Like, I do not see anything anymore that puts us at six.
52:41 We're always key on five.
52:42 And honestly, I'm seeing more and more where we're in the top three.
52:45 But regardless of which of those top five languages you choose, we're consistently the
52:49 only language that is fully volunteer run, right?
52:52 Like, JavaScript is run by a committee that is staffed by people paid to work on that committee
52:58 and on JavaScript by major corporations, usually browser vendors.
53:02 C++, same thing.
53:04 Companies that really heavily rely on C++ and care enough that they will employ LLVM and GCC
53:09 developers to get their compilers to run faster.
53:13 PHP's got Xen and they've got stuff.
53:15 I mean, the list goes on.
53:16 Java's got Oracle.
53:17 I mean, we are the only one at that level that is completely run by a group of volunteers.
53:23 Even Rust, right, is backed by Mozilla.
53:25 And that's very much a community-run project.
53:28 But they still have the backstop of Mozilla.
53:31 Python doesn't have that with anybody.
53:33 I think that gives some corporations pause that like, well, okay, why does all the volunteers
53:37 walk away?
53:38 With Go, I know at least Google's there.
53:41 And Google's so invested that unless Google tanks, Go's going to be around.
53:45 Google's not about to tank.
53:46 Same with Rust.
53:47 Like, Mozilla's backing it.
53:49 Mozilla's not about to go anywhere, even as a nonprofit.
53:51 So that's in good hands.
53:53 All those kind of languages have that kind of financial stopgap to make sure that nothing
53:59 happens.
53:59 Now, we have the PSF, and that's great.
54:02 But it's still, Anna, you could argue that having that nonprofit is really what our backstop
54:06 is.
54:07 But the PSF has always perfectly kind of taken a light approach in terms of some of the core
54:13 devs hoped and people in the community create the PSF.
54:15 The PSF didn't create core devs, basically.
54:17 Right.
54:18 It's more there to support the legal mumbo jumbo and the trademarks and all that kind
54:23 of stuff, right?
54:24 It doesn't actually support you as this is the company that drives the tech.
54:29 Yeah.
54:30 It's not like the Mozilla Foundation in that regard.
54:32 The PSF was, yeah, very much created to handle the legal holdings and issues for Python.
54:37 And then it kind of grew into this big driver of the community.
54:40 But it's purposely always been kept at arm's length from the development team because they
54:45 didn't want no politics ever came into the actual development language.
54:48 But they're there.
54:49 I mean, they will totally provide support as necessary for services and such if we need
54:53 them.
54:53 But I don't know how corporations feel about that.
54:56 I don't know if they like that idea of a nonprofit being the backstop for whatever.
55:01 Now, I will say that some of the newer things we're doing other than talking about PEPs,
55:05 one of them is we have started to talk with the PSF about potentially getting like a project
55:09 manager for very pointed things.
55:11 Like, how do we handle the Python 2 sunset, right?
55:14 It's coming up.
55:15 It's going to be a party.
55:17 My wife's determined to get me really drunk on January 1st, 2020.
55:21 But there's a lot of stuff to happen between now and then, right?
55:24 Like, what do we do about docs.python.org, for instance?
55:27 Right now, there's docs.python.org slash 2 slash stuff and then slash 3 slash stuff.
55:33 And if you Google stuff on Google, it's still oftentimes the first link is the Python 2 docs
55:38 and then it's the Python 3 docs for a module, for instance.
55:41 Yeah.
55:41 I mean, what do you do?
55:42 301 through 2?
55:43 Yeah.
55:43 Well, the 2 docs will probably be going away, right?
55:47 Because it's not supported anymore.
55:49 Yeah, exactly.
55:50 Just a permanent redirect over to the version 3.
55:52 Yeah, exactly.
55:53 What other stuff do we have to suddenly deal with?
55:55 Like, I'm sure there's a ton of stuff on python.org that mentions, too, that honestly doesn't
56:00 need to mention it come 2020 because we're not supporting it anymore.
56:03 It's no longer...
56:04 The download page on python.org.
56:07 Yeah.
56:07 I mean, luckily, that's pointing straight to 3 now.
56:09 But for the longest time, it was both.
56:10 But it's stuff like that.
56:11 But when you go to, like, get all versions, right?
56:13 It's got, like, all that.
56:14 Yeah.
56:14 How are we going to handle all that stuff?
56:16 So we're talking to the PSF about getting us a PM for that.
56:19 We're also talking to them about handling to getting a PM potentially about moving our issues
56:25 to GitHub.
56:25 There's an open PEP about that.
56:27 And we're discussing the feasibility of that.
56:29 And part of that would probably require having a PM to handle that kind of major project.
56:34 So we're talking to them like, okay, well, if we're going to consider this, we need to
56:37 make sure we have a PM to help make that happen.
56:39 So we're talking with the PSF right now about what that would look like to get a PM for
56:42 us to help handle that specific thing.
56:45 And so we're starting to have more of a conversation along those lines.
56:48 But it's still early days.
56:49 But back to the whole corporate onslaught and stuff.
56:52 I don't know how many corporations realize that the PSF exists and they're there to help
56:56 us as necessary.
56:57 Because I've talked to corporations who have said, like, they've claimed they would throw
57:01 money at us if they knew it would only go towards development.
57:05 Because they don't care about the community.
57:07 Honestly, for capitalistic reasons, they just care about the language.
57:10 Right.
57:10 We need this feature to be improved.
57:12 And we need...
57:13 Not even feature.
57:13 This area.
57:14 Yeah.
57:14 We need people working on just...
57:16 Yeah.
57:16 All right.
57:16 Okay.
57:16 Just working on the runtime and on the interpreter.
57:18 Exactly.
57:19 How do we make sure that Python doesn't suddenly collapse under its own weight next month?
57:24 Because I got to at least make it through the quarter to make my numbers.
57:28 Where can I send money?
57:29 Because I'm just...
57:30 I work for a bank or something.
57:32 I'm not set up to staff people to just contribute to Python full time.
57:36 It's just...
57:37 I don't even know how I promote such a person.
57:39 So where do I throw money at this problem?
57:41 And we just haven't structured things that way.
57:43 And that conversation, I think, is also about...
57:45 It's probably going to start happening in the near future.
57:47 It would be a good problem to have, right?
57:49 If you actually could set this up and folks could contribute.
57:52 But it's tricky, I know.
57:53 Yeah.
57:53 So I think the PM thing is probably going to be the first step.
57:56 And then depending if that works out and how that goes, we'll probably see how wide of a net we want to start talking.
58:02 Like, personally, I would love to get something like the Django Fellowship for Python Dev.
58:08 And have a core dev who's available be staffed for like six months or a year or something to do nothing but just work on closing PRs, closing issues.
58:18 The community communication stuff.
58:19 Basically what Django has with the Django Fellowship program.
58:23 I'd love to see that.
58:24 Yeah.
58:24 That'd be cool.
58:25 I feel like that kind of deep work where you can just be 100% focused on it for a long time would probably make a big difference.
58:31 Yeah.
58:32 Cool.
58:32 All right.
58:32 Well, that's all good news.
58:34 I have a ton of other things I want to ask you, but I've already used up more than my time.
58:37 So let me just ask you some real quick things.
58:39 You're going to be at PyCon.
58:40 There's going to be a Language Summit.
58:41 People can see you there.
58:42 Yes.
58:42 There will be our annual Language Summit.
58:44 I will be attending.
58:45 I think I'd be in deep trouble if, as a council member, I didn't show up.
58:49 So basically, as long as I make my connection in Milwaukee, my flight out, I will be there.
58:54 You could walk from Milwaukee.
58:55 No, not really.
58:57 But you'd be close.
58:59 You could rent a car.
58:59 So I think you're going to make it.
59:01 I guess that's true.
59:01 I never really thought about it that way.
59:02 I have 45 minutes to make my connection.
59:04 I'm not really worried.
59:05 It's just when I open up TripIt and it says, connection at risk.
59:08 It's like, oh God.
59:09 It's more than half an hour.
59:10 I think it's fine.
59:11 I made it last year.
59:12 It's just, I don't love having that red banner in my face every time.
59:15 It makes me a little worried, but I think I'll be fine.
59:17 You should be fine.
59:18 Exactly.
59:18 Unless it's not.
59:19 Yeah, perfect.
59:19 All right, cool.
59:20 Well, I'm definitely going to be there too.
59:22 It's going to be a lot of fun.
59:23 Really quickly, what is the upcoming feature, either in 3.8 or beyond, that you're most excited about?
59:30 God.
59:30 Language, standard library, whatever.
59:32 I don't know if I really have one.
59:34 I've been having to read all the peps.
59:36 I haven't actually get to stop and really think about any of them quite yet.
59:39 I've been too busy trying to find people to make the decision for me of whether or not we want it.
59:43 Well, I think I'll throw one out there.
59:44 I'm really, I was really impressed with the new support for shared memory in multi-processing.
59:50 That looks really cool coming in 3.8.
59:51 Yeah, all the work Devin put in is going to be great for a lot of people, I think, to try to help with that.
59:57 So that's going to be awesome.
59:58 The other problem is because I live in the development, I forget what's even gone live or what hasn't gone live.
01:00:04 So version numbers blur for me horribly.
01:00:07 So it's hard to even remember.
01:00:09 I mean, honestly, I am curious to get to use assignment expressions and see how that works out in my code.
01:00:14 Yeah, same.
01:00:14 That'll be out pretty soon, yeah.
01:00:16 One thing that did land that, once again, very controversial topic, but I actually think was a good thing, is we accepted positional-only arguments.
01:00:22 Yeah.
01:00:23 You've had keyword-only arguments for a while.
01:00:24 So now it's like the anti-keyword-only argument.
01:00:27 It's the positional-only.
01:00:28 Yeah.
01:00:28 And basically the way to think about it, you can go from positional-only to positional-only to positional-only to keyword-only.
01:00:33 And actually the syntax actually works with that mnemonic.
01:00:36 In case you haven't seen it, basically what happens is you have your parameters.
01:00:41 And then if you put a forward slash...
01:00:44 Forward slash, I think.
01:00:45 Yeah.
01:00:46 That demarcates the end of positional-only arguments.
01:00:50 So everything past that will be keywords or positional.
01:00:53 And then as soon as you have the asterisk by itself, that denotes keyword-only.
01:00:57 I think that's going to be really nice because it's going to deal with some annoying code where you actually do not care about that keyword name.
01:01:04 And you really don't want to take it up.
01:01:05 Like anything that takes star-star keyword args and you want to be able to take absolutely anything, any argument like even self would actually muck with that and get in the way because anything you pass as the self as a keyword argument would get caught by that.
01:01:19 And then I also had some compatibility with C code.
01:01:22 And I'm personally always happy to have more flexibility in how I design my APIs.
01:01:26 So I'll go with positional-only arguments is the thing I'm most excited about.
01:01:30 All right.
01:01:31 Right on.
01:01:31 I like it as well.
01:01:32 All right.
01:01:32 Final two questions before we get out of here.
01:01:34 I have a hunch on what you're going to answer for the first one.
01:01:37 I'm going to just put it out there.
01:01:38 Favorite editor?
01:01:39 VS Code.
01:01:40 More than a hunch.
01:01:42 I think I'd have a very stern conversation with my manager or my PMs if I'd said anything else anyway.
01:01:47 Yeah, but you're working on the team because you like it.
01:01:49 Yeah.
01:01:49 I was actually happy when I got asked to work on the team.
01:01:52 And I was already a user and a fan.
01:01:54 So it's a choice.
01:01:55 It's a lifestyle choice.
01:01:56 Yeah.
01:01:57 And if you look at the Stack Overflow 2019 developer survey results which just came out, you guys are crushing it.
01:02:03 Yeah, exactly.
01:02:04 If you like Python and you like VS Code and based on Stack Overflow, you should like both.
01:02:08 You should definitely be using VS Code with our Python extension.
01:02:12 The number one most downloaded and most installed extension on the VS Code marketplace, actually.
01:02:17 That's crazy.
01:02:18 It beats C-Shirt.
01:02:18 We beat everything.
01:02:19 And it's not even close.
01:02:21 So we're doing something right.
01:02:24 Thank goodness.
01:02:25 Yeah, I would say so.
01:02:26 Awesome.
01:02:27 All right.
01:02:27 The notable PyPI package.
01:02:29 I think even though Brian Okken, I know, sometimes gets upset with this package because it doesn't support his source preferred layout.
01:02:37 I'm going to say Flit because I still think not enough people realize how much simpler packaging could be if they just weren't using setup tools.
01:02:43 Okay, Flit.
01:02:43 Right on.
01:02:44 That's awesome.
01:02:44 Yeah.
01:02:45 So for those of you that don't know, I worked on pip 518, which is pyproject.toml, which is a way to standardize on how to specify how to build your packages.
01:02:53 And obviously, everyone knows setup tools at this point is the way to do it.
01:02:57 I should look at it, actually.
01:02:58 Yeah, well, it's very straightforward, and it works the way you would expect, right?
01:03:02 Like, you don't have to specify your version anymore.
01:03:04 You just specify the Dunder version in your package, and it'll just use that.
01:03:08 You don't have to open the file in your setup.py to read a readme file.
01:03:13 You just specify the path to your readme file.
01:03:15 I mean, just really obvious ways to do things.
01:03:19 That's beautiful.
01:03:19 We've all come to kind of, like, forget that that's, oh, yeah, we should be allowed to do that.
01:03:23 And it's one file.
01:03:24 It's all in your pyproject.toml.
01:03:26 There's no more setup.py.
01:03:27 There's no more setup.cfg.
01:03:29 There's no package-info, manifest.in, none of that.
01:03:34 It all just works.
01:03:35 Yeah, that's cool.
01:03:36 If it's in Git, it gets packaged, and Thomas Kluiver has done a great job with it.
01:03:40 Cool.
01:03:40 Yeah, it sounds awesome.
01:03:42 All right, I'm definitely going to check that out.
01:03:43 So, Flit, people can do better packaging.
01:03:45 Cool.
01:03:46 All right, final call to action.
01:03:47 People maybe want to give feedback or support the council or whatever.
01:03:52 What do you got?
01:03:53 Not much other than just be nice.
01:03:56 I mean, there's nothing really specific other than just be supportive and be understanding.
01:04:00 We're all on Twitter.
01:04:02 We're all on social media.
01:04:03 We're everywhere.
01:04:04 We do see the negative comments, and they don't really help.
01:04:06 If you have feedback and it's constructive, that's great.
01:04:09 But just being flat-out cranky just doesn't really help.
01:04:12 So, my call to action is, and I have a whole keynote from PyCon US 2018 on this.
01:04:18 Basically, be nice if you can.
01:04:20 And if you can't, just be cranky not in public where the rest of us might see it.
01:04:25 And that's a big one.
01:04:27 That's good advice.
01:04:28 Yeah.
01:04:28 Will you all, like all the people on the council, be at PyCon?
01:04:31 People come meet you?
01:04:32 Yeah, I will be at PyCon.
01:04:34 All five of us will be at PyCon.
01:04:37 We are actually going to be giving a panel keynote, I believe, Sunday morning, if I remember the date correctly.
01:04:44 I will also, PyCon's the keynotes, the Keystone sponsor again this year.
01:04:47 So, I will probably be floating around the Microsoft booth.
01:04:50 So, if people want to try to catch me, either catch me in the halls.
01:04:53 I'm 6'6", or 198 centimeters.
01:04:56 It's kind of hard not to see me.
01:04:57 You can be seen in a crowd, for sure.
01:04:59 I can be seen in a crowd.
01:05:00 So, if you see me walking down the hall, feel free to say hi.
01:05:02 Otherwise, just look for me at the Microsoft booth and just catch me there.
01:05:06 All right, cool.
01:05:06 Well, Brett, thank you for coming on and giving this update.
01:05:09 It's really interesting, and I think it'll be good to have it all spelled out for history.
01:05:13 Yeah.
01:05:14 Yeah, it's nice to finally have it settled.
01:05:16 I mean, going from July 12th to the beginning of February, it was kind of like,
01:05:19 all right, where is this going to go?
01:05:22 There were a couple moments where it was a bit stressful.
01:05:23 There were kind of like messages between some people behind the scenes.
01:05:27 about trying to get the vote set up and like, are we going to do it?
01:05:29 Are we going to do it today?
01:05:30 Do we need to push back?
01:05:31 There was a lot of back and forth discussions, and there's a lot of passions.
01:05:35 People did pretty well at keeping it civil and in check, which was great.
01:05:39 But it's definitely nice to have it finally all resolved, and we're all just moving forward.
01:05:42 Yeah, absolutely.
01:05:43 All right, well, thanks for being on the show.
01:05:45 Catch up with you later.
01:05:46 All right, see you later.
01:05:46 Yeah, bye.
01:05:47 This has been another episode of Talk Python to Me.
01:05:51 Our guest in this episode is Brett Cannon, and it's been brought to you by Linode and Backlog.
01:05:57 Linode is your go-to hosting for whatever you're building with Python.
01:06:00 Get four months free at talkpython.fm/linode.
01:06:03 That's L-I-N-O-D-E.
01:06:05 With Backlog, you can create tasks, track bugs, make changes, give feedback, and have team conversations
01:06:12 right next to your code.
01:06:13 Try Backlog for your team for free for 30 days using the special URL talkpython.fm/backlog.
01:06:21 Want to level up your Python?
01:06:22 If you're just getting started, try my Python Jumpstart by Building 10 Apps course.
01:06:27 Or if you're looking for something more advanced, check out our new async course that digs into
01:06:32 all the different types of async programming you can do in Python.
01:06:35 And of course, if you're interested in more than one of these, be sure to check out our
01:06:39 everything bundle.
01:06:40 It's like a subscription that never expires.
01:06:42 Be sure to subscribe to the show.
01:06:44 Open your favorite podcatcher and search for Python.
01:06:46 We should be right at the top.
01:06:48 You can also find the iTunes feed at /itunes, the Google Play feed at /play, and the
01:06:53 direct RSS feed at /rss on talkpython.fm.
01:06:57 This is your host, Michael Kennedy.
01:06:59 Thanks so much for listening.
01:07:00 I really appreciate it.
01:07:01 Now get out there and write some Python code.
01:07:03 Bye.
01:07:04 Bye.
01:07:05 Bye.
01:07:06 Bye.
01:07:07 Bye.
01:07:08 Bye.
01:07:09 Bye.
01:07:10 Bye.
01:07:11 Bye.
01:07:12 Bye.
01:07:13 Bye.
01:07:14 Bye.
01:07:15 Bye.
01:07:16 Bye.
01:07:17 Bye.
01:07:18 Bye.
01:07:19 Bye.
01:07:20 you you Thank you.
01:07:23 Thank you.