February 28, 2026
I’ve always enjoyed the literary form of the interview, and hoped that once I would be able to dabble in it.
Here’s how I finally got motivated.
A fantastic documentary about Python was recently released on YouTube, and in the aftermath of the viewing party, some old-timers started reminiscing about all the Python developers and contributors who weren’t mentioned in the film.
I realized that there have been some oral histories of Python told through my own lens (notably the Computer History Museum did a thorough one), but few others in the community have been able to tell their story.
With this series I am trying to fill that vacuum by letting all core developers (and other contributors) speak. Of course this is still seen through my lens, but I try to mostly let the interviewees talk.
You may ask, why not a podcast? While I respect the medium, I myself much prefer the written word, both as a producer and as a consumer.
I’ve set an arbitrary cutoff year of 2015. If you weren’t involved in the Python community by that year, I deem your participation too recent to be considered “history”. Someone after me can interview the younger generation, but I’d like to limit myself to Python’s first 25 years.
My first interview was with Thomas Wouters. He’s played many, many roles in the Python community, from implementing augmented assignment (the “+=” operator and friends) to serving on the PSF board, the Python Steering Council, acting PSF director, and working on free threading.
Here’s a condensed, cleaned-up rendition of our conversation. I think we both had fun reminiscing! (Also note that you’re hearing two Dutchmen chatting in English – which is what Thomas and I do whenever we talk shop, and often even when we don’t.)
Guido: Tell me how you first heard about Python and how you decided that it was a fun place to contribute.
Thomas: So I first heard about Python because my first real programming language other than Commodore-64 Basic was LambdaMOO, which was an online community / text multi-user dungeon in the world on the internet before the World Wide Web. Because I am that old. I mean, I was a teenager, but I am just about that old.
But it was on the internet, not on something before it like Usenet.
This was right as the World Wide Web was being developed like 92, 93, 94. In Amsterdam, we had the Digital City, which is a very interesting project where it was basically introducing people to the internet. The first version used Gopher, and as part of it, they had a LambdaMOO instance called the Digital Metro, which was modeled on the Amsterdam Metro, being the underworld, and that was a programming environment. It’s a multi-user, text-based, almost game, not quite game, where you could program in the LambdaMOO language. And the LambdaMOO language was very similar to Python.
How did that happen?
I think it’s just parallel evolution. Syntactically, it’s not quite similar, and it did use braces, for instance, but conceptually, the everything-is-an-object model was very, very similar.
And dynamic types?
And dynamic types everywhere, yes.
I think I’ve heard of someone else who used LambdaMOO.
Oh, I think you’ll find that a lot of the original Twisted developers were all LambdaMOO kids.
Oh, I need to talk to them too, of course.
So I sort of moved from LambdaMOO to Perl and C. And I was also involved in some other MUDs that weren’t LambdaMOO.
But still as a teenager?
I was technically a teenager, but I was working at an ISP in the Netherlands. I started working at the Digital City, and then I started working for the company that set up the Digital City, XS4ALL, where I worked for 11 years, as a system administrator, and then as a software developer as well. But in my hobby time, I still played a lot of different MUDs and in one of them, someone introduced me to Python saying, you’ll like this language since you like LambdaMOO. And then that, so that was like 1998 or 99, I think, that they first said this and I didn’t really take it serious because I was too busy learning Perl, and realizing how much I disliked Perl. And then at some point I decided to pick it up and then very quickly and realized how much it made sense to me. Like it just fit my brain. It’s one of those where I don’t have to think about it, it just automatically makes sense to me. Much more than any other programming language. Even though I quite like C, I quite like all the pitfalls in C, I’m very comfortable in C and C++ and pretty comfortable in Java and PHP, but Python is just fun and it’s enjoyable and it makes sense. And this was the Usenet days, of course. I think the Python list, yeah, the email list gateway existed as well. So I think I just subscribed to Python-List and learned a lot about Python just from using it, following along. Just reading posts and especially Tim Peters posts, of course.
Yeah, tell me more about people who made an impression on you when you first subscribed to Python-List and sort of what the atmosphere was.
So, I mean, obviously it’s Tim Peters and it’s Frederik Lundh. They were the prolific posters that I remember. Tim was always super excited in participating in discussions and giving his point of view and explaining things in a way that sort of invited people to participate, that provided more contributions, more discussions, which in Usenet really, I mean, that was sort of the Usenet attitude in general, right? It was a lot of discussions and more discussions and more discussions.
All you can do on Usenet is having discussions, pretty much. It’s always good if every discussion doesn’t turn into a flame war.
Yes. I mean, there were those too, but usually not on the Python side. Although, I do seem to recall someone came along and suggested that Python could be 10 times faster or 100 times faster, having no actual understanding of Python itself, but just, oh, we have done this with other languages, so I can do it with Python too.
And who was that?
I don’t remember. It’s so long ago.
There have been a bunch of people thinking that they could do something simple.
I think this was one of those where they wanted to get paid beforehand, before showing any kind of work. They were flamed to bits on Python-List, because nobody took them seriously. But it was a rare case of hostility on Python-List, because by and large, it was very friendly and very welcoming. And then another person I remember is Michael Hudson.
Yeah.
He posted a patch saying, I started to work on this.
Here’s a proof of concept for augmented assignment.
I was surprised how simple the patch was to add this.
So that’s +=, -=, etc.
How easy it was to add that to Python.
And that provoked me to look at the implementation of Python.
And then I took that patch and I finished it because Michael couldn’t do it.
He didn’t have time,
he didn’t have interest,
I don’t know.
He was more a project starter than a project finisher.
Yeah. And I think for many years, Michael said his main contribution to Python was to rope me into core development.
(Guido laughs.)
Because that led to me being on the Python-Dev list, basically you mentoring me to finish that patch.
You made specific design decisions that I was too afraid to make and that I’m still unsure about, like the way += works on lists.
Yeah, every type can decide how to do it and you can produce new objects or you can modify an existing object in place. And it was sort of my intuition in general with Python from very early on that lists and collections in general, dictionaries, had a different “significance” to users than simple values. The simple values up to strings were all immutable, but lists and everything else was mutable. And tuples were sort of sitting in between.
Looking back, I think I agree, but we have these weird corner cases, right?
Because if you have a tuple,
and you do t[0] += something.
Then, if the first item in the tuple is a list,
then the += will modify the list, and then raise an exception because you can’t assign to that tuple item because the tuple is immutable, but the list will have been mutated.
Ah, yeah.
And that’s a normal consequence of the sensible semantics, but just adding those semantics together, the end result is surprising. I don’t think there’s any better way of dealing with it. I mean, it’s the terrain of linters, right? It’s that terrain of you shouldn’t do this type of thing because it’ll be surprising.
Well, you’ll find out as soon as your code runs. And in those days, it was much more likely that all the code you wrote would be instantly run.
Yeah, true.
Now there’s so much code that it takes a while to touch every line.
I think if += would always have to make a copy, I would have opted to not support it for lists at all and just say .extend(), which does work in that tuple case.
Well, and it does the expected thing.
No, I think your argument at the time, if I recall correctly, was:
If we don’t do this with lists, if we don’t make += do the in place assignment, if we don’t leave it open for types to do their own thing, depending on the circumstances, then there’s no value in += in the first place, because it’s just syntactic sugar for +.
And we’re not adding that just for the syntactic sugar.
We’re adding it because it’s new utility on a mutable type.
So that was my introduction into development on Python itself.
I remember that was your big contribution.
It was.
In the early days.
Yeah. It was also around the time you and the PythonLabs team started at BeOpen, I think.
Oh, so it was in 2000.
It was in 2000, yes. I mean, this was one of the things that you put into Python 2.0 instead of 1.6 to make that distinction between the 1.6 release and the 2.0 release.
A little carrot for 2.0.
And I think this is PEP 204, or PEP 203. [It was 203. –Guido]
Well, that’s very early.
Very early, yeah. I mean, I started to work well before the PEP idea came out.
The content PEPs started at 200, I think, because 100 was like process, or something special.
I think mine was the first PEP that wasn’t written by one of the PythonLabs people. And then I also had the next one, which was range literals, which is my favorite PEP, because it was rejected.
Why does that make it your favorite?
I just like the process of coming up with this idea. I mean, it wasn’t my idea, I think. It was just one of those ideas that had been floating around for a long time, based on other languages having a similar construct, which is syntax for a range to replace the range built-in. And then basically replace the old xrange built in. So the current range built in. But at the time range was a function that returned a whole list and the syntax would instead return a range object with indexing and semantics that don’t require instantiating the whole list. And the syntax, I liked the syntax, but it was a little confusing in context, like iterating over a range would involve a lot of colons. And, you know, that was confusing.
Do you remember what the notation was that you designed?
It was brackets. It was square bracket, start point, colon, end point, close bracket. And then step was also considered, I think. So it would look like a list, but it wouldn’t be a list.
Well, it looked like a list index. That is the sort of the natural notation that if you wanted a range literal, that would be the first thing you’d try. Because also, since there has to be at least one colon, it’s not a valid list currently.
Well, it was fun. I mean, I wrote a patch for it. It was fun because it means parsing it as a list or a range up until you see the colon and then changing your mind, basically.
Oh yeah, and the original parser had a much harder time with that than the current one.
So I had a lot of fun implementing it and designing it, and then it was rejected. And I think it’s the right choice, but don’t get me wrong. I just enjoy the fact that we can have an idea we can think it’s a good idea we can work it all the way through and then we can say well actually this this doesn’t make sense there are too many drawbacks or too many confusing situations this won’t actually be a big enough benefit to warrant the change and the confusion let’s not do it.
And was that me saying that or were other people also against it?
I’m pretty sure it was like a group consensus. But the group was very small at the time. But I think a lot of people weren’t concerned either way. And there wasn’t enough people saying, yes, this is absolutely the right thing. And there were enough people saying, I don’t know about this, right? I don’t think there was anyone like a hard no. But also hard no’s were pretty rare at the time, I think.
Actually, and this is a bit of a rathole for a history interview, but I also imagine that the use of square brackets for that syntax would strongly suggest that it returned a list.
Yes.
Which, again, we’ve learned is not the right thing for range to do.
Yeah, I think that was part of it.
Maybe we escaped sort of a scary misfeature there.
Yeah, I think so. I think at the time, part of it was we were expecting the compiler to be smart enough to see where the range objects were used and then do, like, if you iterated over a range, it would be very smart about, you know, loop unrolling and things like that. which we never bothered to really do, whereas we still don’t do loop unrolling really.
Well, I see,
you could at least special-case the situation where you do for something in and then exactly a range list.
Yes, exactly.
Then there was no way for anyone to find out that you produced an xrange object instead of a list.
Yeah.
But yeah, we’d use it in other cases and be disappointed.
Yeah, yeah. And the idea of optimizations was attractive at the time, because Python was known to be very slow. I mean, it’s gotten so much better over the years, but back then the difference was more noticeable and it was not as advanced as it is now.
**So at that time, who were sort of the big names who were discussing things in the Python-Dev list once you were on it?
Obviously Tim as well. Now for these, I happen to know that this area, the archives are available,0 and I did look at the archives like two weeks ago. There were some names there that I didn’t recognize and I don’t remember them participating. But the people who stand out were Tim Peters, Frederik Lund, as I mentioned before, Fred Drake, if it was anything about communication.
Yeah, he did a lot of work on the docs too.
Yes. I remember him being very docs focused. Jeremy Hilton, Barry Warsaw. I’d known Barry before I joined the Python-Dev list, because I worked on Mailman as well, because for work I worked on Mailman. And I always got along great with Barry, so he was a welcoming voice on Python.
Ah, that’s an interesting connection
And then, I remember Jeremy was mostly working on the compiler and he did things like introduce nested scopes. I remember we had a long, protracted argument about whether we should break backward compatibility or not to add nested scopes, which eventually led to, I think Tim Peters suggesting “future imports”. That’s one of my other favorite interactions.
Oh, you think that future imports came out of the discussion for nested scopes.
So you could say from __future__ import nested_scopes.
Yes.
Now I say the phrase that sounds familiar.
(Laughs.) Yes, I think nested_scopes was the first future import.
I’m pretty sure.
I know Tim Peters was the force behind future imports. That’s for sure.
So I started working at Google in 2006. And Jeremy was already working at Google for a couple of years back then. He’s still working at Google. I think last year or the year before, I met him, and he brought up the argument we had back in 2001 about nested scopes and the fact that future imports came out of that argument.
What exactly was the argument about?
So it’s hard to imagine now because nested scopes are just…
Yeah, they’ve been in the language for 25 years almost.
But back then, if you had a function defined in another function, You couldn’t refer to a variable from the outer function in the inner function.
Not at all. The namespace was completely invisible.
Yes. You couldn’t refer to any name in the outer function at all.
And how about lambdas?
Even lambdas, yes. And so we had to pass in anything that you wanted to use from the outer scope. Obviously, this is a limitation. It was a severe limitation. I think everyone agreed that there are many things you can’t do because of this limitation. And Jeremy found a way to fix it.
Well, it makes nested functions second-class citizens.
Yes, it makes them useless. It’s just a namespacing thing where you don’t define it in the outer namespace, you define it in the inner namespace, but it doesn’t change anything about what the function can do.
Yeah, and there’s like this classic LISP example where you return a function that adds n to its argument and there’s no way to pass that n in as you create that.
So the argument was never whether we should add nested scopes. It was always, yeah, this is a fantastic change. It’s going to enable so many things. I don’t think anyone had an idea just how far it would go because nested scopes are now so fundamental, like any decorator, you know, a lot of things are built on top of it.
Right.
But we were all in agreement. Yeah, this is a good thing. However, it was a backward compatibility change because if you already had a nested function, where you had a variable. So if you had… Yeah, I see.
If you reference a global that is also shadowed by the outer function, which has a local of the same name, your inner function would suddenly have completely different behavior.
Yes. So we argued about that one for a long time. Was it worth the backward compatibility break? How do we approach backward compatibility in general? Jeremy was like, well, if you if you I think this is sort of the professionalization of Python development as well, where we’re no longer thinking about our own code. We’re thinking about how other people deploy Python, not for their own code. They deploy Python for users of Python. So before then, I think we were all thinking, oh, I build Python, and then I use Python, and I use the version that I built. I was a system administrator. I was building Python for users, and they were corporate users, and I couldn’t break them. So if I were to deploy the newer Python and I broke a customer’s Python code, the customer would be upset with me. So it was a blocker for me to deploy the newer version. So that’s why I was so harping on backward compatibility. And I still am.
Yeah, well, I remember in the early 2000s, that was sort of an ongoing debate and an ongoing issue. I remember Steve Holden at some point standing up during a plenary session, I think, and sort of telling the people on stage, maybe it was just me, maybe it was a bunch of core devs, that Python was changing too fast and that we had to somehow make commitments and not sort of make releases with new features too soon after a previous release with new features. I think at a time the compromise was 18 months and we kept that on for a very long time until I think after two releases with the modern process, I think Lukasz. Or maybe it was after the steering council started?
No, we switched to yearly in 3.9. I think after 3.9.
I don’t rememer when 3.9 was, but I’m pretty sure it was after the steering council took over.
Yes.
Because there was the issue that the steering council was beholden to, I mean, the election cycle was literally defined as from release to release.
Yeah.
And at some point everyone agreed to, yeah, we need to do yearly releases to stay in sync with many other big open source projects. And then suddenly we realized, Oh! The steering council also gets elected every year instead of more irregularly. But I think before Steve complained about that, we were still pretty lackadaisical about new features in point releases. I think the last time i got away with that, do you remember?
Uh, True and False getting added to 2.2.3.
Something like that.
Which felt like a good thing at the time but it was a good learning moment, because the fall-out was minimal, right – it was just an annoyance that people could live with. And it sort of showed us that that’s not really a good thing to do. It’s a bad trade-off.
Yeah, that’s sort of the issue was that apart from outright bugs, 2.n.1 and 2.n… a much higher number should always be backwards and forwards compatible.
Yeah, it’s the boring bugs issue. That makes it hard, but yeah.
Yeah, but sort of we’re now relatively good at, if there is a bug that needs to be fixed, it usually affects only a very small number of people. Relatively speaking, of course. It probably still affects a much larger number of people than in the early 2000s because there are so many more users.
Speaking as a release manager, it is harder than you would think to identify the effect of certain changes.
Oh, yeah.
You need to change something in order to allow a bug fix to happen, but then that change has unforeseen circumstances. That happens more often than I wish it would. I don’t know a good solution. It’s just a hard problem.
**Let’s reminisce a bit about Frederick Lund. Because I can’t interview him. So all we’ll hear about him is from other people’s recollections.
I remember, I think I met him in person a couple of times. We were at Google at the same time for a long time, but I never really…
Well, he was in Zurich though, right?
He was in Zurich. He worked on YouTube, I think, most of the time.
But once he was at Google, we didn’t really see much of him in the Python community. And I think there was also some burnout that was going on. He got a divorce, right?
I don’t remember that.
I remember he got a divorce and sort of one of the stresses in his life was getting enough time with his daughter while being in Zurich.
I remember he was Effbot because he was like Tim. Tim was Timbot and Frederick was Effbot, posting so much about so many subjects. And I think his focus was always Tkinter, if I remember correctly.
He had a lot to do with that. I don’t think he originated it.
The Secret Labs regular expression engine.
Oh, that’s why it has an S.
Yes. The company was called Secret Labs.
I remember that T-shirt.
I even saw the T-shirt.
It’s kind of boring.
Corporate.
Well, it was a company with, I don’t know, five employees, I thought. It wasn’t corporate for that. It was just like a navy blue t-shirt with a white, fairly small logo on the chest.
And Secret Labs, Fredrik basically, was hired by CNRI for the Unicode support to replace the regular expression engine with one that could support Unicode, if I remember correctly, in 1.6.
Oh, was he hired?
I think that’s what I remember, that they were hired to provide that. Like, they were paid to do that work. I mean, they went out of their way. We relied on it for very many years. They were, you know, always there. Frederick, at least, was always there to support it as well. But my recollection is that CNRI paid for this.
It’s not impossible. Al Vezza, especially would be open to things like that, I remember.
I think Marc-André would know, because my recollection is that Marc-André Lemburg was also involved in this, but maybe not in the regular expression engine, but in the Unicode implementation. So my recollection is that Marc-André was also paid. I mean, his company was paid to do some of the Unicode work. But maybe it wasn’t CNRI. Maybe it was something else. But that’s what I remember.
Yeah, I was always pretty naive about money flows. Still am, I think.
Yeah, I remember the early Python Software Foundation days as well. So, yeah, I should mention Marc-André on Python-Dev as well. He’s been around for a very long time.
Very long, yeah.
Um, other people… So the other people I hung out with, interacted with, I mentioned already, the Twisted developers. It was always interesting to me. Not really Moshe Zakha. Uh, he was a Python core developer as well, about the same time I was. He was actually the first person from the Python community that I met in person, the day before the 2001 International Python Conference, because we ran into each other in the lift. And then the next day, the second person I ran into, Moshe and I were in the lift, and you stepped in. So you were the second person from the Python community that I met. In person.
I should interview Moshe, and I can do that in person.
But the other Twisted developers, Glyph, and I’m trying to remember more names. There’s a bunch more names there. They’re fairly well-known people in the Python community in their own right, but at the time they were the Twisted developers working on their own little thing. They’re fairly disconnected from Python.
Yeah, somehow what I remember, and I think that’s just distorted, was that Twisted was all Glyphs work.
Oh no, Twisted was a big project.
Okay.
I mean, Glyph can tell that story much better, but…
Well, I’ll talk to him.
It started as a Java, like his attempt at a Java multi, basically a MUD, right? Youngsters were still playing those text-based games, and he wanted something, Twisted Matrix, I think it was called. Twisted Reality, one of those.
Twisted Matrix feels familiar.
You know, Twisted Matrix, I think, is just where, that’s the framework that, so I think the game was supposed to be Twisted Reality. And it started as a Java project and then moved to be Python and not thread-based, but basically coroutine-based before we had coroutines in Python. So it was basically callback-based.
Promises.
Well, Deferred.
Oh yeah, Deferred.
Which is very similar to how asyncio works now.
Yeah. Promise, Future, Deferred. It’s all the same idea. Deferred had very specific properties because there was no ‘yield’.
Yeah. Well there was no ‘yield from’, there was no ‘yield’. When we got ‘yield’ someone implemented basically coroutines on top of Deferreds that were called inline callbacks I think, so that got us like halfway to asyncio. And then later when ‘yield from’ became a thing that was folded in as well. And then asyncio became part of Python 3 and basically stole the thunder of Twisted, I think, a little bit.
Yeah, yeah.
I mean, it also fixed some of the warts like the use of Zope interfaces, which I was never really fond of.
Yeah, me neither. Other people from those days…
Well you already mentioned Steve Holden, eh… I would have to look at the archive. I mean, we can just look at the archives and see names and see if they… I do remember when looking at the archive, I collected a list of top posters and there were some names there that I just don’t recognize. But if I were to actually read the posts, that might stir something.
Do you remember the name Arthur Siegel?
No.
Interesting. Maybe I’m the only person he made an impression on.
I was very impressionable at the time, and then I grew jaded over time, so maybe I just blocked out a bunch of names. Because I was young then, right? I’m not young anymore.
Well, to me, you’ll always be young. Arthur Siegel was this controversial person who always had a contrarian opinion on everything I recall and was not afraid to defend his opinions strongly. So if it didn’t lead to a flame war, it was still sometimes somewhat painful.
I think I probably just blanked that out because that was at the time, as the Internet grew up, that became more of a regular thing, and I may have just decided this is not a serious person or not an interesting person and just ignored them. Oh, I should mention Ping as well.
Oh, yeah!
Just not because of the contrarianism, because that’s the opposite of Ping, but just because it’s someone who was very productive and interesting and had interesting ideas at the time.
I will interview him because he’s also local from here. And I haven’t seen him in almost a year, so it’s about time. So weren’t there other things that Effbot did besides Tkinter and regular expressions?
I mean, I think he was fairly technical, so he was fairly into the interpreter details as well, but a lot of us were at the time.
He was very technical.
Yeah. The compiler, and I don’t know if he was involved with the introduction of ASTs and the compiler rework.
I think that was all Jeremy.
I seem to recall it was someone else working with Jeremy on that, like fairly… Maybe Greg Stein? That’s another name I should mention. Alex Martelli I should mention.
Yeah, of course.
Other areas. I mean, the standard library was much smaller.
Was it? Oh, yeah, I’m sure it was.
I mean, the number of modules was just smaller, despite…
And there was no asynchro package.
Yes, and there was no email package, and there was no… Oh, XML. That’s the thing that Effbot worked on a lot. I think he designed elementtree.
That’s right. Yeah. Oh, yeah. I totally blanked out on that because I’m not an XML user at all, but that’s something that belongs in the standard library because so many people in different fields feel the need to do something with XML, and it’s good if you have something reliable in your hands.
Yeah, the downside is we try to make it extensible by using xmlplus, if you remember that.
I don’t remember what xmlplus was.
So we had the XML namespace in the standard library, and that contained elementtree and Celementtree, which was the C implementation that was faster but had some different functionality. And then I think elementpath was a thing that was very similar to XPath but not standardized and not as versatile as XPath. Those were the things that were in the XML package by default. And then the concern was that we were taking up the XML namespace, right? Because we introduced xmlplus.
Oh, you are right. That is also a really good memory.
The idea was it should be extensible by something else that could move faster than the Python standard library.
Yeah, and it would still live under the XML namespace somehow. I don’t know if that’s why we invented namespace packages.
No, this is way before namespace packages.
I think there was a much hackier solution at the time.
So I can tell you how it worked because I had to deal with it at Google for very, very many years after any of this was relevant.
So the XML package in the standard library, when you imported it, so in its dunder init.py, it would try to import _xmlplus, which was not installed by default, but you could install _xmlplus.
And then it would add the _xmlplus directory to its own dunder path.
So that directory was also searched when you tried to import things from the XML package.
So it could add to the standard library without overriding the standard library.
So it would always take the standard library version first in case we added things to the standard library, but otherwise it would take it from the xmlplus package.
Oh, that’s interesting. That’s at least one reasonable use for all the flexibility that packages have. I had forgotten that packages have their own search path for what’s in the package.
I can tell you at Google, we’ve heavily relied on that flexibility in our monorepo. At Meta we also heavily rely on that. So it’s very welcome. It’s really convenient. And it’s easy to explain and think about and reason about. But it is a little bit of extra complexity that most people don’t see. But the xmlplus solution turned out to be very awkward because eventually the xmlplus package became unmaintained. and it didn’t work for newer Python versions, but people were still relying on some of the functionality. I think XPath was actually added to XML and XSLT was added to the xmlplus package. And anyone using those things wouldn’t be able to upgrade Python because the xmlplus version didn’t support it. That was a little awkward. I mean, it’s not that different from if people had been using the third party package from the start, but the fact that they imported from XML made it seem like it was a standard library module and it wasn’t.
Yeah, yeah, I can see that.
I’m glad we didn’t do that in more places.
Yeah, it’s always a little awkward to be able to tell whether something’s a standard library module or not.
But yeah, the XML, I think F-Bob was all about XML at some point. Before he joined Google, he was all about XML.
Ah, he must have had a corporate customer that was all about XML. I mean, nobody does XML out of a passion, except maybe the people on the XML committee.
Martin von Loewis.
Of course, yeah.
Just thinking about Unicode. Neil Norwitz, who is in your neck of the woods. I think he’s still in your neck of the woods.
But yeah, all good names to try to follow up. I hope Martin wants to talk to me. Also, I hope that Christian Heimes wants to talk to me.
He is a more new name. You talked about it 20 years ago. Christian, obviously, 5 years ago, or 10 years ago. In my mind, they haven’t been around as long, but they’ve been around for a long time.
I think I met Christian in sometime before 2003.
Christian Heimes?
I think so because I remember being at a Zope sprint in the Netherlands in a very cool building and somehow sitting next to two different Christians.
Tismer and Heimes?
No. Tismer was not one of them because he wasn’t into Zope.
Right, right, right. Oh, and that’s another name. That is definitely not a name. And the other Christian, I don’t remember his last name, but they were both German and they were both called Christian. And I’m pretty sure the other was Heimes.
Okay. He must have been very young then.
Sure. That’s okay. That happens. So do I understand that you are completely self-taught?
Yes.
Wow.
I’m a high school dropout, in fact, yes.
Wow. Congratulations. That’s pretty amazing.
Yeah, my parents weren’t happy when I dropped out, but I had a job that I dropped out for. I mean, that was a simple job, I worked at the local hospital. And they were like, ah, he’ll go back to school in a year. And then I got a job at the Digital City, which is like an ISP, sort of an ISP. And then I landed a job at XS4ALL. And then I moved to Google. And they were like, okay, he’s not going back to school. (Guido laughs.) Yeah, working in big tech, I made more than my parents combined, even though my father was already a professor at the time. Obviously, not happy that I didn’t have a degree, but they honestly didn’t care anymore at that point.
Well, that’s good.
I remember my niece had a problem with it because her son wanted to drop out of school and pointed to me as, look, I don’t meet school, look at Thomas. And I had to go, no, no, no. I was in a unique situation where the industry was open to anyone who could do the work and I could do the work. That’s not the case anymore. So you have to finish school.
Yeah, yeah. I always tell people, don’t drop out. Don’t drop out of college. And they’d go, yes, but Steve Jobs!
No. No. It was funny at XS4ALL, I mean, I was 19 or 20 when I started there. Most of the people were around that age, a little older, not much older. They were all college dropouts. because they were in college doing something with, or discovered computers in college and then dropped out to do fun things with them. And I was basically the same except…
I was this close to dropping out of college myself. Not for Python, of course, but for… I don’t know.
Computers. Yeah, IT.
But my boss… I had a part-time job at the university working for the mainframe support team. And my boss convinced me to graduate first because he knew what I didn’t care about at the time. And now I’m very happy that he made me. He knew that it would make for a much better career.
Yeah.
Having that extra bit in my resume.
Yeah, one of the people I worked with at XS4ALL, she was, I don’t remember, she was a friend of one of the SysAdmins, and he knew that she would be good at SysAdmin. She wanted to go back to university but couldn’t quite do it yet or something, and she worked for us for a year. She is now a professor of quantum crypto at one of the other universities. So you can go back to school after you do this, but it is very, very rare.
Well, it’s almost an hour. Any parting words? Things that suddenly pop in your memory?
I think you shouldn’t overlook the PSF as well. And I think there’s a little bit of a saving grace there. I think there are more records at the start of the PSF than there are at the start of core development. If you look at the list of board members for the first couple of years, a couple more names may pop out.
Yes.
I don’t know. I’m trying to remember who was on the board. I mean, I was on the board. You were on the board.
There were more than 20 people.
No, the board was five or seven people.
Oh, you mean the board of the PSF?
Yes, the board of the PSF.
Oh. No, I am confused. I’m thinking of the founders. No, no, I’m thinking of the PSF.
Yeah, you mean the members of the PSF.
Maybe we were the members and we didn’t even have a board.
No, we had a board right away. From the start. Yeah, Greg Stein made sure we had a board. We had to have a board. I remember the meeting in which we created, officially created the PSF. And then we had, right away, we had board elections. And I think there were five or seven, maybe seven seats. Do you remember what year that was? 2001, because it was L.A. It was the International Python Conference in L.A.
Really.
Yeah. And it was because ActiveState was sponsoring a bunch of things. We had David Asher, who was also a good name to put on the list.
Yeah, yeah.
Working at ActiveState. I remember Eric Raymond was there.
Yes.
And I remember vividly because we had the board elections. I was running for the board. He was running for the board. We had six people elected. And then tied in seventh place were Eric Raymond and I. And he suggested a shootout. I mean playfully, suggested a gun duel because that’s his thing and you said how about pies instead and then Greg said no we’ll just have another round of elections and then I won (Guido laughs) and then in the first years of the PSF we were talking a lot about, I don’t know where to get income and how to get companies to support Python and that kind of thing. And obviously the IRS status and what we should do. And I remember at one point I made a analogy with gun laws or gun regulation or something. And you sent a reply saying, I’m so glad that you won instead of Eric Raymond.
(Laughs.) That’s funny. My recollections around that are so different. I remember that there were like about 20, maybe 22 people who were the founding members of the PSF. I think it was mostly core devs.
It was all core devs. It was just core devs.
Maybe it was all core devs even.
Well, if we even had that concept. People with a commit bit. I think it was, everyone with a commit bit got to be a founding PSF member.
I thought it was under 25.
It may have just been the people who could physically make it to LA, IPC.
I don’t remember where it was. I can sort of count back and see that it must have been at one of the IPCs. But the memory that stands out for me is that there was a whole bunch of practical stuff that had to be done to get the PSF actually off the ground, including, I don’t know, registering to be a 501(c)(3). And so the first year, because Dick Hart was there from ActiveState, He said, I am a businessman. I’ll take care of all these things. I know how that goes. And he didn’t do shit for a year. So we had like a reboot a year later, still at an IPC. Maybe that was not in LA.
Yeah, the first one was in LA because I remember Dick Hardt as well. And then the year after, I wasn’t at that IPC. And that was the last IPC, the last real IPC.
That was the last one.
And then the year after, instead, we had PyCon US. There was still technically IPC as part of the Perl Conference, I think, or O’Reilly Conference.
The IPC branding moved to the O’Reilly Open Source Conference as a separate track. I think I even attended a few times.
Yeah, I think I went to one of those.
In the end, it was not the real Python conference. And so the PSF played an enormously important role for the first PyCon because we had asked all the corporate members or the sponsor members to pay, I don’t know what it was, $3,000 a year or so as membership fees, and various very small companies. that cared a lot about Python, most of which companies have long gone under, all paid us that for two years. And then we had enough cash in the bank because we had no expenses. We didn’t do anything with it. I remember Tim Peters at some point taking care of the 501(c)(3) stuff.
Neil Norwitz, I think. I think Neil was on the board as well. He was secretary for a while.
Yeah, he was secretary for a long time.
Tim Peters took care of the public support part of the IRS filing for a couple of years because we needed to show that we had broad public support. It couldn’t just be one company or a small set of companies. There was a specific formula you had to apply to the amount and the diversity of your funding. And apparently the IRS was very bullish about that for the first five years or something. So every year we had to show we had broad support. We weren’t just a shill.
Yeah, we had a temporary approval as a 501(c)(3) for five years. At some point everyone had forgotten about that and there was a scramble to renew it properly because after that the IRS left us alone. And I think that Tim played a role in that as well.
Quite likely, yeah.
So I don’t know if you know the story of, as I remember it, of the first PyCon. I got a phone call from someone who said, I think I know that you’re probably looking to organize a Python conference without the infrastructure provided by the previous organizer of Python conferences.
Fortec.
And he said he had reserved a venue for a Perl conference, or a Perl unconference or something, but there were too many of those, too many people independently deciding that they wanted to organize something Perl related. And he said, I’ve given up on using that venue for Perl, but if you want it, here are the people to call because I happen to know that they don’t have someone else to use the space during that particular week. And I guess the time was right. And the PSF had just enough money that the downpayment they requested because of, oh my gosh, that was when I learned how much catering costs.
And this was George Washington University, right?
It was a really nice location.
I remember the lunch was just packed lunches.
That was all my fault.
No, no, I was happy with it.
Well, it was my fault that there was no diversity [sic] in the lunches.
Ah, okay.
And I don’t even know if I had thought to order some vegetarian lunches or to ask people when they signed up to specify their preferences.
Yeah, I’m pretty sure that none of that was taken into account.
We also had a volunteer who had done, or promised to do, all the work for the registration. And on the day of the conference, he was tremendously delayed. I think he was just maybe a little more chaotic than we had realized. He had all the equipment in his car and he didn’t arrive until noon or so. Steve Holden was very panicky about that. Somehow it worked out. I’ve got to ask Steve.
And that’s all we have time for. Thank you, Thomas!