WEBVTT - Rerun: Bad Computer Bugs

0:00:04.240 --> 0:00:07.240
<v Speaker 1>Welcome to tech Stuff, a production of I Heart Radios

0:00:07.320 --> 0:00:13.960
<v Speaker 1>How Stuff Works. Hey there, and welcome to tech Stuff.

0:00:14.000 --> 0:00:16.360
<v Speaker 1>I'm your host, Jonathan Strickland. I'm an executive producer with

0:00:16.440 --> 0:00:18.920
<v Speaker 1>iHeart Radio and I love all things tech and I'm

0:00:18.920 --> 0:00:22.680
<v Speaker 1>probably still running all over the United States right now

0:00:23.000 --> 0:00:26.040
<v Speaker 1>on special projects. And for that reason, we are going

0:00:26.079 --> 0:00:30.600
<v Speaker 1>to enjoy another classic episode of tech Stuff. This episode

0:00:30.840 --> 0:00:34.440
<v Speaker 1>is called bad Computer Bugs, and it's all about software

0:00:34.479 --> 0:00:37.879
<v Speaker 1>bugs that were some of the worst to ever go

0:00:37.960 --> 0:00:41.960
<v Speaker 1>out with shipped projects. So let's go back and listen

0:00:41.960 --> 0:00:45.200
<v Speaker 1>to this classic episode. I have to address a bit

0:00:45.240 --> 0:00:50.640
<v Speaker 1>of apocryphal history, and regrettably it's a story that we've

0:00:50.680 --> 0:00:53.960
<v Speaker 1>repeated on tech Stuff. So I'm sad to admit that

0:00:54.080 --> 0:00:59.400
<v Speaker 1>I was complicit, although unknowingly, in the spread of misinformation

0:01:00.960 --> 0:01:02.920
<v Speaker 1>and that all has to do with the origin of

0:01:02.960 --> 0:01:07.399
<v Speaker 1>the term bug to describe a flaw in programming. So

0:01:07.440 --> 0:01:11.960
<v Speaker 1>here's the popular story, the one that we have accidentally,

0:01:13.800 --> 0:01:17.080
<v Speaker 1>uh promoted on tech Stuff without knowing that we were

0:01:17.319 --> 0:01:20.760
<v Speaker 1>in the wrong. It goes that Grace Hopper, who was

0:01:20.800 --> 0:01:23.399
<v Speaker 1>an early computer scientist who rose to the rank of

0:01:23.480 --> 0:01:26.920
<v Speaker 1>rear admiral in the U. S. Navy coined the phrase

0:01:27.040 --> 0:01:31.800
<v Speaker 1>bug after discovering a moth coming up Harvard's Market two calculator,

0:01:31.959 --> 0:01:36.320
<v Speaker 1>a literal bug. Generally speaking, the story tends to be

0:01:36.440 --> 0:01:40.920
<v Speaker 1>set in nineteen, and there is even a note in

0:01:40.959 --> 0:01:44.240
<v Speaker 1>the log book that reads first actual case of bug

0:01:44.319 --> 0:01:48.560
<v Speaker 1>being found that's attributed to Grace Hopper. But there are

0:01:48.560 --> 0:01:52.640
<v Speaker 1>several points that are wrong in this story. First, the

0:01:52.720 --> 0:01:56.280
<v Speaker 1>year it didn't happen in nineteen. It happened on September.

0:01:57.680 --> 0:02:01.520
<v Speaker 1>We know because there's a log book. The log book

0:02:01.560 --> 0:02:04.320
<v Speaker 1>that marks the incident not only has the notes, it

0:02:04.400 --> 0:02:08.359
<v Speaker 1>actually has the moth taped into the book itself. It's

0:02:08.400 --> 0:02:12.560
<v Speaker 1>taped onto the page. Second, Grace Hopper wasn't the person

0:02:12.680 --> 0:02:16.520
<v Speaker 1>to discover the moth or make that log entry. She

0:02:16.639 --> 0:02:20.600
<v Speaker 1>did tell the story about the moth several times, but

0:02:20.680 --> 0:02:24.920
<v Speaker 1>it wasn't in the context of finding it or logging it.

0:02:25.080 --> 0:02:27.160
<v Speaker 1>She just told the story that, yeah, we really did

0:02:27.200 --> 0:02:30.680
<v Speaker 1>have a bug in the system. And most importantly, the

0:02:30.680 --> 0:02:34.360
<v Speaker 1>word bug had already been used to describe design flaws

0:02:34.440 --> 0:02:39.160
<v Speaker 1>for decades before the Mark two was even designed. In fact,

0:02:39.160 --> 0:02:41.280
<v Speaker 1>if you look at the log book, this makes sense.

0:02:41.320 --> 0:02:45.000
<v Speaker 1>It says first actual case of bug being found that

0:02:45.120 --> 0:02:48.959
<v Speaker 1>sentence doesn't make sense unless you've already used the word

0:02:49.040 --> 0:02:54.040
<v Speaker 1>bug to describe a flaw, because you wouldn't say, first

0:02:54.040 --> 0:02:57.239
<v Speaker 1>actual case of bug being found that the wording doesn't

0:02:57.240 --> 0:03:01.040
<v Speaker 1>make a sense, the context makes no sense. Sadly, there

0:03:01.040 --> 0:03:05.320
<v Speaker 1>are documented quotes dating back to the nineteenth century using

0:03:05.320 --> 0:03:08.560
<v Speaker 1>the word bug to mean a design fault, and it

0:03:08.560 --> 0:03:12.440
<v Speaker 1>could go back even further than that. So is with

0:03:12.520 --> 0:03:15.240
<v Speaker 1>much regret that I admit I have unwillingly contributed to

0:03:15.320 --> 0:03:18.200
<v Speaker 1>a bit of misleading folklore making the rounds. But I'm

0:03:18.240 --> 0:03:21.400
<v Speaker 1>glad I can take this opportunity to address it. All Right,

0:03:21.480 --> 0:03:24.040
<v Speaker 1>so let's talk about design bugs, and I'll be covering

0:03:24.080 --> 0:03:29.440
<v Speaker 1>several goofs mistakes, flubs, flaws, and outright catastrophes in this episode.

0:03:30.080 --> 0:03:33.400
<v Speaker 1>But one thing I'm not necessarily going to cover our

0:03:33.400 --> 0:03:38.200
<v Speaker 1>software vulnerabilities that were later exploited, either by opportunistic hackers

0:03:38.360 --> 0:03:42.280
<v Speaker 1>or white hats who are just trying to improve system security.

0:03:42.520 --> 0:03:46.040
<v Speaker 1>Those vulnerabilities are common in many types of software and

0:03:46.080 --> 0:03:51.600
<v Speaker 1>arise not just through mistakes but sometimes simple oversights, and

0:03:51.680 --> 0:03:53.320
<v Speaker 1>I think it might be more fun to look at

0:03:53.360 --> 0:03:56.920
<v Speaker 1>some real bugs, like stuff that made things go wrong,

0:03:57.040 --> 0:03:59.800
<v Speaker 1>stuff that may have rendered a program defunct or otherwise

0:03:59.800 --> 0:04:03.160
<v Speaker 1>cau headaches. Now I'm gonna make an exception to this.

0:04:03.400 --> 0:04:06.000
<v Speaker 1>I'm going to start off with the Ping of death,

0:04:06.840 --> 0:04:10.960
<v Speaker 1>and I only mention it because it has an awesome name. Now,

0:04:10.960 --> 0:04:14.760
<v Speaker 1>this flaw caused headaches back in ninety six. It was

0:04:14.800 --> 0:04:19.560
<v Speaker 1>a flawed i P fragmentation reassembly code, and it became

0:04:19.600 --> 0:04:22.480
<v Speaker 1>possible to crash lots of different types of computers using

0:04:22.520 --> 0:04:26.719
<v Speaker 1>different operating systems, although Windows machines were particularly vulnerable, and

0:04:26.760 --> 0:04:29.640
<v Speaker 1>this particular flaw would make a Windows machine revert to

0:04:29.680 --> 0:04:33.159
<v Speaker 1>the dreaded blue screen of death. And it all happened

0:04:33.160 --> 0:04:36.719
<v Speaker 1>by sending a special ping packet over the Internet. So,

0:04:36.839 --> 0:04:39.000
<v Speaker 1>for those of you who aren't familiar with what that is,

0:04:39.160 --> 0:04:42.520
<v Speaker 1>a ping is essentially a simple message that checks for

0:04:42.760 --> 0:04:46.280
<v Speaker 1>a connection between two computers. You send one ping from

0:04:46.279 --> 0:04:49.080
<v Speaker 1>a computer to another one and look for a response,

0:04:49.360 --> 0:04:51.960
<v Speaker 1>so that way you verify there is in fact a connection.

0:04:52.000 --> 0:04:54.720
<v Speaker 1>You can also tell other things like how fast is

0:04:54.760 --> 0:04:58.279
<v Speaker 1>that connection between those two computers. Now, in this case,

0:04:58.600 --> 0:05:01.800
<v Speaker 1>you would have to actually design a malformed ping request

0:05:01.920 --> 0:05:04.720
<v Speaker 1>and send that to a target and it would bring

0:05:04.760 --> 0:05:08.880
<v Speaker 1>that target down. That's the only security vulnerability story I

0:05:08.920 --> 0:05:11.920
<v Speaker 1>really wanted to focus on. The others are all just

0:05:12.640 --> 0:05:15.520
<v Speaker 1>design flaws. And let's begin with the bug that inspired

0:05:15.560 --> 0:05:17.200
<v Speaker 1>me to do this episode in the first place. That

0:05:17.279 --> 0:05:20.960
<v Speaker 1>Spotify bug I mentioned earlier. Ours Technica wrote a piece

0:05:21.000 --> 0:05:23.120
<v Speaker 1>on it in November two thousand and sixteen, but the

0:05:23.120 --> 0:05:26.000
<v Speaker 1>problem seems to date back at least as far as

0:05:26.120 --> 0:05:29.640
<v Speaker 1>June two thousand sixteen, and that's when a few savvy

0:05:29.720 --> 0:05:34.320
<v Speaker 1>Spotify users noticed some unusual activities on their computers. And

0:05:34.360 --> 0:05:36.080
<v Speaker 1>it took a little bit of detective work, but they

0:05:36.120 --> 0:05:40.000
<v Speaker 1>discovered that Spotify was apparently generating a huge amount of

0:05:40.080 --> 0:05:45.400
<v Speaker 1>data on a daily basis, like gigabytes of data per day.

0:05:45.600 --> 0:05:48.840
<v Speaker 1>And the culprit turned out to be a vacuum process

0:05:48.920 --> 0:05:53.320
<v Speaker 1>for a database file containing the string mercury dot d b. Now,

0:05:53.360 --> 0:05:57.080
<v Speaker 1>the vacuum process is the digital equivalent of vacuum ceiling.

0:05:57.200 --> 0:05:59.880
<v Speaker 1>It's meant to repack data so that it takes up

0:06:00.040 --> 0:06:03.160
<v Speaker 1>a space on a drive. Now, this involves building a

0:06:03.160 --> 0:06:06.599
<v Speaker 1>new file to maximize efficiency, which is a good thing

0:06:06.720 --> 0:06:12.960
<v Speaker 1>generally speaking. The problem was that Spotify's version was making

0:06:13.000 --> 0:06:15.320
<v Speaker 1>it happen way too frequently, like on the order of

0:06:15.400 --> 0:06:19.520
<v Speaker 1>once every few minutes, so that's not generally necessary. You

0:06:19.520 --> 0:06:22.320
<v Speaker 1>don't need to rebuild a database file every few minutes

0:06:22.360 --> 0:06:25.320
<v Speaker 1>to make sure it's the most efficient size it can be.

0:06:26.600 --> 0:06:29.840
<v Speaker 1>So each rebuild represented a relatively small amount of data,

0:06:29.960 --> 0:06:32.880
<v Speaker 1>but over time it added up, which meant that if

0:06:32.960 --> 0:06:35.760
<v Speaker 1>you had Spotify on on your computer, even if it

0:06:35.800 --> 0:06:38.560
<v Speaker 1>was just running in the background, it would be generating

0:06:38.600 --> 0:06:42.320
<v Speaker 1>gigabytes worth of information rewriting this file over and over.

0:06:42.600 --> 0:06:45.359
<v Speaker 1>Now it wasn't filling up a hard drive. It was

0:06:45.400 --> 0:06:50.800
<v Speaker 1>just overriding the same file. Now, if it had been

0:06:50.800 --> 0:06:53.200
<v Speaker 1>filling up a hard drive, people would have noticed much earlier,

0:06:53.200 --> 0:06:56.279
<v Speaker 1>and it wouldn't have just been savvy Spotify users, because

0:06:56.279 --> 0:06:58.640
<v Speaker 1>you would suddenly notice, hey, I don't I can't save

0:06:58.680 --> 0:07:02.680
<v Speaker 1>anything to my hard drive because things filling up. Instead, Again,

0:07:02.720 --> 0:07:05.320
<v Speaker 1>it was just sort of writing and deleting and writing

0:07:05.360 --> 0:07:08.159
<v Speaker 1>and deleting the same file over and over again. And

0:07:08.200 --> 0:07:10.120
<v Speaker 1>that probably doesn't sound like a big deal, but it

0:07:10.320 --> 0:07:12.680
<v Speaker 1>is a problem if you're using a solid state drive

0:07:12.920 --> 0:07:16.120
<v Speaker 1>or s s D. So one of the drawbacks of

0:07:16.120 --> 0:07:20.480
<v Speaker 1>an ss D is that over time it loses storage capacity.

0:07:20.600 --> 0:07:23.560
<v Speaker 1>Like you can store less data on an ss D

0:07:23.880 --> 0:07:27.280
<v Speaker 1>over time. Now by overtime, I generally mean over a

0:07:27.320 --> 0:07:29.400
<v Speaker 1>great deal of time and a lot of different data

0:07:29.440 --> 0:07:33.760
<v Speaker 1>being written to it and overwritten. Uh. Generally speaking, most

0:07:33.760 --> 0:07:36.680
<v Speaker 1>of us end up replacing our drives before we get

0:07:36.720 --> 0:07:39.520
<v Speaker 1>to a point where the loss of capacity is a

0:07:39.560 --> 0:07:42.600
<v Speaker 1>real issue. But similar in a way to how a

0:07:42.600 --> 0:07:45.120
<v Speaker 1>battery can lose its ability to hold a full charge

0:07:45.560 --> 0:07:49.520
<v Speaker 1>after you've gone through lots of charging and discharging cycles,

0:07:49.960 --> 0:07:52.160
<v Speaker 1>you know how a battery won't be able to to

0:07:52.240 --> 0:07:54.360
<v Speaker 1>hold as much even if it says it's up to

0:07:54.400 --> 0:07:57.120
<v Speaker 1>a percent, but a hundred percent doesn't last you as

0:07:57.160 --> 0:08:00.160
<v Speaker 1>long as it used to. That's because it's capacity need

0:08:00.200 --> 0:08:04.040
<v Speaker 1>to hold a full charge has decreased over time. But

0:08:04.160 --> 0:08:07.160
<v Speaker 1>let's say you've got a program that's just constantly overwriting

0:08:07.240 --> 0:08:10.720
<v Speaker 1>data to your drive, you might discover that your ss

0:08:10.800 --> 0:08:15.120
<v Speaker 1>D S useful lifespan has been drastically reduced. So as

0:08:15.160 --> 0:08:18.760
<v Speaker 1>I record this episode, Spotify has already rolled out an

0:08:18.840 --> 0:08:21.960
<v Speaker 1>updated version of its desktop application, and that, by the way,

0:08:22.040 --> 0:08:24.520
<v Speaker 1>is the only version of Spotify that was affected. If

0:08:24.560 --> 0:08:28.280
<v Speaker 1>you use web based Spotify or mobile Spotify, you're in

0:08:28.320 --> 0:08:30.920
<v Speaker 1>the clear already. If you use a desktop version, as

0:08:30.920 --> 0:08:34.000
<v Speaker 1>long as you have version one point zero point four

0:08:34.040 --> 0:08:39.040
<v Speaker 1>two or later, you are fine. But if you did

0:08:39.080 --> 0:08:41.600
<v Speaker 1>have that earlier version and you just had Spotify running

0:08:41.600 --> 0:08:44.400
<v Speaker 1>on in the background, chances are it was writing to

0:08:44.440 --> 0:08:47.760
<v Speaker 1>your hard drive like crazy. So what about some of

0:08:47.760 --> 0:08:50.520
<v Speaker 1>the other big bugs in computer history? Well, some of

0:08:50.520 --> 0:08:54.239
<v Speaker 1>the real doozies involve our attempts to explore the final frontier.

0:08:55.040 --> 0:08:57.400
<v Speaker 1>So we'll be talking about space a few times in

0:08:57.400 --> 0:09:00.920
<v Speaker 1>this episode, and we'll start with an early US satellite.

0:09:01.480 --> 0:09:04.679
<v Speaker 1>So first up is a nineteen sixty two blunder involving

0:09:04.679 --> 0:09:08.560
<v Speaker 1>the Mariner one. So some backstory on this one. Uh,

0:09:08.640 --> 0:09:10.600
<v Speaker 1>We're gonna talk a lot about the Soviet Union in

0:09:10.600 --> 0:09:13.800
<v Speaker 1>this episode too. It takes a couple of roles as

0:09:13.800 --> 0:09:17.160
<v Speaker 1>we go on. But in this case, the then USSR

0:09:17.360 --> 0:09:20.640
<v Speaker 1>had launched Sputnik into orbit in nineteen fifty seven, which

0:09:20.640 --> 0:09:23.480
<v Speaker 1>really kicked off the space race and also was a

0:09:23.520 --> 0:09:26.280
<v Speaker 1>big shot in the Cold War because of so Union

0:09:26.320 --> 0:09:29.280
<v Speaker 1>was essentially saying, hey, we can launch this into space,

0:09:29.360 --> 0:09:33.079
<v Speaker 1>we could also launch something at you in response to

0:09:33.080 --> 0:09:34.760
<v Speaker 1>the US and done sort of the same thing. They

0:09:34.760 --> 0:09:37.959
<v Speaker 1>had launched some satellites into space, and the Mariner one

0:09:38.080 --> 0:09:40.880
<v Speaker 1>was going to be a big, big, feather in the

0:09:40.920 --> 0:09:42.839
<v Speaker 1>cap of the US. The whole idea was to launch

0:09:42.840 --> 0:09:45.520
<v Speaker 1>a probe that would be a fly by probe and

0:09:45.600 --> 0:09:50.640
<v Speaker 1>it would go by Venus. So uh NASA, which was

0:09:50.679 --> 0:09:54.400
<v Speaker 1>newly formed in nineteen sixty two, was taking control of

0:09:54.440 --> 0:09:57.120
<v Speaker 1>this and the budget for this particular project was eighteen

0:09:57.160 --> 0:10:00.000
<v Speaker 1>point five million dollars, which if you were to adjust

0:10:00.040 --> 0:10:05.280
<v Speaker 1>for inflation, would be almost a hundred fifty million dollars today,

0:10:05.480 --> 0:10:08.120
<v Speaker 1>So a hundred fifty million dollar project to launch the

0:10:08.160 --> 0:10:11.640
<v Speaker 1>Mariner one and have it fly by Venus. But as

0:10:11.679 --> 0:10:14.439
<v Speaker 1>I'm sure you guys have figured out by now based

0:10:14.520 --> 0:10:18.160
<v Speaker 1>upon the topic of this podcast, not all went according

0:10:18.200 --> 0:10:23.079
<v Speaker 1>to plan. Not long at all. After the rocket launched

0:10:23.559 --> 0:10:27.280
<v Speaker 1>from the launchpad, it began to veer off course, and

0:10:27.360 --> 0:10:30.360
<v Speaker 1>neither the computer controls on the rocket or manual controls

0:10:30.360 --> 0:10:34.520
<v Speaker 1>back at HQ could correct for the problem. The rockets

0:10:34.520 --> 0:10:37.040
<v Speaker 1>course was such that it was going to take it

0:10:37.120 --> 0:10:40.880
<v Speaker 1>over shipping lanes, which meant there could be a potential catastrophe,

0:10:41.320 --> 0:10:45.200
<v Speaker 1>and so Arrange safety officer made the difficult call and

0:10:45.280 --> 0:10:48.360
<v Speaker 1>issued the command to blow the whole thing up just

0:10:48.559 --> 0:10:52.640
<v Speaker 1>shy of three hundred seconds after it launched. So what happened.

0:10:52.679 --> 0:10:55.520
<v Speaker 1>What why did it go off course in the first place, Well,

0:10:55.520 --> 0:10:58.560
<v Speaker 1>there was a flaw in the spacecraft's guidance software which

0:10:58.600 --> 0:11:01.360
<v Speaker 1>diverted the rocket, and no amount of commands from ground

0:11:01.360 --> 0:11:06.080
<v Speaker 1>control could correct for it. After a lengthy investigation, NASA

0:11:06.120 --> 0:11:09.320
<v Speaker 1>discovered the era error was the result of a mistake

0:11:09.760 --> 0:11:15.840
<v Speaker 1>transcribing handwritten notes into computer code. So someone just took

0:11:15.920 --> 0:11:20.199
<v Speaker 1>some handwritten notes and misinterpreted one of them, and that

0:11:20.600 --> 0:11:26.080
<v Speaker 1>one mistake was enough to crash the rocket or to

0:11:26.080 --> 0:11:32.520
<v Speaker 1>to necessitate it being destroyed. The great science fiction author

0:11:32.760 --> 0:11:36.960
<v Speaker 1>Arthur C. Clark wrote that the Mariner one was wrecked

0:11:37.080 --> 0:11:41.800
<v Speaker 1>by the most expensive hyphen in history, which isn't quite right,

0:11:41.840 --> 0:11:46.520
<v Speaker 1>but it's pretty funny. I mean, come on, it's humorous phrase.

0:11:46.960 --> 0:11:49.600
<v Speaker 1>So the actual punctuation mark that caused the problem was

0:11:49.679 --> 0:11:55.120
<v Speaker 1>not technically a hyphen. It was a superscript bar. Superscript

0:11:55.120 --> 0:11:57.120
<v Speaker 1>of bars, by the way, not a place where playwrights

0:11:57.120 --> 0:12:00.360
<v Speaker 1>hang out to get tore up. A superscript barge means

0:12:00.400 --> 0:12:04.080
<v Speaker 1>it's a horizontal bar that is above some other symbol.

0:12:04.120 --> 0:12:07.920
<v Speaker 1>In this case, it was a radius symbol, and that

0:12:08.040 --> 0:12:11.679
<v Speaker 1>was a symbol along with the superscript bar to describe

0:12:11.720 --> 0:12:15.320
<v Speaker 1>a smoothing function, which means the formula was meant to

0:12:15.360 --> 0:12:21.240
<v Speaker 1>calculate smoothed values over the time derivative of a radius. Now,

0:12:21.240 --> 0:12:25.760
<v Speaker 1>without the smoothing function, tiny deviations in course sent commands

0:12:25.800 --> 0:12:28.480
<v Speaker 1>to the rockets thrusters to kick in big time to

0:12:28.760 --> 0:12:32.560
<v Speaker 1>overcorrect for that problem. As an analogy, imagine you're driving

0:12:32.600 --> 0:12:35.440
<v Speaker 1>a vehicle and you see a pothole in the road

0:12:35.520 --> 0:12:39.360
<v Speaker 1>and you're approaching it, and instead of gently steering out

0:12:39.440 --> 0:12:43.360
<v Speaker 1>of the way, you wrenched the wheel really hard to

0:12:43.400 --> 0:12:45.199
<v Speaker 1>the left or to the right in order to try

0:12:45.200 --> 0:12:47.560
<v Speaker 1>and get around this pothole. That's kind of what was

0:12:47.559 --> 0:12:50.360
<v Speaker 1>happening with the rocket. It didn't have the smoothing function,

0:12:50.840 --> 0:12:53.320
<v Speaker 1>and so as a result, it was having these wild

0:12:53.360 --> 0:12:57.760
<v Speaker 1>deviations and course. So it wasn't a hyphen that caused

0:12:57.760 --> 0:13:01.640
<v Speaker 1>the problem, but is close enough. Our next space story

0:13:01.720 --> 0:13:05.720
<v Speaker 1>takes place in nine with the European Space Agencies ARIANE

0:13:06.000 --> 0:13:10.120
<v Speaker 1>five Flight five O one rocket. Now, this rocket was

0:13:10.160 --> 0:13:14.040
<v Speaker 1>to launch into space on June four nine and instead

0:13:14.440 --> 0:13:18.439
<v Speaker 1>the rocket disintegrated forty seconds after taking off. So what

0:13:18.520 --> 0:13:21.720
<v Speaker 1>the heck happened? Well, it largely had to do with

0:13:21.800 --> 0:13:25.920
<v Speaker 1>the E s A reusing old work. This actually becomes

0:13:25.920 --> 0:13:28.680
<v Speaker 1>a theme in this episode. One of the morals of

0:13:28.920 --> 0:13:33.160
<v Speaker 1>of this entire podcast is if you're designing something a

0:13:33.240 --> 0:13:38.000
<v Speaker 1>successor to an earlier product, and you'd want to reuse

0:13:38.320 --> 0:13:41.840
<v Speaker 1>some of the features that you created in your previous product,

0:13:42.960 --> 0:13:46.120
<v Speaker 1>test the heck out of it in its new form factor,

0:13:46.920 --> 0:13:49.760
<v Speaker 1>because it could be that things that worked perfectly fine

0:13:49.800 --> 0:13:53.920
<v Speaker 1>in the earlier model will go awry in the new one.

0:13:54.760 --> 0:13:58.280
<v Speaker 1>That's what happened here, So as you might guess from

0:13:58.320 --> 0:14:02.280
<v Speaker 1>the name, the ARIANE five marked the fifth generation of

0:14:02.400 --> 0:14:06.880
<v Speaker 1>launch vehicles under that name. The Arian four's inertial reference

0:14:06.920 --> 0:14:10.960
<v Speaker 1>system would convert sixty four bit floating point numbers into

0:14:11.040 --> 0:14:14.959
<v Speaker 1>a sixteen bits signed integer, and it worked just fine.

0:14:16.240 --> 0:14:21.800
<v Speaker 1>But the Arian five stats were beefier than its predecessor

0:14:22.120 --> 0:14:25.920
<v Speaker 1>with faster engines, and that was where the problem really started.

0:14:26.000 --> 0:14:29.320
<v Speaker 1>The engine output meant those sixty four bit floating point

0:14:29.360 --> 0:14:33.760
<v Speaker 1>numbers were significantly larger than the ones generated by the

0:14:33.800 --> 0:14:38.160
<v Speaker 1>engines on the Arian four. They didn't anticipate this, so

0:14:38.240 --> 0:14:42.360
<v Speaker 1>during the conversion process there was actually data overflow, and

0:14:42.440 --> 0:14:46.320
<v Speaker 1>that overflow caused both the backup computer and the primary

0:14:46.320 --> 0:14:49.160
<v Speaker 1>computer aboard the are N five to crash, and they

0:14:49.200 --> 0:14:52.920
<v Speaker 1>crashed in that order. The backup computer crashed first, followed

0:14:52.920 --> 0:14:55.840
<v Speaker 1>by the primary computer a couple of seconds later. The

0:14:55.920 --> 0:14:58.040
<v Speaker 1>whole thing took less than a minute to go from

0:14:58.120 --> 0:15:03.960
<v Speaker 1>launch to disintegration. Oops, now we're gonna stick with space.

0:15:04.000 --> 0:15:10.160
<v Speaker 1>But jumped forward to and the Mars Climate Orbiter. This

0:15:10.320 --> 0:15:15.320
<v Speaker 1>was an unfortunate problem. So this particular spacecraft was meant

0:15:15.320 --> 0:15:18.880
<v Speaker 1>to study Mars's climate, atmosphere and surface changes, and it

0:15:18.960 --> 0:15:21.360
<v Speaker 1>was also supposed to be a kind of relay station

0:15:21.440 --> 0:15:25.600
<v Speaker 1>for landers that would explore Mars's surface, but none of

0:15:25.640 --> 0:15:29.360
<v Speaker 1>that would last because of some pretty significant goofs. So

0:15:29.400 --> 0:15:34.760
<v Speaker 1>on September, the orbiter passed into the upper atmosphere of

0:15:34.800 --> 0:15:40.200
<v Speaker 1>Mars and did so at a pretty low altitude. And

0:15:40.280 --> 0:15:42.600
<v Speaker 1>this is what folks in the space industry called a

0:15:42.720 --> 0:15:47.120
<v Speaker 1>bad thing. The drag on the spacecraft was significant. It

0:15:47.200 --> 0:15:51.840
<v Speaker 1>began to fall apart and it was destroyed upon entering

0:15:51.880 --> 0:15:57.000
<v Speaker 1>Mars's atmosphere. That's what happened. So the software guiding the

0:15:57.120 --> 0:16:02.160
<v Speaker 1>orbiter was to blame, and it's a dumb, dumb mistake.

0:16:02.400 --> 0:16:04.840
<v Speaker 1>It was supposed to make adjustments to the orbiter's flight

0:16:05.400 --> 0:16:10.000
<v Speaker 1>in SI units specifically in Newton seconds. That's what the

0:16:10.040 --> 0:16:14.880
<v Speaker 1>contract with Lockheed and NASA said, Newton seconds use SI

0:16:15.000 --> 0:16:18.840
<v Speaker 1>units for all of your all of your calculations, but

0:16:18.920 --> 0:16:23.200
<v Speaker 1>the software instead made calculations in non SI units, namely

0:16:23.520 --> 0:16:29.600
<v Speaker 1>pounds seconds. So Lockheeds software gave information to NASA's systems

0:16:29.840 --> 0:16:34.160
<v Speaker 1>using the wrong units of measure. NASA systems then took

0:16:34.160 --> 0:16:37.720
<v Speaker 1>the information, assuming it was with the right units of measure,

0:16:38.160 --> 0:16:43.440
<v Speaker 1>and executed commands based upon that. Uh So, this is

0:16:43.480 --> 0:16:47.480
<v Speaker 1>why if you're ever in a math course and the

0:16:47.480 --> 0:16:50.360
<v Speaker 1>teacher makes you stop in the middle of writing a

0:16:50.440 --> 0:16:52.640
<v Speaker 1>problem on the board and says, where are your units?

0:16:53.320 --> 0:16:55.960
<v Speaker 1>This is why you have to make sure you're using

0:16:56.000 --> 0:16:59.680
<v Speaker 1>the right units, because if you're saying a number and

0:16:59.760 --> 0:17:02.760
<v Speaker 1>you don't associate a unit with it, someone could make

0:17:02.800 --> 0:17:06.160
<v Speaker 1>an incorrect decision based on that and it could be disastrous,

0:17:06.280 --> 0:17:09.080
<v Speaker 1>as it was with the case of this orbiter. The

0:17:09.119 --> 0:17:12.560
<v Speaker 1>thrusters fired at four point four or five times the

0:17:12.640 --> 0:17:15.880
<v Speaker 1>power they were supposed to, and the orbiter didn't stand

0:17:15.880 --> 0:17:19.399
<v Speaker 1>a chance. And this was a pretty expensive mistake. That

0:17:19.520 --> 0:17:23.840
<v Speaker 1>mission's cost came in at three seven point six million dollars.

0:17:24.520 --> 0:17:26.520
<v Speaker 1>But on the bright side, with all of these stories,

0:17:26.560 --> 0:17:29.720
<v Speaker 1>at least no human lives were ever in real danger

0:17:29.800 --> 0:17:33.399
<v Speaker 1>as a result of the mistake. Now I've got a

0:17:33.400 --> 0:17:37.560
<v Speaker 1>lot more to say about bugs, but before I get

0:17:37.560 --> 0:17:40.400
<v Speaker 1>into that, let's take a quick break to thank our sponsor.

0:17:48.880 --> 0:17:50.720
<v Speaker 1>All right, Now, let's make a switch to A T

0:17:50.880 --> 0:17:53.040
<v Speaker 1>and T, which is a company that had a pretty

0:17:53.119 --> 0:17:56.560
<v Speaker 1>big problem with switches once upon a time. I'm talking

0:17:56.600 --> 0:18:00.520
<v Speaker 1>about an issue that popped up on January. That's when

0:18:00.560 --> 0:18:03.000
<v Speaker 1>A T and T long distance customers discovered they were

0:18:03.040 --> 0:18:06.840
<v Speaker 1>unable to make any long distance calls. Why why could

0:18:06.840 --> 0:18:09.920
<v Speaker 1>they no longer reach anybody? Well, A T and T

0:18:10.200 --> 0:18:15.159
<v Speaker 1>s long distance switches, which control that and allow for

0:18:15.320 --> 0:18:18.680
<v Speaker 1>the actual connections to be made, were on the fritz.

0:18:19.040 --> 0:18:21.639
<v Speaker 1>They were trying to reboot over and over again. They

0:18:21.640 --> 0:18:25.399
<v Speaker 1>were just stuck in a reboot cycle. Now, initially the

0:18:25.480 --> 0:18:28.760
<v Speaker 1>company thought it was being hacked, But like I said

0:18:28.760 --> 0:18:30.800
<v Speaker 1>at the top of the show, I'm not covering stories

0:18:30.840 --> 0:18:34.040
<v Speaker 1>about hackers here. I'm talking about big design flaws that

0:18:34.119 --> 0:18:39.280
<v Speaker 1>caused problems. So they weren't getting hacked. That's not what

0:18:39.320 --> 0:18:42.600
<v Speaker 1>was going on with those D fourteen long distance switches. No,

0:18:42.760 --> 0:18:45.760
<v Speaker 1>there was a design problem at fault, so What had

0:18:45.760 --> 0:18:47.439
<v Speaker 1>happened was a T and D had rolled out an

0:18:47.520 --> 0:18:50.960
<v Speaker 1>update to the code that managed the switches, and it

0:18:51.040 --> 0:18:53.280
<v Speaker 1>was meant to increase the efficiency. It was meant to

0:18:53.359 --> 0:18:56.480
<v Speaker 1>speed things up. But the problem was it sped things

0:18:56.560 --> 0:18:59.840
<v Speaker 1>up so much that the system got caught up in itself.

0:19:00.240 --> 0:19:02.000
<v Speaker 1>It gets pretty technical, but I can give you kind

0:19:02.000 --> 0:19:05.479
<v Speaker 1>of a overview of what the problem was. Alright, so

0:19:05.640 --> 0:19:10.120
<v Speaker 1>each switch had a function that allowed it to alert

0:19:10.359 --> 0:19:13.960
<v Speaker 1>the next switch down the line if things were starting

0:19:13.960 --> 0:19:17.919
<v Speaker 1>to get harry. So imagine the switch number one is

0:19:17.960 --> 0:19:21.239
<v Speaker 1>handling traffic, but it's getting really close to capacity. So

0:19:21.280 --> 0:19:23.560
<v Speaker 1>it sends a message over to switch number two and says,

0:19:23.720 --> 0:19:27.040
<v Speaker 1>I can't take on any more work because if I do,

0:19:27.160 --> 0:19:31.240
<v Speaker 1>I'll be overloaded. Switch to then says, no problem, I'll

0:19:31.240 --> 0:19:35.040
<v Speaker 1>take on the any oncoming work for you and we'll

0:19:35.080 --> 0:19:38.000
<v Speaker 1>handle it from there. And if switched number two order

0:19:38.080 --> 0:19:40.720
<v Speaker 1>to get into the same source situation, it would say

0:19:40.760 --> 0:19:42.679
<v Speaker 1>the same thing to switch number three, and so on

0:19:42.720 --> 0:19:46.600
<v Speaker 1>and so forth. Now, eventually each switch will contact the

0:19:46.600 --> 0:19:49.320
<v Speaker 1>one below it and say, hey, how are you doing there?

0:19:49.720 --> 0:19:53.040
<v Speaker 1>And if the answer is okay, then everything switches back

0:19:53.080 --> 0:19:56.600
<v Speaker 1>and you go back to normal operation. That's how it's

0:19:56.600 --> 0:20:01.000
<v Speaker 1>supposed to work up. But A T and He's updated

0:20:01.040 --> 0:20:05.520
<v Speaker 1>code sped things up so much it caused some real issues,

0:20:05.600 --> 0:20:09.000
<v Speaker 1>and there was some poor timing, just coincidental timing that

0:20:09.040 --> 0:20:12.600
<v Speaker 1>made things worse. So switch number one starts to get

0:20:12.640 --> 0:20:15.480
<v Speaker 1>overwhelmed and sends a message over to switch number two,

0:20:15.480 --> 0:20:17.960
<v Speaker 1>But switched number two was just in the middle of

0:20:18.080 --> 0:20:22.240
<v Speaker 1>resetting itself. So switch number two goes into reset mode,

0:20:22.280 --> 0:20:24.520
<v Speaker 1>which says do not disturb. Sends a message over to

0:20:24.560 --> 0:20:28.200
<v Speaker 1>switch number three. That prompted switched number three to overload

0:20:28.480 --> 0:20:30.520
<v Speaker 1>and put up a do not disturb sign. Move that

0:20:30.520 --> 0:20:33.520
<v Speaker 1>down to switch number four. This whole thing goes down

0:20:33.560 --> 0:20:36.919
<v Speaker 1>the entire line of on switches. They all end up

0:20:36.920 --> 0:20:39.760
<v Speaker 1>getting overloaded as a result of this, and I'll go

0:20:39.800 --> 0:20:44.600
<v Speaker 1>into reset mode and they get stuck there. That problem

0:20:44.680 --> 0:20:48.560
<v Speaker 1>lasted for nine hours before A T and T was

0:20:48.600 --> 0:20:51.480
<v Speaker 1>finally able to address the message load on the entire

0:20:51.560 --> 0:20:54.639
<v Speaker 1>system and get the switches back to normal. The estimated

0:20:54.760 --> 0:20:57.840
<v Speaker 1>cost of lost revenue for that time was about sixty

0:20:57.960 --> 0:21:01.560
<v Speaker 1>million dollars in long distance calls, and there were a

0:21:01.600 --> 0:21:04.440
<v Speaker 1>lot of angry customers to boot, so to placate them,

0:21:04.480 --> 0:21:07.600
<v Speaker 1>A T and T offered reduced long distance rates on

0:21:07.720 --> 0:21:12.320
<v Speaker 1>Valentine's Day pretty ugly by the A, T and T

0:21:12.320 --> 0:21:14.159
<v Speaker 1>tried to handle it, at least in a way that

0:21:14.320 --> 0:21:17.920
<v Speaker 1>didn't turn it into a pr nightmare. Not so with Intel.

0:21:18.600 --> 0:21:21.199
<v Speaker 1>That's what it brings us to the Pendium problem. I

0:21:21.240 --> 0:21:23.880
<v Speaker 1>don't know if you guys remember when Penium processors first

0:21:23.960 --> 0:21:26.600
<v Speaker 1>came out, but they were a big deal. It was

0:21:27.560 --> 0:21:30.679
<v Speaker 1>a redesign of the architecture of the microprocessor and it

0:21:30.720 --> 0:21:34.119
<v Speaker 1>was meant to really speed things up. Well, Intel had

0:21:34.160 --> 0:21:38.679
<v Speaker 1>a massive nightmare in n thanks to a flaw in

0:21:38.760 --> 0:21:43.960
<v Speaker 1>the entire first generation of Pentium processors. Now, when you

0:21:44.000 --> 0:21:47.280
<v Speaker 1>break it all down, a CPU is all about performing

0:21:47.320 --> 0:21:50.320
<v Speaker 1>mathematical operations on data, so it's kind of important that

0:21:50.440 --> 0:21:55.480
<v Speaker 1>does this correctly. Unfortunately, the flaw and the Pentium processors

0:21:55.520 --> 0:21:57.840
<v Speaker 1>kind of messed that up. And the issue has to

0:21:57.840 --> 0:22:01.760
<v Speaker 1>do with floating point operations. So the predecessor to the Pentium,

0:22:01.840 --> 0:22:05.639
<v Speaker 1>the four six, used a shift and subtract algorithm for

0:22:05.680 --> 0:22:10.840
<v Speaker 1>floating point operations, which was effective but relatively slow compared

0:22:10.880 --> 0:22:15.480
<v Speaker 1>to what Intel thought they could do by totally redesigning

0:22:15.480 --> 0:22:19.840
<v Speaker 1>that structure and using a look up table approach. Now,

0:22:19.840 --> 0:22:23.040
<v Speaker 1>the table was supposed to have one thousand sixty six

0:22:23.320 --> 0:22:27.679
<v Speaker 1>entries programmed directly onto the logic array of the Pentium processor,

0:22:28.800 --> 0:22:33.200
<v Speaker 1>but for some reason only one thousand sixty one entries

0:22:33.280 --> 0:22:37.680
<v Speaker 1>made it. Five entries went missing and essentially returned an

0:22:37.680 --> 0:22:42.280
<v Speaker 1>answer of zero instead of what they were supposed to say,

0:22:42.359 --> 0:22:44.800
<v Speaker 1>so if a calculation accessed one of those missing cells,

0:22:44.840 --> 0:22:47.159
<v Speaker 1>it got zero, even though that's not the correct answer.

0:22:48.080 --> 0:22:50.600
<v Speaker 1>All the first generation pentiums went out with this error

0:22:50.640 --> 0:22:53.080
<v Speaker 1>because it was so minor that it wasn't even picked

0:22:53.200 --> 0:22:58.560
<v Speaker 1>up by Intel's quality control at the time. Now, processes

0:22:58.560 --> 0:23:02.040
<v Speaker 1>worked just fine up to the eighth decimal point. Beyond

0:23:02.119 --> 0:23:05.240
<v Speaker 1>that things got messy, But for most folks that wasn't

0:23:05.240 --> 0:23:09.800
<v Speaker 1>a problem because they weren't doing mathematical calculations that needed

0:23:09.840 --> 0:23:13.280
<v Speaker 1>that level of precision. It just wasn't a thing. In fact,

0:23:13.320 --> 0:23:16.280
<v Speaker 1>there was only a one in three sixty billion chance

0:23:16.760 --> 0:23:20.520
<v Speaker 1>that this error would cause a big enough problem to

0:23:20.640 --> 0:23:25.040
<v Speaker 1>reach up to the fourth decimal place. So most calculations

0:23:25.040 --> 0:23:27.879
<v Speaker 1>that were simple were bulletproof. You you were fine. But

0:23:27.960 --> 0:23:31.320
<v Speaker 1>if you needed that precision, if you needed that really

0:23:31.440 --> 0:23:35.320
<v Speaker 1>fine degree, that's when you would encounter the flaw, and

0:23:35.400 --> 0:23:39.320
<v Speaker 1>that happened because there are math professors in this world,

0:23:39.760 --> 0:23:44.919
<v Speaker 1>and one of those, Thomas Nicely, discovered in October that

0:23:45.000 --> 0:23:48.080
<v Speaker 1>he was getting errors because of this issue. He needed

0:23:48.080 --> 0:23:51.720
<v Speaker 1>the processor to work correctly, and so he contacted Intel

0:23:51.760 --> 0:23:55.679
<v Speaker 1>about the problem. And this is where we take a

0:23:55.720 --> 0:23:58.520
<v Speaker 1>moment to acknowledge there's a right way and a wrong

0:23:58.560 --> 0:24:03.360
<v Speaker 1>way to handle an issue. That's your fault until decided

0:24:03.400 --> 0:24:06.080
<v Speaker 1>to go the wrong way. My opinion is, if you

0:24:06.119 --> 0:24:08.400
<v Speaker 1>make a mistake, it's usually a good idea to just

0:24:08.600 --> 0:24:10.800
<v Speaker 1>own up to it and try to make it better.

0:24:11.480 --> 0:24:13.840
<v Speaker 1>But Intel's response was more along the lines of, yeah,

0:24:13.920 --> 0:24:16.080
<v Speaker 1>we didn't think it was a big deal. And then

0:24:16.119 --> 0:24:20.680
<v Speaker 1>Intel made other pr blenders. But because people began to hear, hey,

0:24:20.760 --> 0:24:24.000
<v Speaker 1>that pentium processor in your computer that you just bought,

0:24:24.760 --> 0:24:28.359
<v Speaker 1>it doesn't work properly. So people wanted to get replacements.

0:24:29.040 --> 0:24:31.399
<v Speaker 1>But Intel said, oh, we're only going to replace the

0:24:31.440 --> 0:24:34.760
<v Speaker 1>ones if you can prove that the mistakes that it

0:24:34.800 --> 0:24:38.920
<v Speaker 1>makes affect you in some meaningful way. So they weren't

0:24:39.480 --> 0:24:42.200
<v Speaker 1>They weren't denying that there was a problem. They were

0:24:42.240 --> 0:24:44.840
<v Speaker 1>just saying, hey, unless you can prove the problem affects you,

0:24:44.880 --> 0:24:48.840
<v Speaker 1>where we don't care that didn't go well. If you

0:24:48.920 --> 0:24:51.159
<v Speaker 1>create a product and you market it as the future

0:24:51.200 --> 0:24:53.639
<v Speaker 1>of computing, and then it's discovered there's a flaw on

0:24:53.720 --> 0:24:56.280
<v Speaker 1>the design, and then you say we'll replace it, but

0:24:56.359 --> 0:25:00.199
<v Speaker 1>only if you prove you deserve it, it doesn't end

0:25:00.280 --> 0:25:04.240
<v Speaker 1>to make your customer base very happy. So ultimately, until

0:25:04.960 --> 0:25:08.119
<v Speaker 1>reverse that decision and offered to replace the processor for

0:25:08.240 --> 0:25:12.119
<v Speaker 1>anyone who wanted it who had a first generation Pentium,

0:25:12.280 --> 0:25:15.919
<v Speaker 1>and that mistake ended up costing the company four seventy

0:25:15.920 --> 0:25:21.560
<v Speaker 1>five million dollars. Yikes. All right, now we're gonna switch

0:25:21.600 --> 0:25:25.240
<v Speaker 1>Gears over to Microsoft. First, I think you could claim

0:25:25.280 --> 0:25:29.760
<v Speaker 1>that all of Microsoft Bob product that was supposed to

0:25:29.760 --> 0:25:33.479
<v Speaker 1>be an easy, accessible computer interface was really just a

0:25:33.520 --> 0:25:38.080
<v Speaker 1>massive software bug. I mean, it introduced comic sands for

0:25:38.119 --> 0:25:43.000
<v Speaker 1>goodness sakes, The cluttered organization system, the lack of meaningful security,

0:25:43.000 --> 0:25:48.120
<v Speaker 1>and other numerous issues plagued that software. But we did

0:25:48.119 --> 0:25:50.720
<v Speaker 1>an entire episode of Tech Stuff about Microsoft Bob a

0:25:50.720 --> 0:25:52.879
<v Speaker 1>couple of years ago, so I'm not gonna dwell on

0:25:52.960 --> 0:25:55.840
<v Speaker 1>it anymore, but if you want to hear more about it,

0:25:56.560 --> 0:25:59.600
<v Speaker 1>go find that episode. It was a fun one. Now

0:25:59.600 --> 0:26:04.600
<v Speaker 1>into the seven Microsoft experienced a massive headache when a

0:26:04.600 --> 0:26:08.040
<v Speaker 1>bug on their servers notified thousands of Windows customers that

0:26:08.080 --> 0:26:11.280
<v Speaker 1>they were filthy, dirty software pirates and they should be punished.

0:26:11.600 --> 0:26:16.320
<v Speaker 1>These include people who actually had legitimate, legal purchase copies

0:26:16.400 --> 0:26:20.840
<v Speaker 1>of Windows XP or Vista. So the problem here was

0:26:20.880 --> 0:26:25.879
<v Speaker 1>Microsoft had an initiative called Windows Genuine Advantage, and it

0:26:26.000 --> 0:26:28.440
<v Speaker 1>was a nice name for a strategy meant to curtail

0:26:28.800 --> 0:26:33.400
<v Speaker 1>operating system piracy. Essentially, it was a component in Windows

0:26:33.720 --> 0:26:36.199
<v Speaker 1>that would allow Microsoft to figure out if the copy

0:26:36.280 --> 0:26:41.760
<v Speaker 1>of Windows on any given computer was legit. In other words,

0:26:41.800 --> 0:26:44.240
<v Speaker 1>it was a d r M strategy. But in two

0:26:44.240 --> 0:26:48.080
<v Speaker 1>thousand seven, a buggy install of software on a server

0:26:48.280 --> 0:26:54.359
<v Speaker 1>misidentified thousands of legitimate, law abiding customers as pirates for

0:26:54.560 --> 0:26:57.679
<v Speaker 1>nineteen hours. The software just laid down the law, and

0:26:57.720 --> 0:27:00.800
<v Speaker 1>so people began to receive sternly written warnings about their

0:27:00.880 --> 0:27:03.960
<v Speaker 1>choice to indulge in bad behavior. And if you were

0:27:03.960 --> 0:27:07.560
<v Speaker 1>a Windows Vista customer, you had it the worst, not

0:27:07.800 --> 0:27:10.680
<v Speaker 1>just because you were using Windows Vista, which I think

0:27:10.680 --> 0:27:13.840
<v Speaker 1>we all agree was not one of the bright points

0:27:13.840 --> 0:27:19.639
<v Speaker 1>and Microsoft's operating system history, but also because Microsoft had

0:27:19.640 --> 0:27:22.959
<v Speaker 1>built in the ability for Windows Genuine Advantage to switch

0:27:23.000 --> 0:27:27.679
<v Speaker 1>off certain operating system features in Windows Vista if it

0:27:27.760 --> 0:27:31.679
<v Speaker 1>determined that the copy someone was using was a pirated version,

0:27:32.160 --> 0:27:35.879
<v Speaker 1>so it was misidentifying real versions as pirated ones, turning

0:27:35.920 --> 0:27:38.520
<v Speaker 1>off features, and these are for people who have bought

0:27:38.680 --> 0:27:41.239
<v Speaker 1>legitimate copies. This, by the way, is one of the

0:27:41.240 --> 0:27:45.920
<v Speaker 1>big arguments people have against DRM. It has the tendency

0:27:46.000 --> 0:27:51.320
<v Speaker 1>to punish legitimate customers. And you feel like you're stupid

0:27:51.480 --> 0:27:54.760
<v Speaker 1>for buying a copy of a piece of software rather

0:27:54.800 --> 0:27:57.600
<v Speaker 1>than just stealing one that has had those features or

0:27:57.640 --> 0:28:01.800
<v Speaker 1>those defenses removed. Like why you're you're creating more incentives

0:28:01.840 --> 0:28:07.199
<v Speaker 1>for people to go outside and get a pirated copy. Alright,

0:28:07.240 --> 0:28:10.600
<v Speaker 1>so imagine you've purchased this legitimate copy of Windows Vista.

0:28:10.680 --> 0:28:13.000
<v Speaker 1>First of all, you you already feel bad. Then you're

0:28:13.040 --> 0:28:15.879
<v Speaker 1>told you're a thief, so you feel worse. Then someone

0:28:15.920 --> 0:28:18.800
<v Speaker 1>remotely switches off several features of your operating system. That

0:28:18.880 --> 0:28:22.439
<v Speaker 1>was not a great pr message, So that was a

0:28:22.560 --> 0:28:26.000
<v Speaker 1>real issue. They did eventually fix it after that nineteen hours,

0:28:26.040 --> 0:28:29.119
<v Speaker 1>but by then people were already very upset. Also, I

0:28:29.160 --> 0:28:34.800
<v Speaker 1>don't wanna just, you know, pile lots of abuse onto Microsoft.

0:28:34.880 --> 0:28:38.719
<v Speaker 1>I gotta talk about Apple here too. So the company

0:28:38.840 --> 0:28:42.239
<v Speaker 1>prides itself on a high standard of quality, and in

0:28:42.280 --> 0:28:45.200
<v Speaker 1>general it's pretty good about living up to that standard

0:28:45.240 --> 0:28:47.520
<v Speaker 1>of quality, depending upon your point of view of their

0:28:47.600 --> 0:28:51.760
<v Speaker 1>various products. But that hasn't stopped a few clunkers getting

0:28:51.800 --> 0:28:55.840
<v Speaker 1>through and into the public hands. And that was the

0:28:55.880 --> 0:28:58.880
<v Speaker 1>case in two thousand twelve with Apple Maps. If you

0:28:58.920 --> 0:29:01.160
<v Speaker 1>owned an iPhone back in two thousand twelve when Apple

0:29:01.200 --> 0:29:04.600
<v Speaker 1>Maps came out, you may remember this problem. It's pretty

0:29:04.600 --> 0:29:08.440
<v Speaker 1>well publicized. Maps were inaccurate, sometimes leaving out important details

0:29:08.480 --> 0:29:11.360
<v Speaker 1>like you know, a river or a lake between you

0:29:11.440 --> 0:29:14.440
<v Speaker 1>and your destination, things that might be important if I

0:29:14.440 --> 0:29:17.760
<v Speaker 1>don't know you don't drive an amphibious vehicle, might not

0:29:17.920 --> 0:29:21.840
<v Speaker 1>have a road on there that's important. Might misidentify the

0:29:21.880 --> 0:29:25.360
<v Speaker 1>location of a historical landmark. For instance, that thought the

0:29:25.400 --> 0:29:28.120
<v Speaker 1>Washington Monument was across the street from where it is,

0:29:28.720 --> 0:29:32.120
<v Speaker 1>But nope, it's just where we left it. Despite all

0:29:32.200 --> 0:29:37.080
<v Speaker 1>of roland emericks best attempts to move it or destroy it,

0:29:37.080 --> 0:29:41.720
<v Speaker 1>it's still there. The real problem here was that the

0:29:41.760 --> 0:29:45.640
<v Speaker 1>Apple software just wasn't ready for public unveiling. It was.

0:29:45.760 --> 0:29:48.320
<v Speaker 1>It needed a lot more testing. It was trying to

0:29:48.560 --> 0:29:51.160
<v Speaker 1>play catch up to Google Maps, but Google had the

0:29:51.200 --> 0:29:54.000
<v Speaker 1>advantage of working with companies that have been doing mapping

0:29:54.040 --> 0:29:58.160
<v Speaker 1>software for years. Google acquired those companies and acquired the

0:29:58.200 --> 0:30:01.360
<v Speaker 1>expertise of people who have been working that software, and

0:30:01.440 --> 0:30:04.960
<v Speaker 1>Apple was really just trying to create their own version

0:30:05.600 --> 0:30:07.240
<v Speaker 1>and get it out as fast as it could. But

0:30:07.400 --> 0:30:10.080
<v Speaker 1>it got out a little too early, and the company

0:30:10.120 --> 0:30:12.440
<v Speaker 1>spent the next several months tweaking maps and trying to

0:30:12.520 --> 0:30:14.600
<v Speaker 1>keep control of the situation. But by that time, many

0:30:14.640 --> 0:30:17.640
<v Speaker 1>of Apple's fans, even the most devoted ones, had kind

0:30:17.640 --> 0:30:21.800
<v Speaker 1>of given up and switched over to Google Maps instead. Well,

0:30:21.840 --> 0:30:24.320
<v Speaker 1>that's most of the fun stuff. I've got some really

0:30:24.560 --> 0:30:28.640
<v Speaker 1>serious bugs to cover. But before I do that, let's

0:30:28.640 --> 0:30:40.280
<v Speaker 1>take another quick break and thank our sponsor. Now I'm

0:30:40.320 --> 0:30:43.640
<v Speaker 1>going to transition into some serious bugs. These are ones

0:30:43.720 --> 0:30:48.280
<v Speaker 1>that either threatened the lives of people or they contributed

0:30:48.360 --> 0:30:53.560
<v Speaker 1>to people dying. The ones I've talked about now up

0:30:53.560 --> 0:30:56.719
<v Speaker 1>to now rather have cost companies millions of dollars, but

0:30:56.800 --> 0:31:00.920
<v Speaker 1>no one's life was truly threatened on Fortunately, that's not

0:31:01.000 --> 0:31:03.480
<v Speaker 1>the case with all software bugs. Now, a couple of

0:31:03.520 --> 0:31:08.520
<v Speaker 1>bugs had the potential to kill millions of people. One

0:31:08.560 --> 0:31:13.520
<v Speaker 1>of those happened in nineteen eighty a famous famous bug,

0:31:14.040 --> 0:31:16.480
<v Speaker 1>or at least a faulty circuit, and that was a

0:31:16.480 --> 0:31:19.240
<v Speaker 1>faulty circuit in nora ADS computer system which caused it

0:31:19.280 --> 0:31:22.520
<v Speaker 1>to mistakenly conclude the US was under nuclear attack from

0:31:22.560 --> 0:31:28.000
<v Speaker 1>the Soviet Union. So displays on nora AD systems showed

0:31:28.040 --> 0:31:31.320
<v Speaker 1>seemingly random attacks, and they didn't correspond with each other.

0:31:31.400 --> 0:31:34.520
<v Speaker 1>So the display might show, Hey, there two missiles heading

0:31:34.600 --> 0:31:37.240
<v Speaker 1>over from the Soviet Union. No, they're two hundred. No

0:31:37.400 --> 0:31:41.240
<v Speaker 1>they're fifty. No there's three, And it wasn't consistent, and

0:31:41.360 --> 0:31:45.840
<v Speaker 1>command posts around the US all had conflicting information, which

0:31:45.920 --> 0:31:49.520
<v Speaker 1>led leaders to conclude the whole thing was a regrettable

0:31:49.560 --> 0:31:53.600
<v Speaker 1>computer error, and they were right to do so. To

0:31:53.680 --> 0:31:56.160
<v Speaker 1>be fair, they were kind of prepared for this because

0:31:56.160 --> 0:31:58.600
<v Speaker 1>there was another incident that it actually happened in nineteen

0:31:58.680 --> 0:32:02.240
<v Speaker 1>seventy nine that was a scarier and in that case,

0:32:02.280 --> 0:32:05.840
<v Speaker 1>someone mistakenly inserted a training scenario into the computer system

0:32:05.840 --> 0:32:07.960
<v Speaker 1>that made it seem like the Soviet Union had launched

0:32:07.960 --> 0:32:11.239
<v Speaker 1>an all out nuclear attack on the US. But that

0:32:11.360 --> 0:32:13.480
<v Speaker 1>wasn't a bug. That was a mistake on the part

0:32:13.480 --> 0:32:16.600
<v Speaker 1>of a human who had accidentally uploaded the wrong or

0:32:16.880 --> 0:32:20.040
<v Speaker 1>rather executed the wrong command. It didn't have something to

0:32:20.080 --> 0:32:23.080
<v Speaker 1>do with a flaw in the computer system itself. However,

0:32:23.640 --> 0:32:28.560
<v Speaker 1>because that thing happened and everybody was freaked out and

0:32:28.560 --> 0:32:30.400
<v Speaker 1>then was able to determine that, in fact it was

0:32:30.440 --> 0:32:33.600
<v Speaker 1>a false alarm, it meant that calmer heads could prevail.

0:32:33.720 --> 0:32:38.880
<v Speaker 1>In the nineteen eighty incident, so the Soviets also had

0:32:38.880 --> 0:32:41.120
<v Speaker 1>a close call just a few years later. It was

0:32:41.160 --> 0:32:44.280
<v Speaker 1>a bug in the early warning detection software that the

0:32:44.400 --> 0:32:47.760
<v Speaker 1>USSR was using in the early eighties, and on September

0:32:47.760 --> 0:32:51.760
<v Speaker 1>twenty three, Night three and so Union received an alert

0:32:52.200 --> 0:32:54.600
<v Speaker 1>that the US had launched a nuclear attack in the

0:32:54.640 --> 0:32:59.720
<v Speaker 1>form of five nuclear warheads UH technically two different attacks.

0:33:00.080 --> 0:33:03.040
<v Speaker 1>The first would have been a single nuclear warhead and

0:33:03.080 --> 0:33:06.680
<v Speaker 1>the second was four nuclear warheads, and this was during

0:33:06.680 --> 0:33:10.360
<v Speaker 1>a particularly stressful period in the history of both countries

0:33:10.400 --> 0:33:13.600
<v Speaker 1>and their relationship with each other, at the height of

0:33:13.640 --> 0:33:20.200
<v Speaker 1>the Cold War nine three now fortunately UH Soviet Air

0:33:20.280 --> 0:33:26.640
<v Speaker 1>Defense Forces Lieutenant Colonel Stanislav Petrov suspected that this report

0:33:26.760 --> 0:33:29.520
<v Speaker 1>was an error and that there was some sort of

0:33:29.560 --> 0:33:32.960
<v Speaker 1>bug in the software or a mistake in the reporting

0:33:33.000 --> 0:33:36.640
<v Speaker 1>system that caused this. He gave a command to hold

0:33:36.680 --> 0:33:39.600
<v Speaker 1>off on any sort of retaliatory strike, which would have

0:33:39.600 --> 0:33:43.600
<v Speaker 1>initiated a full scale nuclear war had it happened. Petrov

0:33:43.800 --> 0:33:46.400
<v Speaker 1>was the officer in charge of a a bunker that served

0:33:46.400 --> 0:33:49.400
<v Speaker 1>as the command center for this early warning system, and

0:33:49.440 --> 0:33:53.240
<v Speaker 1>he he had said afterward that his reckoning was any

0:33:53.280 --> 0:33:56.600
<v Speaker 1>real attack would consist of hundreds of warheads, not five.

0:33:57.400 --> 0:34:01.080
<v Speaker 1>No one would start an attack with just five warheads,

0:34:01.360 --> 0:34:03.080
<v Speaker 1>so it was more likely to be an error than

0:34:03.120 --> 0:34:05.960
<v Speaker 1>a genuine attack. So he gave the command to wait

0:34:06.040 --> 0:34:09.360
<v Speaker 1>until the reported missiles would pass into the range of radar,

0:34:09.880 --> 0:34:13.520
<v Speaker 1>which only extended as far as the horizon, so if

0:34:13.760 --> 0:34:15.839
<v Speaker 1>it had in fact been a real attack, it would

0:34:15.840 --> 0:34:19.640
<v Speaker 1>have potentially limited the Soviet Union's ability to respond. But

0:34:20.000 --> 0:34:25.919
<v Speaker 1>no missile showed up, and he was vindicated in his decision. Now,

0:34:25.920 --> 0:34:27.960
<v Speaker 1>the cause of the false alarm in this case was

0:34:28.640 --> 0:34:33.720
<v Speaker 1>a combination of factors that the designers didn't anticipate, uh

0:34:33.800 --> 0:34:38.160
<v Speaker 1>which largely consisted of sunlight hitting high altitude clouds at

0:34:38.160 --> 0:34:42.239
<v Speaker 1>a particular angle from a particular perspective of the satellites,

0:34:42.600 --> 0:34:49.120
<v Speaker 1>So the satellites misidentified that reflection as a warhead. Now

0:34:49.160 --> 0:34:51.359
<v Speaker 1>they were the subviys were able to address this error

0:34:51.360 --> 0:34:54.960
<v Speaker 1>in the future by adding another step in which these

0:34:55.040 --> 0:34:59.400
<v Speaker 1>satellites would cross reference data from other geostationary satellites to

0:34:59.520 --> 0:35:04.080
<v Speaker 1>make certain and that they are identifying actual rockets as

0:35:04.080 --> 0:35:10.400
<v Speaker 1>opposed to high altitude clouds. Now, there are several cases

0:35:10.440 --> 0:35:16.040
<v Speaker 1>of software bugs leading to actual deaths. For example, the

0:35:16.200 --> 0:35:19.200
<v Speaker 1>the RACK was such a case. Now that was a

0:35:19.320 --> 0:35:22.440
<v Speaker 1>radiation therapy machine that could deliver two different modes of

0:35:22.520 --> 0:35:27.040
<v Speaker 1>radiation treatments. The first was a low powered direct electron

0:35:27.160 --> 0:35:30.839
<v Speaker 1>beam and the second was a mega volt X ray beam. Now,

0:35:30.840 --> 0:35:33.319
<v Speaker 1>the x ray beam was far more intense and it

0:35:33.400 --> 0:35:37.719
<v Speaker 1>required physicians to provide shielding to patients to limit exposure

0:35:37.760 --> 0:35:41.760
<v Speaker 1>to the beam. But the therac had inherited its code

0:35:41.800 --> 0:35:45.880
<v Speaker 1>from its predecessor, which had different hardware constraints. Now the

0:35:45.920 --> 0:35:50.040
<v Speaker 1>new machine meant that these constraints weren't there, and it

0:35:50.120 --> 0:35:53.480
<v Speaker 1>created a deadly problem if operators changed the machines mode

0:35:53.600 --> 0:35:56.480
<v Speaker 1>too quickly from one to the other, it would actually

0:35:56.480 --> 0:35:59.560
<v Speaker 1>send two sets of instructions to the processor, one for

0:35:59.640 --> 0:36:02.920
<v Speaker 1>each mode of operation, and whichever set of instructions reached

0:36:02.920 --> 0:36:06.440
<v Speaker 1>the processor first, that's what the machine would switch to.

0:36:07.440 --> 0:36:12.239
<v Speaker 1>So let's say you've been operating the THERAC in the

0:36:12.280 --> 0:36:15.440
<v Speaker 1>mega volt X ray mode, but now you're going to

0:36:15.520 --> 0:36:18.600
<v Speaker 1>have a patient come in. You need to administer radiation therapy,

0:36:18.920 --> 0:36:21.439
<v Speaker 1>so you want to switch it to low electron. Being

0:36:21.960 --> 0:36:24.759
<v Speaker 1>you switch it too quickly, it sends two sets of

0:36:24.800 --> 0:36:27.440
<v Speaker 1>instructions to the processor, and the one that arises the

0:36:27.480 --> 0:36:30.640
<v Speaker 1>mega volt x ray instruction, so instead of switching it,

0:36:30.920 --> 0:36:35.880
<v Speaker 1>you confirm to stay on the more intense, deadlier radiation.

0:36:37.400 --> 0:36:42.680
<v Speaker 1>The tragic news is this did happen several times. Six

0:36:42.719 --> 0:36:46.720
<v Speaker 1>patients were documented as dying from complications due to radiation

0:36:46.760 --> 0:36:51.200
<v Speaker 1>poisoning from THERAC twenty machines between night five and nineteen

0:36:51.280 --> 0:36:54.640
<v Speaker 1>eight six, and while the machine would send error messages

0:36:54.719 --> 0:36:58.720
<v Speaker 1>when these conditions were present, the documentation for the machine

0:36:58.760 --> 0:37:01.520
<v Speaker 1>didn't explain what the errors meant. It didn't say, hey,

0:37:01.520 --> 0:37:04.280
<v Speaker 1>if you get this error, it means that you've switched

0:37:04.360 --> 0:37:08.279
<v Speaker 1>modes too quickly and you need to address this. So,

0:37:08.320 --> 0:37:12.880
<v Speaker 1>since operators weren't told that this was necessarily a hazardous condition,

0:37:12.960 --> 0:37:16.319
<v Speaker 1>they would just clear the error and proceed, and there

0:37:16.320 --> 0:37:21.560
<v Speaker 1>were deadly results. In a similar vein in Panama City, Panama,

0:37:22.400 --> 0:37:26.040
<v Speaker 1>there was an incident involving a Cobalt sixty system, actually

0:37:26.080 --> 0:37:29.720
<v Speaker 1>several incidents involving this Cobalt sixty system that was running

0:37:29.760 --> 0:37:32.840
<v Speaker 1>therapy planning software made by a company called Multi Data

0:37:32.880 --> 0:37:36.680
<v Speaker 1>Systems International. Now, the software's purpose was to calculate the

0:37:36.719 --> 0:37:40.320
<v Speaker 1>amount of radiation that cancer patients should receive in a

0:37:40.440 --> 0:37:46.080
<v Speaker 1>radiation therapy sessions. During these radiation therapy sessions, the therapists

0:37:46.280 --> 0:37:50.400
<v Speaker 1>were meant to place metal shields on the patient to

0:37:50.440 --> 0:37:55.680
<v Speaker 1>protect healthy tissue from radiation damage. And the software would

0:37:55.719 --> 0:37:59.759
<v Speaker 1>allow therapists to use a methodology to show where those

0:38:00.000 --> 0:38:02.920
<v Speaker 1>shields were on the patient, to indicate where the shields

0:38:02.960 --> 0:38:07.440
<v Speaker 1>are present. But they could only draw up to four shields,

0:38:07.800 --> 0:38:10.799
<v Speaker 1>and the doctors in Panama wanted to use five shields

0:38:10.840 --> 0:38:14.840
<v Speaker 1>for particular therapy sessions. They were overloaded, they had a

0:38:14.880 --> 0:38:17.160
<v Speaker 1>long waiting list of patients, and they were trying to

0:38:17.160 --> 0:38:21.000
<v Speaker 1>make things more efficient, and they discovered that they could

0:38:21.080 --> 0:38:25.480
<v Speaker 1>kind of work around this limitation of four shields by

0:38:25.560 --> 0:38:27.839
<v Speaker 1>drawing a design on the computer screen as if they

0:38:27.840 --> 0:38:31.080
<v Speaker 1>were using just one large shield that has a hole

0:38:31.120 --> 0:38:33.080
<v Speaker 1>in the middle of it. And so what they would

0:38:33.080 --> 0:38:35.880
<v Speaker 1>do is they would arrange the five shields to essentially

0:38:35.880 --> 0:38:38.520
<v Speaker 1>be in the same sort of shape with the middle

0:38:38.680 --> 0:38:40.840
<v Speaker 1>of it being open so that they can have the

0:38:40.920 --> 0:38:46.360
<v Speaker 1>radiation therapy passed through it. Uh, But they didn't realize

0:38:46.400 --> 0:38:48.520
<v Speaker 1>that the software had a bug in it, and that

0:38:48.560 --> 0:38:51.719
<v Speaker 1>bug was if you drew the hole in one direction,

0:38:52.200 --> 0:38:55.000
<v Speaker 1>you get the correct dose of radiation, but if you

0:38:55.080 --> 0:38:59.440
<v Speaker 1>drew it in the other direction, so like clockwise versus counterclockwise,

0:39:00.040 --> 0:39:03.719
<v Speaker 1>the software would recommend a dosage twice as strong as

0:39:03.760 --> 0:39:07.360
<v Speaker 1>what was needed, and the result was devastating. Eight patients

0:39:07.520 --> 0:39:11.720
<v Speaker 1>died as a result of this, and another twenty received

0:39:11.760 --> 0:39:14.520
<v Speaker 1>doses high enough to potentially cause health problems. Later on,

0:39:15.840 --> 0:39:18.839
<v Speaker 1>the physicians were actually arrested and brought up on murder

0:39:19.000 --> 0:39:22.640
<v Speaker 1>charges because they were supposed to double check all calculations

0:39:22.680 --> 0:39:25.319
<v Speaker 1>by hand to ensure that they were going to give

0:39:25.360 --> 0:39:28.840
<v Speaker 1>the proper dose of radiation treatment. So while the software

0:39:29.040 --> 0:39:33.920
<v Speaker 1>was calculating the incorrect dose, the physicians were responsible for

0:39:34.000 --> 0:39:37.520
<v Speaker 1>making sure that any dose that was calculated was in

0:39:37.520 --> 0:39:39.319
<v Speaker 1>fact the correct one, and they failed to do so,

0:39:39.719 --> 0:39:43.479
<v Speaker 1>or at least that was the charge. There are also

0:39:43.560 --> 0:39:46.520
<v Speaker 1>bugs that involved military applications that have resulted in the

0:39:46.600 --> 0:39:49.520
<v Speaker 1>loss of life. During the Persian Gulf War in Iraqi

0:39:49.719 --> 0:39:52.680
<v Speaker 1>fired scud missile hit a US base in Saudi Arabia

0:39:52.960 --> 0:39:56.960
<v Speaker 1>and it killed twenty eight soldiers. Now the base had

0:39:57.000 --> 0:40:00.880
<v Speaker 1>detected the missile and had launched and fired a Patriot

0:40:00.880 --> 0:40:03.600
<v Speaker 1>missile in return. The purpose of the Patriot missile was

0:40:03.640 --> 0:40:06.759
<v Speaker 1>to intercept and destroy incoming missiles, and the way a

0:40:06.760 --> 0:40:09.719
<v Speaker 1>Patriot missile did this was to use radar pulses to

0:40:09.840 --> 0:40:14.000
<v Speaker 1>guide trajectory calculations so that it would end up getting

0:40:14.040 --> 0:40:17.200
<v Speaker 1>close to the incoming missile. This is harder than it sounds,

0:40:17.239 --> 0:40:20.520
<v Speaker 1>because both missiles are moving very very quickly, so we

0:40:20.560 --> 0:40:23.719
<v Speaker 1>need a very precise information in order to adjust its

0:40:23.760 --> 0:40:28.279
<v Speaker 1>trajectory properly and make sure it was on target. Now,

0:40:28.320 --> 0:40:31.160
<v Speaker 1>once it gets within range, which is between five and

0:40:31.400 --> 0:40:35.239
<v Speaker 1>ten meters I think uh, it would then fire out

0:40:36.000 --> 0:40:39.440
<v Speaker 1>thousand pellets from the Patriot missile at high velocity with

0:40:39.520 --> 0:40:42.960
<v Speaker 1>the goal of causing the incoming warhead to explode prematurely.

0:40:44.600 --> 0:40:47.440
<v Speaker 1>In this case, the Patriot missile missed, and the military

0:40:47.440 --> 0:40:49.759
<v Speaker 1>investigated the issue in the wake of the loss of

0:40:49.800 --> 0:40:52.440
<v Speaker 1>life and found a problem with the software guiding the

0:40:52.480 --> 0:40:55.640
<v Speaker 1>Patriot missile. And it was a problem that actually the

0:40:55.640 --> 0:40:57.880
<v Speaker 1>military kind of knew about already. So one of the

0:40:57.920 --> 0:41:00.959
<v Speaker 1>processes in the Patriots programming was to avert time into

0:41:01.000 --> 0:41:06.880
<v Speaker 1>floating point operations for increased accuracy. But not all subroutines

0:41:07.440 --> 0:41:12.080
<v Speaker 1>that depended on tracking time did this. Some of them

0:41:12.080 --> 0:41:16.640
<v Speaker 1>remained UH clock units rather than floating point operations, which

0:41:16.680 --> 0:41:19.840
<v Speaker 1>meant that they would get out of sync after a while.

0:41:19.880 --> 0:41:23.040
<v Speaker 1>There'd be a disagreement in various subroutines as to what

0:41:23.480 --> 0:41:26.160
<v Speaker 1>how much time had actually passed. And like I said,

0:41:26.160 --> 0:41:28.440
<v Speaker 1>the military was aware of this issue and they had

0:41:28.480 --> 0:41:32.319
<v Speaker 1>a work around, which was not ideal. The workaround was

0:41:32.760 --> 0:41:35.719
<v Speaker 1>you would occasionally reboot the system, which would reset the

0:41:35.719 --> 0:41:38.359
<v Speaker 1>clocks and synchronize them, but over time they would fall

0:41:38.400 --> 0:41:41.200
<v Speaker 1>out of sync because they're not tracking time the same way.

0:41:41.840 --> 0:41:44.359
<v Speaker 1>And since there was no hard and fast rule as

0:41:44.400 --> 0:41:47.680
<v Speaker 1>to how frequently you'd reset the system, problems like this

0:41:47.719 --> 0:41:50.040
<v Speaker 1>one where possible, and in fact, in this case it

0:41:50.080 --> 0:41:53.920
<v Speaker 1>did happen. So prior to this particular incident, that specific

0:41:53.960 --> 0:41:57.560
<v Speaker 1>Patriot system had been running for one hours without a reboot,

0:41:58.239 --> 0:42:02.640
<v Speaker 1>and the clock disagreement amounted to about one third of

0:42:02.680 --> 0:42:05.160
<v Speaker 1>a second. Now that seems like it's no time at all.

0:42:05.200 --> 0:42:07.920
<v Speaker 1>One third of a second is so so short, But

0:42:08.000 --> 0:42:11.319
<v Speaker 1>a scutt missile's top speed is about one point one

0:42:11.440 --> 0:42:15.240
<v Speaker 1>miles per second or one point seven kilometers per second,

0:42:15.280 --> 0:42:17.520
<v Speaker 1>which means if you take a third of a second,

0:42:17.600 --> 0:42:21.279
<v Speaker 1>the missile could travel more than five And since the

0:42:21.320 --> 0:42:23.520
<v Speaker 1>patriot needs to be within ten meters of a target

0:42:23.560 --> 0:42:27.359
<v Speaker 1>to destroy it, that resulted in a catastrophic failure. So

0:42:27.360 --> 0:42:30.720
<v Speaker 1>software bugs can be a matter of life or death.

0:42:30.800 --> 0:42:34.040
<v Speaker 1>It's not all just Hey, this irritating thing meant people

0:42:34.080 --> 0:42:38.240
<v Speaker 1>couldn't make long distance phone calls or uh, this issue

0:42:38.440 --> 0:42:41.919
<v Speaker 1>caused my computer to start writing massive amounts of data

0:42:41.920 --> 0:42:45.480
<v Speaker 1>to its hard drive. And this is why it's so

0:42:45.520 --> 0:42:51.160
<v Speaker 1>important to have really qualified QA personnel go through code

0:42:51.200 --> 0:42:53.400
<v Speaker 1>and make sure it's doing what it's supposed to do,

0:42:53.760 --> 0:42:56.600
<v Speaker 1>because the problems that can arise can be non trivial

0:42:56.640 --> 0:42:59.560
<v Speaker 1>and in fact life or death situations depending upon the

0:42:59.560 --> 0:43:04.080
<v Speaker 1>application of technology. So technology is a fascinating thing. It's

0:43:04.120 --> 0:43:07.680
<v Speaker 1>a wonderful thing. It has benefited us in ways that

0:43:08.239 --> 0:43:11.520
<v Speaker 1>I can't even begin to describe. It's just too broad

0:43:11.560 --> 0:43:14.480
<v Speaker 1>a topic, and it's something I've been tackling for, you know,

0:43:14.520 --> 0:43:17.080
<v Speaker 1>eight years, and I haven't haven't even gotten close to

0:43:17.120 --> 0:43:21.080
<v Speaker 1>getting toward the finishing point. So I don't want to

0:43:21.160 --> 0:43:24.799
<v Speaker 1>suggest that technology is bad, but we definitely have the

0:43:24.840 --> 0:43:28.200
<v Speaker 1>need to check, double check, and triple check all this

0:43:28.280 --> 0:43:31.520
<v Speaker 1>work to make certain things are working properly before we

0:43:31.560 --> 0:43:35.000
<v Speaker 1>release them out into the wild. That particularly applies if again,

0:43:35.080 --> 0:43:40.440
<v Speaker 1>you are reusing old code or old components in a

0:43:40.480 --> 0:43:43.960
<v Speaker 1>new way, because you have to make absolutely certain that

0:43:43.960 --> 0:43:47.759
<v Speaker 1>there's not going to be some unintended problem that results

0:43:48.239 --> 0:43:52.120
<v Speaker 1>when a new form factor is using old code. And

0:43:52.200 --> 0:43:54.440
<v Speaker 1>that wraps up that classic episode of tech Stuff. Hope

0:43:54.480 --> 0:43:57.920
<v Speaker 1>you guys enjoyed it. If you have any requests, questions, comments,

0:43:57.920 --> 0:44:00.080
<v Speaker 1>you can email me the addresses tech stuff at how

0:44:00.120 --> 0:44:02.120
<v Speaker 1>stuff Works dot com, or you can reach out on

0:44:02.120 --> 0:44:04.000
<v Speaker 1>Facebook or Twitter. The handle for both of those is

0:44:04.040 --> 0:44:06.560
<v Speaker 1>tech Stuff h s W. Don't forget to go to

0:44:06.600 --> 0:44:09.839
<v Speaker 1>our website that's tech Stuff podcast dot com. You'll find

0:44:09.840 --> 0:44:12.279
<v Speaker 1>a link to every episode we've ever recorded, plus a

0:44:12.320 --> 0:44:14.640
<v Speaker 1>link to our online store, where every purchase you make

0:44:14.800 --> 0:44:16.880
<v Speaker 1>goes to help the show. And we greatly appreciate it,

0:44:17.200 --> 0:44:24.480
<v Speaker 1>and I'll talk to you again really soon. Text Stuff

0:44:24.520 --> 0:44:26.880
<v Speaker 1>is a production of I Heart Radio's How Stuff Works.

0:44:27.040 --> 0:44:29.840
<v Speaker 1>For more podcasts from my heart Radio, visit the i

0:44:29.960 --> 0:44:33.160
<v Speaker 1>heart Radio app, Apple podcasts, or wherever you listen to

0:44:33.239 --> 0:44:34.160
<v Speaker 1>your favorite shows.