WEBVTT 99:59:59.999 --> 99:59:59.999 Hi, everybody, I'm Eric Doland. 99:59:59.999 --> 99:59:59.999 99:59:59.999 --> 99:59:59.999 I'm the automake maintainer, among other things. 99:59:59.999 --> 99:59:59.999 Today I'm going to talk about removing obsolete packages. 99:59:59.999 --> 99:59:59.999 This is meant to be a BOF. 99:59:59.999 --> 99:59:59.999 I only have sixteen slides, 99:59:59.999 --> 99:59:59.999 so I'm going to talk about my experiences 99:59:59.999 --> 99:59:59.999 in removing old versions of automake. 99:59:59.999 --> 99:59:59.999 Please feel free to interrupt with questions 99:59:59.999 --> 99:59:59.999 or criticisms or comments as we go. 99:59:59.999 --> 99:59:59.999 Hopefully with a bit of discussion about how to do this better in the future, 99:59:59.999 --> 99:59:59.999 or maybe not better, we'll see. 99:59:59.999 --> 99:59:59.999 So just to set the context a little bit, 99:59:59.999 --> 99:59:59.999 automake in Debian, 99:59:59.999 --> 99:59:59.999 I started maintaining it a really long time ago. 99:59:59.999 --> 99:59:59.999 It's making me feel old. 2002. 99:59:59.999 --> 99:59:59.999 This was around the time that automake 1.6 came out, I think. 99:59:59.999 --> 99:59:59.999 One of the problems automake has is 99:59:59.999 --> 99:59:59.999 that new releases of it usually have incompatibilities 99:59:59.999 --> 99:59:59.999 with backwards-compatible completely. 99:59:59.999 --> 99:59:59.999 There's various reasons why this is, 99:59:59.999 --> 99:59:59.999 it provides a very weird interface, 99:59:59.999 --> 99:59:59.999 because you're basically embedding things inside make files, 99:59:59.999 --> 99:59:59.999 and it's hard to control the API of a make file. 99:59:59.999 --> 99:59:59.999 Back in the day, there was, for a very long time, 99:59:59.999 --> 99:59:59.999 automake 1.4, and that just sort of worked, 99:59:59.999 --> 99:59:59.999 and then, automake 1.5 was introduced, 99:59:59.999 --> 99:59:59.999 Debian upgraded to automake 1.5, and lots of packages broke. 99:59:59.999 --> 99:59:59.999 So what ended up happening is that automake 1.5 got moved into its own package, 99:59:59.999 --> 99:59:59.999 and automake 1.4 was automake package. 99:59:59.999 --> 99:59:59.999 Nowadays, the older versions get moved into their own packages, 99:59:59.999 --> 99:59:59.999 and generally, the currently released version--the most up-to-date version-- 99:59:59.999 --> 99:59:59.999 is the automake package. 99:59:59.999 --> 99:59:59.999 This has some downsides, because it's not necessarily fully backwards-compatible, 99:59:59.999 --> 99:59:59.999 but this is usually what people want. 99:59:59.999 --> 99:59:59.999 They want the latest version of automake, and they don't want to have to install 99:59:59.999 --> 99:59:59.999 a new package any time a new version of automake comes out. 99:59:59.999 --> 99:59:59.999 All the automake packages provide an alternative 99:59:59.999 --> 99:59:59.999 so that you can have your /usr/bin/automake 99:59:59.999 --> 99:59:59.999 be exactly which automake you want it to be. 99:59:59.999 --> 99:59:59.999 The priority of that alternative usually means that the latest version of automake 99:59:59.999 --> 99:59:59.999 is the one automatically selected, but of course, you can override that. 99:59:59.999 --> 99:59:59.999 There's a note here that, depending on automake directly, is a little risky, 99:59:59.999 --> 99:59:59.999 because fancy automake files, new versions of automake, might break you, potentially. 99:59:59.999 --> 99:59:59.999 Anyway, this is not the automake BOF, this is just a little context 99:59:59.999 --> 99:59:59.999 about why automake is what it is in Debian. 99:59:59.999 --> 99:59:59.999 So there's problems with this, because these backwards-compatible issues, as I said, 99:59:59.999 --> 99:59:59.999 were packaging all the versions of automake. 99:59:59.999 --> 99:59:59.999 Each new version was getting a new package, basically, 99:59:59.999 --> 99:59:59.999 and we've gone through a lot of automake packages over the years. 99:59:59.999 --> 99:59:59.999 I didn't count them up, but it looks like almost close to ten, I guess, 99:59:59.999 --> 99:59:59.999 which is a lot of packages you have to deal with. 99:59:59.999 --> 99:59:59.999 People will depend on these individual packages, for whatever reason, 99:59:59.999 --> 99:59:59.999 and then getting them out of the system, when they become old, is troublesome. 99:59:59.999 --> 99:59:59.999 As of the wheezy release, we had four different automakes in the wheezy release. 99:59:59.999 --> 99:59:59.999 So we had what the old, old--as you can see, 1.4, 1.9, 1.10, and 1.11-- 99:59:59.999 --> 99:59:59.999 and they say that at one point we're going to have five different versions of automake, 99:59:59.999 --> 99:59:59.999 which is a lot of versions of automake. 99:59:59.999 --> 99:59:59.999 You can also see that the 1.4 version was released in 2002, 99:59:59.999 --> 99:59:59.999 when I started maintaining this stuff, so it's really old. 99:59:59.999 --> 99:59:59.999 No one should be using it, and no one should have been using it for the last ten years, 99:59:59.999 --> 99:59:59.999 but we sort of kept it around because people were like 99:59:59.999 --> 99:59:59.999 "oh, maybe there's old software that, you know, still depends on automake 1.4." 99:59:59.999 --> 99:59:59.999 Um, yeah. 99:59:59.999 --> 99:59:59.999 This is crazy. There are too many versions of automake. 99:59:59.999 --> 99:59:59.999 No one really wants them. So, I started out on this mission 99:59:59.999 --> 99:59:59.999 to bring us down to, hopefully, one or two versions of automake for the next release. 99:59:59.999 --> 99:59:59.999 I've been doing this over the last year, and I was makign these slides 99:59:59.999 --> 99:59:59.999 and I was thinking about, it sort of had these weird parallels 99:59:59.999 --> 99:59:59.999 with some things I'd read about, so now I present to you 99:59:59.999 --> 99:59:59.999 the five stages of removing an obsolete package from Debian. 99:59:59.999 --> 99:59:59.999 The first stage is denial. 99:59:59.999 --> 99:59:59.999 [laughter] 99:59:59.999 --> 99:59:59.999 "If I send mail to debian-devel asking everyone to very nicely 99:59:59.999 --> 99:59:59.999 move off of these old versions of automake, they'll just do it, right? 99:59:59.999 --> 99:59:59.999 I mean, doesn't everyone agree that that's what will happen? 99:59:59.999 --> 99:59:59.999 Yeah, so that's what I started out by doing. 99:59:59.999 --> 99:59:59.999 I'm going to talk a little bit about the tools and stuff that I used in this process, 99:59:59.999 --> 99:59:59.999 so this is sort of technical, and sort of procedural. 99:59:59.999 --> 99:59:59.999 If you've got questions about either side, just shoot up your hand. 99:59:59.999 --> 99:59:59.999 The first thing you do, or the first thing I did, is that I used grep-dctrl to figure out 99:59:59.999 --> 99:59:59.999 which packages were build dependent on automake. 99:59:59.999 --> 99:59:59.999 Automake basically has no actual binary dependencies, it's all build dependencies. 99:59:59.999 --> 99:59:59.999 There were one hundred and sixty-nine packages--source packages. 99:59:59.999 --> 99:59:59.999 That's a lot, but in Debian scale, it's not that much. It should be fine, right? 99:59:59.999 --> 99:59:59.999 Then, I used the dlist tool to turn that list of packages into a list of maintainers, 99:59:59.999 --> 99:59:59.999 with their packages. It's a very nice tool for just ?? 99:59:59.999 --> 99:59:59.999 Then, I sent out an email debian-devel saying, 99:59:59.999 --> 99:59:59.999 "Here's my plan: I want to get rid of these old versions of automake. 99:59:59.999 --> 99:59:59.999 Here are the packages that are build-dependent on them. 99:59:59.999 --> 99:59:59.999 Please, do your part and fix this. 99:59:59.999 --> 99:59:59.999 I sent that mail out on May 27, 2013, so before last DebConf, which I was not at. 99:59:59.999 --> 99:59:59.999 Stage Two: Anger. 99:59:59.999 --> 99:59:59.999 People aren't fixing these things! 99:59:59.999 --> 99:59:59.999 I'm going to have to actually do something other than send an email. All right, fine. 99:59:59.999 --> 99:59:59.999 The next thing I did, to try to encourage people again to make this move, 99:59:59.999 --> 99:59:59.999 Lintian has this really nice facility. One of tests is actually--there's a list of obsolete packages. 99:59:59.999 --> 99:59:59.999 If you put your package in that list, 99:59:59.999 --> 99:59:59.999 lintian will complain any time anyone depends on that package, 99:59:59.999 --> 99:59:59.999 to try to force maintainers that are paying attention, 99:59:59.999 --> 99:59:59.999 that they should't actually be depending on these packages. 99:59:59.999 --> 99:59:59.999 That's good. It's cheap to do. Just sent the patch to lintian. 99:59:59.999 --> 99:59:59.999 I don't see any reason they wouldn't take it if it made sense. 99:59:59.999 --> 99:59:59.999 Now, I have to file bugs. People don't read debian-devel. 99:59:59.999 --> 99:59:59.999 It's sort of, it's fair I guess. So I basically just went through the list of packages I had, 99:59:59.999 --> 99:59:59.999 with a simple substitution script, so now it mailed a mail that was like 99:59:59.999 --> 99:59:59.999 "Please stop depending on automake blank." with a very boiler-plate thing saying 99:59:59.999 --> 99:59:59.999 "this is why we're getting rid of these old versions of automake" 99:59:59.999 --> 99:59:59.999 and I sent that off to BTS. Which is really easy, right? Because BTS is just email. 99:59:59.999 --> 99:59:59.999 So you can just do that. You can file a bunch of bugs that way. 99:59:59.999 --> 99:59:59.999 I should note that my initial email was a proposal for this mass bug filing, as well, 99:59:59.999 --> 99:59:59.999 which you're supposed to do as part of the procedure of sending out mass bug filings. 99:59:59.999 --> 99:59:59.999 When I did this, I had to file one hundred and seventeen bugs. 99:59:59.999 --> 99:59:59.999 There's fifty two packages that got fixed between me sending my initial email 99:59:59.999 --> 99:59:59.999 and the bugs. So that's good, I shouldn't be that angry, maybe. 99:59:59.999 --> 99:59:59.999 I did wait four months between these two events, though, so there's plenty of time. 99:59:59.999 --> 99:59:59.999 The other thing I used was using BTS user tags, to track all of these bugs very easily easily 99:59:59.999 --> 99:59:59.999 using this automake clean-up 2013 tag. I added the date because 99:59:59.999 --> 99:59:59.999 I knew this would not be the last automake clean-up that I would have to do, 99:59:59.999 --> 99:59:59.999 so I keep these separate. 99:59:59.999 --> 99:59:59.999 Always good to date your work if you think you might have to repeat it. 99:59:59.999 --> 99:59:59.999 Yeah, no, I did not finish in 2013. I started in 2013. 99:59:59.999 --> 99:59:59.999 It should've been automake clean-up 2015 or something, if I wanted the finish date. 99:59:59.999 --> 99:59:59.999 All right, so stage three. Bargaining. 99:59:59.999 --> 99:59:59.999 Okay, so, I'm past the anger stage, and now I'm like "okay, I've filed all these bugs, 99:59:59.999 --> 99:59:59.999 but not much is happening, so let me just fix this for you. 99:59:59.999 --> 99:59:59.999 I'll give you the exact fix on how to much to the newer version of automake. 99:59:59.999 --> 99:59:59.999 Here's the patch. Just apply it and upload your package. 99:59:59.999 --> 99:59:59.999 I've done all the work; I've done all the hard stuff." 99:59:59.999 --> 99:59:59.999 So, before I even did this, thirty four packages were fixed 99:59:59.999 --> 99:59:59.999 without supplying a patch. I began the patching in late October of 2013 99:59:59.999 --> 99:59:59.999 and--this is the hard part, this is the part that's tough to automate--in many cases, 99:59:59.999 --> 99:59:59.999 just switching to the new version of automake worked, and then it was easy, 99:59:59.999 --> 99:59:59.999 but that was maybe 50% of the cases. 99:59:59.999 --> 99:59:59.999 I didn't keep good statistics about how tough this was exactly, 99:59:59.999 --> 99:59:59.999 but in a lot of cases, I had to fiddle with the build system, 99:59:59.999 --> 99:59:59.999 or a lot of build rules would run automake itself, 99:59:59.999 --> 99:59:59.999 instead of using dh-autoreconf. 99:59:59.999 --> 99:59:59.999 There was a lot of actual fiddling with packages, trying to get them to build, 99:59:59.999 --> 99:59:59.999 and then just waiting to build these things, which can take a very long time, 99:59:59.999 --> 99:59:59.999 to test that this worked. So this is a lot of actual, tough work. 99:59:59.999 --> 99:59:59.999 What else? I used pbuilder to do the builds and then if I successfully built something, 99:59:59.999 --> 99:59:59.999 with the new version of automake, I would just mail off a patch 99:59:59.999 --> 99:59:59.999 to the existing bug, in BTS, and flip the patch tag, saying "here's the patch." 99:59:59.999 --> 99:59:59.999 So I thought, okay, at this point, you know, there's patches out there 99:59:59.999 --> 99:59:59.999 for almost all of these problems. 99:59:59.999 --> 99:59:59.999 There should be a wave of uploads and everything should be great. 99:59:59.999 --> 99:59:59.999 Stage Four: Depression. 99:59:59.999 --> 99:59:59.999 That's not what happened. I was pretty much on my own. 99:59:59.999 --> 99:59:59.999 The responsible maintainers have already fixed this problem. 99:59:59.999 --> 99:59:59.999 So we're into this, sort of, long tale of people who don't care, 99:59:59.999 --> 99:59:59.999 or people who are too busy to deal with their packages or do anything here. 99:59:59.999 --> 99:59:59.999 Now I have to upload NMUs. I started this in late January, I think 99:59:59.999 --> 99:59:59.999