WEBVTT - Bad Computer Bugs

0:00:04.160 --> 0:00:07.160
<v Speaker 1>Get in touch with technology with tech Stuff from how

0:00:07.240 --> 0:00:13.800
<v Speaker 1>Stuff works dot com. Hey guys, welcome to tech Stuff.

0:00:13.880 --> 0:00:18.400
<v Speaker 1>I'm your host Jonathan strickland Um with super producer Dylan

0:00:18.880 --> 0:00:22.239
<v Speaker 1>in the teeny Tiny Stuff You Should Know Studio. Pretty soon,

0:00:22.280 --> 0:00:24.239
<v Speaker 1>I'm going to demand it be called the Stuff You

0:00:24.280 --> 0:00:28.319
<v Speaker 1>Should Know in Tech Stuff Studio, because who's gonna stop me.

0:00:29.000 --> 0:00:30.960
<v Speaker 1>Today I wanted to take a look at some of

0:00:31.000 --> 0:00:35.760
<v Speaker 1>the most spectacular computer bugs ever made, or at least

0:00:35.840 --> 0:00:37.839
<v Speaker 1>some of the more notable ones, and I got the

0:00:38.000 --> 0:00:41.400
<v Speaker 1>inspiration for this episode after researching a bug affecting the

0:00:41.440 --> 0:00:44.640
<v Speaker 1>Spotify desktop app. More on that in just a second,

0:00:45.880 --> 0:00:50.480
<v Speaker 1>but first I have to address a bit of apocryphal history,

0:00:50.800 --> 0:00:55.200
<v Speaker 1>and regrettably it's a story that we've repeated on tech Stuff.

0:00:55.240 --> 0:00:59.840
<v Speaker 1>So I'm sad to admit that I was complicit, although unknowingly,

0:01:00.600 --> 0:01:04.960
<v Speaker 1>in the spread of misinformation and that all has to

0:01:05.000 --> 0:01:07.960
<v Speaker 1>do with the origin of the term bug to describe

0:01:07.959 --> 0:01:12.280
<v Speaker 1>a flaw in programming. So here's the popular story, the

0:01:12.319 --> 0:01:19.039
<v Speaker 1>one that we have accidentally, uh promoted on tech Stuff

0:01:19.040 --> 0:01:22.280
<v Speaker 1>without knowing that we were in the wrong. It goes

0:01:22.319 --> 0:01:25.560
<v Speaker 1>that Grace Hopper, who was an early computer scientist who

0:01:25.640 --> 0:01:28.000
<v Speaker 1>rose to the rank of Rear admiral in the U. S.

0:01:28.080 --> 0:01:32.759
<v Speaker 1>Navy coined the phrase bug after discovering a moth coming

0:01:32.840 --> 0:01:38.200
<v Speaker 1>up Harvard's Mark two calculator, a literal bug. Generally speaking,

0:01:38.240 --> 0:01:43.000
<v Speaker 1>the story tends to be set in nineteen and there

0:01:43.080 --> 0:01:45.400
<v Speaker 1>is even a note in the log book that reads

0:01:45.560 --> 0:01:49.480
<v Speaker 1>first actual case of bug being found that's attributed to

0:01:49.520 --> 0:01:53.200
<v Speaker 1>Grace Hopper. But there are several points that are wrong

0:01:53.320 --> 0:01:57.160
<v Speaker 1>in this story. First, the year it didn't happen in ninet.

0:01:58.480 --> 0:02:02.000
<v Speaker 1>It happened on September. N We know because there's a

0:02:02.080 --> 0:02:05.560
<v Speaker 1>log book. At the log book that marks the incident

0:02:05.760 --> 0:02:08.720
<v Speaker 1>not only has the notes, it actually has the moth

0:02:08.880 --> 0:02:13.880
<v Speaker 1>taped into the book itself. It's taped onto the page. Second,

0:02:13.880 --> 0:02:17.280
<v Speaker 1>Grace Hopper wasn't the person to discover the moth or

0:02:17.480 --> 0:02:21.720
<v Speaker 1>make that log entry. She did tell the story about

0:02:21.720 --> 0:02:25.080
<v Speaker 1>the moth several times, but it wasn't in the context

0:02:25.200 --> 0:02:28.919
<v Speaker 1>of finding it or logging it. She just told the

0:02:28.960 --> 0:02:31.080
<v Speaker 1>story that, yeah, we really did have a bug in

0:02:31.120 --> 0:02:34.960
<v Speaker 1>the system. And most importantly, the word bug had already

0:02:35.000 --> 0:02:39.280
<v Speaker 1>been used to describe design flaws for decades before the

0:02:39.280 --> 0:02:42.720
<v Speaker 1>Mark two was even designed. In fact, if you look

0:02:42.760 --> 0:02:45.359
<v Speaker 1>at the log book. This makes sense. It says first

0:02:45.400 --> 0:02:49.519
<v Speaker 1>actual case of bug being found. That sentence doesn't make

0:02:49.680 --> 0:02:53.440
<v Speaker 1>sense unless you've already used the word bug to describe

0:02:53.520 --> 0:02:57.920
<v Speaker 1>a flaw, because you wouldn't say first actual case of

0:02:57.919 --> 0:03:00.880
<v Speaker 1>bug being found. That the wording doesn't make any sense.

0:03:00.880 --> 0:03:05.400
<v Speaker 1>The context makes no sense. Sadly, there are documented quotes

0:03:05.760 --> 0:03:09.040
<v Speaker 1>dating back to the nineteenth century using the word bug

0:03:09.080 --> 0:03:12.239
<v Speaker 1>to mean a design fault, and it could go back

0:03:12.240 --> 0:03:16.239
<v Speaker 1>even further than that. So is with much regret that

0:03:16.280 --> 0:03:18.840
<v Speaker 1>I admit I have unwittingly contributed to a bit of

0:03:18.880 --> 0:03:21.799
<v Speaker 1>misleading folklore making the rounds. But I'm glad I can

0:03:21.800 --> 0:03:24.880
<v Speaker 1>take this opportunity to address it. All Right, So let's

0:03:24.919 --> 0:03:29.799
<v Speaker 1>talk about design bugs, and I'll be covering several goofs, mistakes, flubs, flaws,

0:03:29.840 --> 0:03:34.040
<v Speaker 1>and outright catastrophes in this episode. But one thing I'm

0:03:34.080 --> 0:03:38.240
<v Speaker 1>not necessarily going to cover our software vulnerabilities that were

0:03:38.320 --> 0:03:42.680
<v Speaker 1>later exploited, either by opportunistic hackers or white hats who

0:03:42.680 --> 0:03:46.880
<v Speaker 1>are just trying to improve system security. Those vulnerabilities are

0:03:46.960 --> 0:03:50.000
<v Speaker 1>common in many types of software and arise not just

0:03:50.080 --> 0:03:55.240
<v Speaker 1>through mistakes, but sometimes simple oversights, and I think it

0:03:55.320 --> 0:03:57.440
<v Speaker 1>might be more fun to look at some real bugs,

0:03:57.440 --> 0:04:00.760
<v Speaker 1>like stuff that made things go wrong, stuff that may

0:04:00.800 --> 0:04:04.800
<v Speaker 1>have rendered a program defunct or otherwise caused headaches. Now

0:04:04.800 --> 0:04:06.840
<v Speaker 1>I'm gonna make an exception to this. I'm going to

0:04:06.960 --> 0:04:10.560
<v Speaker 1>start off with the ping of death, and I only

0:04:10.600 --> 0:04:14.240
<v Speaker 1>mention it because it has an awesome name. Now, this

0:04:14.280 --> 0:04:18.000
<v Speaker 1>flaw caused headaches back in ninety six. It was a

0:04:18.000 --> 0:04:23.160
<v Speaker 1>flawed i P fragmentation reassembly code, and it became possible

0:04:23.160 --> 0:04:25.919
<v Speaker 1>to crash lots of different types of computers using different

0:04:25.960 --> 0:04:30.000
<v Speaker 1>operating systems, although Windows machines were particularly vulnerable, and this

0:04:30.080 --> 0:04:32.880
<v Speaker 1>particular flaw would make a Windows machine revert to the

0:04:33.000 --> 0:04:36.400
<v Speaker 1>dreaded blue screen of death. And it all happened by

0:04:36.400 --> 0:04:40.039
<v Speaker 1>sending a special ping packet over the internet. So, for

0:04:40.160 --> 0:04:42.120
<v Speaker 1>those of you who aren't familiar with what that is,

0:04:42.279 --> 0:04:45.800
<v Speaker 1>a ping is essentially a simple message that checks for

0:04:45.880 --> 0:04:49.400
<v Speaker 1>a connection between two computers. You send one ping from

0:04:49.400 --> 0:04:52.200
<v Speaker 1>a computer to another one and look for a response,

0:04:52.480 --> 0:04:55.080
<v Speaker 1>so that way you verify there is in fact a connection.

0:04:55.120 --> 0:04:57.840
<v Speaker 1>You can also tell other things like how fast is

0:04:57.880 --> 0:05:01.400
<v Speaker 1>that connection between those two computers. Now, in this case,

0:05:01.720 --> 0:05:04.960
<v Speaker 1>you would have to actually design a malformed ping request

0:05:05.040 --> 0:05:07.840
<v Speaker 1>and send that to a target, and it would bring

0:05:07.880 --> 0:05:12.000
<v Speaker 1>that target down. That's the only security vulnerability story I

0:05:12.040 --> 0:05:15.040
<v Speaker 1>really wanted to focus on. The others are all just

0:05:15.760 --> 0:05:18.640
<v Speaker 1>design flaws. And let's begin with the bug that inspired

0:05:18.680 --> 0:05:20.320
<v Speaker 1>me to do this episode in the first place, That

0:05:20.400 --> 0:05:24.080
<v Speaker 1>Spotify bug I mentioned earlier. Ours Technica wrote a piece

0:05:24.120 --> 0:05:26.240
<v Speaker 1>on it in November two thousand and sixteen, but the

0:05:26.240 --> 0:05:29.120
<v Speaker 1>problem seems to date back at least as far as

0:05:29.240 --> 0:05:32.760
<v Speaker 1>June two thousand sixteen, and that's when a few savvy

0:05:32.839 --> 0:05:37.440
<v Speaker 1>Spotify users noticed some unusual activities on their computers. And

0:05:37.480 --> 0:05:39.240
<v Speaker 1>it took a little bit of detective work, but they

0:05:39.240 --> 0:05:43.120
<v Speaker 1>discovered that Spotify was apparently generating a huge amount of

0:05:43.200 --> 0:05:48.560
<v Speaker 1>data on a daily basis, like gigabytes of data per day.

0:05:48.720 --> 0:05:51.960
<v Speaker 1>And the culprit turned out to be a vacuum process

0:05:52.040 --> 0:05:56.440
<v Speaker 1>for a database file containing the string mercury dot dB. Now,

0:05:56.480 --> 0:06:00.279
<v Speaker 1>the vacuum process is the digital equivalent of vacuum c link.

0:06:00.320 --> 0:06:03.000
<v Speaker 1>It's meant to repack data so that it takes up

0:06:03.120 --> 0:06:06.280
<v Speaker 1>less space on a drive. Now, this involves building a

0:06:06.279 --> 0:06:09.719
<v Speaker 1>new file to maximize efficiency, which is a good thing

0:06:09.839 --> 0:06:16.080
<v Speaker 1>generally speaking. The problem was that Spotify's version was making

0:06:16.120 --> 0:06:18.440
<v Speaker 1>it happen way too frequently, like on the order of

0:06:18.520 --> 0:06:22.640
<v Speaker 1>once every few minutes, so that's not generally necessary. You

0:06:22.640 --> 0:06:25.440
<v Speaker 1>don't need to rebuild a database file every few minutes

0:06:25.480 --> 0:06:28.440
<v Speaker 1>to make sure it's the most efficient size it can be.

0:06:29.720 --> 0:06:33.000
<v Speaker 1>So each rebuild represented a relatively small amount of data,

0:06:33.080 --> 0:06:36.039
<v Speaker 1>but over time it added up, which meant that if

0:06:36.080 --> 0:06:38.880
<v Speaker 1>you had Spotify on on your computer, even if it

0:06:38.960 --> 0:06:41.680
<v Speaker 1>was just running in the background, it would be generating

0:06:41.720 --> 0:06:45.400
<v Speaker 1>gigabytes worth of information rewriting this file over and over.

0:06:45.720 --> 0:06:48.479
<v Speaker 1>Now it wasn't filling up a hard drive. It was

0:06:48.520 --> 0:06:53.920
<v Speaker 1>just overwriting the same file. Now, if it had been

0:06:53.920 --> 0:06:56.320
<v Speaker 1>filling up a hard drive, people would have noticed much earlier,

0:06:56.320 --> 0:06:59.360
<v Speaker 1>and it wouldn't have just been savvy Spotify users, because

0:06:59.360 --> 0:07:01.800
<v Speaker 1>you would suddenly notice, hey, I don't I can't save

0:07:01.800 --> 0:07:05.800
<v Speaker 1>anything to my hard drive because everything is filling up. Instead. Again,

0:07:05.839 --> 0:07:08.480
<v Speaker 1>it was just sort of writing and deleting and writing

0:07:08.480 --> 0:07:11.280
<v Speaker 1>and deleting the same file over and over again. And

0:07:11.320 --> 0:07:13.240
<v Speaker 1>that probably doesn't sound like a big deal, but it

0:07:13.440 --> 0:07:15.800
<v Speaker 1>is a problem if you're using a solid state drive

0:07:16.040 --> 0:07:19.240
<v Speaker 1>or s s D. So one of the drawbacks of

0:07:19.240 --> 0:07:23.600
<v Speaker 1>an ss D is that over time it loses storage capacity,

0:07:23.720 --> 0:07:27.960
<v Speaker 1>like you can store less data on an SSD over time. Now,

0:07:28.400 --> 0:07:30.960
<v Speaker 1>by overtime I generally mean over a great deal of

0:07:31.040 --> 0:07:33.160
<v Speaker 1>time and a lot of different data being written to

0:07:33.200 --> 0:07:37.360
<v Speaker 1>it and overwritten. Uh. Generally speaking, most of us end

0:07:37.440 --> 0:07:40.320
<v Speaker 1>up replacing our drives before we get to a point

0:07:40.320 --> 0:07:44.320
<v Speaker 1>where the loss of capacity is a real issue. But

0:07:44.520 --> 0:07:46.560
<v Speaker 1>similar in a way to how a battery can lose

0:07:46.600 --> 0:07:49.400
<v Speaker 1>its ability to hold a full charge after you've gone

0:07:49.440 --> 0:07:53.560
<v Speaker 1>through lots of charging and discharging cycles, you know how

0:07:53.600 --> 0:07:55.960
<v Speaker 1>a battery won't be able to to hold as much

0:07:56.000 --> 0:07:58.720
<v Speaker 1>even if it says it's up to a but a

0:07:58.760 --> 0:08:01.120
<v Speaker 1>hundred percent doesn't last you as long as it used to.

0:08:01.680 --> 0:08:04.400
<v Speaker 1>That's because its capacity to hold a full charge has

0:08:04.440 --> 0:08:08.560
<v Speaker 1>decreased over time. But let's say you've got a program

0:08:08.640 --> 0:08:12.680
<v Speaker 1>that's just constantly overwriting data to your drive, you might

0:08:12.720 --> 0:08:15.560
<v Speaker 1>discover that your ss D s useful lifespan has been

0:08:15.640 --> 0:08:20.560
<v Speaker 1>drastically reduced. So as I record this episode, Spotify has

0:08:20.600 --> 0:08:24.360
<v Speaker 1>already rolled out an updated version of its desktop application,

0:08:24.400 --> 0:08:26.280
<v Speaker 1>and that, by the way, is the only version of

0:08:26.320 --> 0:08:29.520
<v Speaker 1>Spotify that was affected. If you use web based Spotify

0:08:29.800 --> 0:08:32.719
<v Speaker 1>or mobile Spotify, you're in the clear already if you

0:08:32.800 --> 0:08:35.480
<v Speaker 1>use a desktop version, as long as you have version

0:08:35.600 --> 0:08:40.160
<v Speaker 1>one point zero point four two or later, you are fine.

0:08:41.280 --> 0:08:43.520
<v Speaker 1>But if you did have that earlier version and you

0:08:43.640 --> 0:08:46.000
<v Speaker 1>just had Spotify running on in the background, chances are

0:08:46.160 --> 0:08:50.160
<v Speaker 1>it was writing to your hard drive like crazy. So

0:08:50.200 --> 0:08:53.400
<v Speaker 1>what about some of the other big bugs in computer history. Well,

0:08:53.440 --> 0:08:56.120
<v Speaker 1>some of the real doozies involve our attempts to explore

0:08:56.200 --> 0:08:59.839
<v Speaker 1>the final frontier. So we'll be talking about space a

0:09:00.000 --> 0:09:02.200
<v Speaker 1>few times in this episode, and we'll start with an

0:09:02.200 --> 0:09:06.640
<v Speaker 1>early US satellite. So first up is a nineteen sixty

0:09:06.679 --> 0:09:10.400
<v Speaker 1>two blunder involving the Mariner one. So some backstory on

0:09:10.440 --> 0:09:12.880
<v Speaker 1>this one. Uh, We're gonna talk a lot about the

0:09:12.880 --> 0:09:16.040
<v Speaker 1>Soviet Union in this episode two. It takes a couple

0:09:16.080 --> 0:09:18.880
<v Speaker 1>of roles as we go on. But in this case,

0:09:18.960 --> 0:09:22.880
<v Speaker 1>the then USSR had launched Sputnik into orbit in nineteen

0:09:22.920 --> 0:09:25.280
<v Speaker 1>fifty seven, which really kicked off the space race and

0:09:25.360 --> 0:09:28.640
<v Speaker 1>also was a big shot in the Cold War because

0:09:28.679 --> 0:09:31.640
<v Speaker 1>of so Union was essentially saying, hey, we can launch

0:09:31.720 --> 0:09:34.320
<v Speaker 1>this into space, we could also launch something at you.

0:09:35.520 --> 0:09:37.760
<v Speaker 1>In response, the US and done sort of the same thing.

0:09:37.760 --> 0:09:40.840
<v Speaker 1>They had launched some satellites into space and the Mariner

0:09:40.920 --> 0:09:43.880
<v Speaker 1>one was going to be a big, big feather in

0:09:43.920 --> 0:09:45.599
<v Speaker 1>the cap of the US. The whole idea was to

0:09:45.679 --> 0:09:48.440
<v Speaker 1>launch a probe that would be a fly by probe

0:09:48.559 --> 0:09:53.640
<v Speaker 1>and it would go by Venus. So uh NASA, which

0:09:53.679 --> 0:09:57.400
<v Speaker 1>was newly formed in nineteen sixty two, was taking control

0:09:57.440 --> 0:09:59.720
<v Speaker 1>of this and the budget for this particular project was

0:09:59.800 --> 0:10:02.600
<v Speaker 1>eight team point five million dollars, which if you were

0:10:02.640 --> 0:10:06.440
<v Speaker 1>to adjust for inflation, would be almost a hundred fifty

0:10:06.520 --> 0:10:10.520
<v Speaker 1>million dollars today, So a hundred fifty million dollar project

0:10:10.559 --> 0:10:14.200
<v Speaker 1>to launch the Mariner one and have it fly by Venus.

0:10:14.240 --> 0:10:16.760
<v Speaker 1>But as I'm sure you guys have figured out by

0:10:16.760 --> 0:10:20.520
<v Speaker 1>now based upon the topic of this podcast, not all

0:10:20.600 --> 0:10:24.760
<v Speaker 1>went according to plan. Not long at all. After the

0:10:24.880 --> 0:10:28.800
<v Speaker 1>rocket launched from the launch pad, it began to veer

0:10:28.880 --> 0:10:32.440
<v Speaker 1>off course, and neither the computer controls on the rocket

0:10:32.559 --> 0:10:37.000
<v Speaker 1>or manual controls back at HQ could correct for the problem.

0:10:37.080 --> 0:10:39.760
<v Speaker 1>The rockets course was such that it was going to

0:10:39.840 --> 0:10:42.640
<v Speaker 1>take it over shipping lanes, which meant there could be

0:10:42.640 --> 0:10:47.280
<v Speaker 1>a potential catastrophe, and so Arrange safety officer made the

0:10:47.320 --> 0:10:50.280
<v Speaker 1>difficult call and issued the command to blow the whole

0:10:50.360 --> 0:10:54.480
<v Speaker 1>thing up, just shy of three hundred seconds after it launched.

0:10:55.000 --> 0:10:57.400
<v Speaker 1>So what happened? What why did it go off course

0:10:57.400 --> 0:10:59.520
<v Speaker 1>in the first place? Well, there was a flaw in

0:10:59.559 --> 0:11:02.880
<v Speaker 1>the space crafts guidance software which diverted the rocket, and

0:11:02.960 --> 0:11:05.840
<v Speaker 1>no amount of commands from ground control could correct for it.

0:11:06.280 --> 0:11:10.800
<v Speaker 1>After a lengthy investigation, NASA discovered the era error was

0:11:11.080 --> 0:11:16.560
<v Speaker 1>the result of a mistake transcribing handwritten notes into computer code.

0:11:17.360 --> 0:11:21.880
<v Speaker 1>So someone just took some handwritten notes and misinterpreted one

0:11:21.880 --> 0:11:28.000
<v Speaker 1>of them, and that one mistake was enough to crash

0:11:28.280 --> 0:11:33.680
<v Speaker 1>the rocket, or to to necessitate it being destroyed. The

0:11:33.760 --> 0:11:38.400
<v Speaker 1>great science fiction author Arthur C. Clark wrote that the

0:11:38.480 --> 0:11:43.800
<v Speaker 1>Mariner one was wrecked by the most expensive hyphen in history,

0:11:43.960 --> 0:11:47.120
<v Speaker 1>which isn't quite right, but it's pretty funny. I mean,

0:11:47.280 --> 0:11:51.480
<v Speaker 1>come on, it's humorous phrase. So the actual punctuation mark

0:11:51.520 --> 0:11:54.840
<v Speaker 1>that caused the problem was not technically a hyphen. It

0:11:54.920 --> 0:11:59.120
<v Speaker 1>was a superscript bar. Superscript bars, by the way, not

0:11:59.200 --> 0:12:01.319
<v Speaker 1>a place where player rights hang out to get tore up.

0:12:02.120 --> 0:12:05.440
<v Speaker 1>A superscript bar just means it's a horizontal bar that

0:12:05.600 --> 0:12:08.360
<v Speaker 1>is above some other symbol. In this case, it was

0:12:08.400 --> 0:12:12.920
<v Speaker 1>a radius symbol, and that was a symbol along with

0:12:12.960 --> 0:12:17.280
<v Speaker 1>the superscript bar to describe a smoothing function, which means

0:12:17.320 --> 0:12:20.920
<v Speaker 1>the formula was meant to calculate smoothed values over the

0:12:20.960 --> 0:12:25.760
<v Speaker 1>time derivative of a radius. Now, without the smoothing function,

0:12:26.320 --> 0:12:30.439
<v Speaker 1>tiny deviations in course sent commands to the rockets thrusters

0:12:30.440 --> 0:12:34.000
<v Speaker 1>to kick in big time to overcorrect for that problem.

0:12:34.040 --> 0:12:36.760
<v Speaker 1>As an analogy, imagine you're driving a vehicle and you

0:12:36.800 --> 0:12:39.600
<v Speaker 1>see a pothole in the road and you're approaching it,

0:12:39.720 --> 0:12:44.160
<v Speaker 1>and instead of gently steering out of the way, you

0:12:44.400 --> 0:12:47.160
<v Speaker 1>wrenched the wheel really hard to the left or to

0:12:47.200 --> 0:12:49.440
<v Speaker 1>the right in order to try and get around this pothole.

0:12:49.880 --> 0:12:51.920
<v Speaker 1>That's kind of what was happening with the rocket. It

0:12:51.960 --> 0:12:55.120
<v Speaker 1>didn't have the smoothing function and so as a result,

0:12:55.200 --> 0:12:59.240
<v Speaker 1>it was having these wild deviations and course. So it

0:12:59.360 --> 0:13:02.000
<v Speaker 1>wasn't a high fin that caused the problem, but is

0:13:02.040 --> 0:13:05.800
<v Speaker 1>close enough. Our next space story takes place in nineteen

0:13:06.400 --> 0:13:10.640
<v Speaker 1>with the European Space Agencies RAN five Flight five O

0:13:10.880 --> 0:13:14.200
<v Speaker 1>one rocket. Now, this rocket was to launch into space

0:13:14.240 --> 0:13:19.400
<v Speaker 1>on June four nine, and instead the rocket disintegrated forty

0:13:19.559 --> 0:13:23.640
<v Speaker 1>seconds after taking off. So what the heck happened? Well,

0:13:23.679 --> 0:13:25.640
<v Speaker 1>it largely had to do with the e s A

0:13:26.080 --> 0:13:30.239
<v Speaker 1>reusing old work. This actually becomes a theme in this episode.

0:13:30.640 --> 0:13:34.480
<v Speaker 1>One of the morals of of this entire podcast is

0:13:34.600 --> 0:13:38.440
<v Speaker 1>if you're designing something a successor to an earlier product,

0:13:39.720 --> 0:13:42.800
<v Speaker 1>and you'd want to reuse some of the features that

0:13:42.880 --> 0:13:47.320
<v Speaker 1>you created in your previous product, test the heck out

0:13:47.360 --> 0:13:50.760
<v Speaker 1>of it in its new form factor, because it could

0:13:50.840 --> 0:13:53.760
<v Speaker 1>be that things that worked perfectly fine in the earlier

0:13:53.800 --> 0:13:58.240
<v Speaker 1>model will go awry in the new one. That's what

0:13:58.360 --> 0:14:01.760
<v Speaker 1>happened here. So as you might guess from the name,

0:14:02.000 --> 0:14:06.360
<v Speaker 1>the Aeryan five marked the fifth generation of launch vehicles

0:14:06.520 --> 0:14:11.160
<v Speaker 1>under that name. The Arian four's inertial reference system would

0:14:11.160 --> 0:14:14.920
<v Speaker 1>convert sixty four bit floating point numbers into a sixteen

0:14:14.960 --> 0:14:20.680
<v Speaker 1>bits signed integer, and it worked just fine. But the

0:14:20.760 --> 0:14:26.400
<v Speaker 1>Arian five stats were beefier than its predecessor with faster engines,

0:14:26.440 --> 0:14:29.640
<v Speaker 1>and that was where the problem really started. The engine

0:14:29.640 --> 0:14:33.480
<v Speaker 1>output meant those sixty four bit floating point numbers were

0:14:33.560 --> 0:14:37.520
<v Speaker 1>significantly larger than the ones generated by the engines on

0:14:37.560 --> 0:14:41.680
<v Speaker 1>the Arian four. They didn't anticipate this, so during the

0:14:41.680 --> 0:14:46.400
<v Speaker 1>conversion process there was actually data overflow, and that overflow

0:14:46.520 --> 0:14:50.360
<v Speaker 1>caused both the backup computer and the primary computer aboard

0:14:50.360 --> 0:14:53.440
<v Speaker 1>the Arian five to crash, and they crashed in that order.

0:14:53.480 --> 0:14:57.040
<v Speaker 1>The backup computer crashed first, followed by the primary computer

0:14:57.080 --> 0:14:59.960
<v Speaker 1>a couple of seconds later. The whole thing took less

0:15:00.000 --> 0:15:04.120
<v Speaker 1>than a minute to go from launch to disintegration. Oops,

0:15:05.600 --> 0:15:07.920
<v Speaker 1>now we're gonna stick with space. But jumped forward to

0:15:10.240 --> 0:15:16.200
<v Speaker 1>and the Mars Climate Orbiter. This was an unfortunate problem.

0:15:16.560 --> 0:15:19.960
<v Speaker 1>So this particular spacecraft was meant to study Mars's climate,

0:15:20.080 --> 0:15:22.920
<v Speaker 1>atmosphere and surface changes, and it was also supposed to

0:15:22.960 --> 0:15:26.200
<v Speaker 1>be a kind of relay station for landers that would

0:15:26.240 --> 0:15:30.320
<v Speaker 1>explore Mars's surface, but none of that would last because

0:15:30.440 --> 0:15:36.040
<v Speaker 1>of some pretty significant goofs. So on September, the orbiter

0:15:36.160 --> 0:15:40.680
<v Speaker 1>passed into the upper atmosphere of Mars and did so

0:15:40.880 --> 0:15:44.320
<v Speaker 1>at a pretty low altitude. And this is what folks

0:15:44.320 --> 0:15:47.920
<v Speaker 1>in the space industry called a bad thing. The Dragon,

0:15:48.000 --> 0:15:51.800
<v Speaker 1>the spacecraft was significant. It began to fall apart and

0:15:51.960 --> 0:15:57.680
<v Speaker 1>it was destroyed upon entering Mars's atmosphere. That's what happened.

0:15:58.840 --> 0:16:02.280
<v Speaker 1>So the software guide the orbiter was to blame, and

0:16:03.160 --> 0:16:06.360
<v Speaker 1>it's a dumb, dumb mistake. It was supposed to make

0:16:06.360 --> 0:16:10.600
<v Speaker 1>adjustments to the orbiter's flight in SI units, specifically in

0:16:10.640 --> 0:16:15.560
<v Speaker 1>Newton seconds. That's what the contract with Lockheed and NASA said,

0:16:16.280 --> 0:16:20.040
<v Speaker 1>Newton seconds, use SI units for all of your all

0:16:20.080 --> 0:16:24.400
<v Speaker 1>of your calculations, but the software instead made calculations in

0:16:24.520 --> 0:16:30.840
<v Speaker 1>non SI units, namely pounds seconds. So Lockheeds software gave

0:16:30.920 --> 0:16:34.960
<v Speaker 1>information to NASA's systems using the wrong units of measure.

0:16:36.040 --> 0:16:39.240
<v Speaker 1>NASA systems then took that information, assuming it was with

0:16:39.360 --> 0:16:43.800
<v Speaker 1>the right units of measure, and executed commands based upon that.

0:16:45.000 --> 0:16:47.760
<v Speaker 1>Uh So, this is why if you're ever in a

0:16:47.840 --> 0:16:52.600
<v Speaker 1>math course and the teacher makes you stop in the

0:16:52.640 --> 0:16:54.760
<v Speaker 1>middle of writing a problem on the board and says,

0:16:54.800 --> 0:16:57.920
<v Speaker 1>where are your units? This is why you have to

0:16:58.000 --> 0:17:01.520
<v Speaker 1>make sure you're using the right units, because if you're

0:17:01.560 --> 0:17:04.800
<v Speaker 1>saying a number and you don't associate a unit with it,

0:17:05.080 --> 0:17:08.040
<v Speaker 1>someone could make an incorrect decision based on that, and

0:17:08.080 --> 0:17:10.639
<v Speaker 1>it could be disastrous, as it was with the case

0:17:10.760 --> 0:17:14.360
<v Speaker 1>of this orbiter. The thrusters fired at four point four

0:17:14.440 --> 0:17:17.960
<v Speaker 1>or five times the power they were supposed to, and

0:17:18.000 --> 0:17:20.760
<v Speaker 1>the orbiter didn't stand a chance. And this was a

0:17:20.760 --> 0:17:24.080
<v Speaker 1>pretty expensive mistake. That mission's cost came in at three

0:17:24.800 --> 0:17:28.639
<v Speaker 1>seven point six million dollars, but on the bright side

0:17:28.680 --> 0:17:31.359
<v Speaker 1>with all of these stories, at least no human lives

0:17:31.440 --> 0:17:36.000
<v Speaker 1>were ever in real danger as a result of the mistake. Now,

0:17:36.080 --> 0:17:39.840
<v Speaker 1>I've got a lot more to say about bugs, but

0:17:40.040 --> 0:17:42.240
<v Speaker 1>before I get into that, let's take a quick break

0:17:42.400 --> 0:17:53.000
<v Speaker 1>to thank our sponsor. All right, Now, let's make a

0:17:53.040 --> 0:17:55.479
<v Speaker 1>switch to A T and T, which is a company

0:17:55.480 --> 0:17:58.160
<v Speaker 1>that had a pretty big problem with switches once upon

0:17:58.200 --> 0:18:00.920
<v Speaker 1>a time. I'm talking about issue that popped up on

0:18:01.000 --> 0:18:04.560
<v Speaker 1>January nine nine. That's when A T and T long

0:18:04.600 --> 0:18:07.200
<v Speaker 1>distance customers discovered they were unable to make any long

0:18:07.240 --> 0:18:11.879
<v Speaker 1>distance calls. Why why could they no longer reach anybody? Well,

0:18:12.440 --> 0:18:17.119
<v Speaker 1>A T and T s long distance switches, which control

0:18:17.240 --> 0:18:20.639
<v Speaker 1>that and allow for the actual connections to be made,

0:18:20.960 --> 0:18:23.840
<v Speaker 1>were on the fritz. They were trying to reboot over

0:18:23.880 --> 0:18:27.560
<v Speaker 1>and over again. They were just stuck in a reboot cycle. Now,

0:18:27.640 --> 0:18:31.520
<v Speaker 1>initially the company thought it was being hacked, But like

0:18:31.560 --> 0:18:33.000
<v Speaker 1>I said at the top of the show, I'm not

0:18:33.119 --> 0:18:36.680
<v Speaker 1>covering stories about hackers here. I'm talking about big design

0:18:36.720 --> 0:18:41.680
<v Speaker 1>flaws that caused problems. So they weren't getting hacked. That's

0:18:41.920 --> 0:18:44.320
<v Speaker 1>not what was going on with those D fourteen long

0:18:44.320 --> 0:18:47.600
<v Speaker 1>distance switches. No, there was a design problem at fault.

0:18:48.440 --> 0:18:49.959
<v Speaker 1>So what had happened was a T and D had

0:18:50.040 --> 0:18:53.480
<v Speaker 1>rolled out an update to the code that managed the switches,

0:18:53.880 --> 0:18:56.080
<v Speaker 1>and it was meant to increase the efficiency. It was

0:18:56.119 --> 0:18:58.879
<v Speaker 1>meant to speed things up, but the problem was it

0:18:59.040 --> 0:19:01.680
<v Speaker 1>sped things up so much that the system got caught

0:19:01.800 --> 0:19:04.679
<v Speaker 1>up in itself. It gets pretty technical, but I can

0:19:04.680 --> 0:19:08.439
<v Speaker 1>give you kind of a overview of what the problem was. Alright,

0:19:08.480 --> 0:19:12.560
<v Speaker 1>so each switch had a function that allowed it to

0:19:12.760 --> 0:19:16.800
<v Speaker 1>alert the next switch down the line if things were

0:19:16.800 --> 0:19:20.560
<v Speaker 1>starting to get hairy. So imagine that switch number one

0:19:20.960 --> 0:19:24.200
<v Speaker 1>is handling traffic, but it's getting really close to capacity.

0:19:24.240 --> 0:19:26.320
<v Speaker 1>So it sends a message over to switch number two

0:19:26.359 --> 0:19:29.680
<v Speaker 1>and says, I can't take on any more work because

0:19:29.720 --> 0:19:33.200
<v Speaker 1>if I do, I'll be overloaded. Switch to then says,

0:19:33.400 --> 0:19:36.679
<v Speaker 1>no problem, I'll take on the any oncoming work for

0:19:36.720 --> 0:19:40.159
<v Speaker 1>you and we'll handle it from there. And if switched

0:19:40.200 --> 0:19:43.000
<v Speaker 1>number two order to get into the same source situation,

0:19:43.359 --> 0:19:45.240
<v Speaker 1>it would say the same thing to switch number three,

0:19:45.320 --> 0:19:48.840
<v Speaker 1>and so on and so forth. Now, eventually each switch

0:19:48.920 --> 0:19:51.679
<v Speaker 1>will contact the one below it and say, hey, how

0:19:51.680 --> 0:19:54.440
<v Speaker 1>are you doing there? And if the answer is okay,

0:19:54.520 --> 0:19:58.240
<v Speaker 1>then everything switches back and you go back to normal operation.

0:19:59.200 --> 0:20:02.679
<v Speaker 1>That's how it's suppo was to work up. But A

0:20:02.800 --> 0:20:05.560
<v Speaker 1>T and t s updated code sped things up so

0:20:05.640 --> 0:20:09.360
<v Speaker 1>much it caused some real issues, and there was some

0:20:09.560 --> 0:20:14.080
<v Speaker 1>poor timing, just coincidental timing that made things worse. So

0:20:14.440 --> 0:20:17.159
<v Speaker 1>switch number one starts to get overwhelmed and sends a

0:20:17.200 --> 0:20:19.679
<v Speaker 1>message over to switch number two, but switched number two

0:20:19.920 --> 0:20:23.840
<v Speaker 1>was just in the middle of resetting itself. So switch

0:20:23.920 --> 0:20:26.680
<v Speaker 1>number two goes into reset mode, which says do not disturb.

0:20:26.760 --> 0:20:29.680
<v Speaker 1>Sends a message over to switch number three. That prompted

0:20:29.720 --> 0:20:32.239
<v Speaker 1>switch number three to overload and put up I do

0:20:32.280 --> 0:20:34.760
<v Speaker 1>not disturb sign. Move that down to switch number four.

0:20:35.119 --> 0:20:39.120
<v Speaker 1>This whole thing goes down the entire line of on switches.

0:20:39.200 --> 0:20:42.040
<v Speaker 1>They all end up getting overloaded as a result of this,

0:20:42.440 --> 0:20:45.600
<v Speaker 1>and I'll go into reset mode and they get stuck there.

0:20:47.160 --> 0:20:51.359
<v Speaker 1>That problem lasted for nine hours before A T and

0:20:51.359 --> 0:20:54.080
<v Speaker 1>T was finally able to address the message load on

0:20:54.119 --> 0:20:56.520
<v Speaker 1>the entire system and get the switches back to normal.

0:20:57.040 --> 0:21:00.560
<v Speaker 1>The estimated cost of lost revenue for that was about

0:21:00.560 --> 0:21:04.600
<v Speaker 1>sixty million dollars in long distance calls, and there were

0:21:04.640 --> 0:21:07.560
<v Speaker 1>a lot of angry customers to boot, so to placate them,

0:21:07.600 --> 0:21:10.719
<v Speaker 1>A T and T offered reduced long distance rates on

0:21:10.840 --> 0:21:15.440
<v Speaker 1>Valentine's Day pretty ugly. By the A T and T

0:21:15.440 --> 0:21:17.280
<v Speaker 1>tried to handle it, at least in a way that

0:21:17.440 --> 0:21:21.040
<v Speaker 1>didn't turn it into a pr nightmare. Not so with Intel.

0:21:21.760 --> 0:21:24.320
<v Speaker 1>That's what it brings us to the Pendium problem. I

0:21:24.359 --> 0:21:27.040
<v Speaker 1>don't know if you guys remember when Pentium processors first

0:21:27.080 --> 0:21:29.720
<v Speaker 1>came out, but they were a big deal. It was

0:21:30.680 --> 0:21:33.800
<v Speaker 1>a redesign of the architecture of the microprocessor and it

0:21:33.840 --> 0:21:37.239
<v Speaker 1>was meant to really speed things up. Well, Intel had

0:21:37.280 --> 0:21:41.840
<v Speaker 1>a massive nightmare in nine thanks to a flaw in

0:21:41.880 --> 0:21:47.080
<v Speaker 1>the entire first generation of Pentium processors. Now, when you

0:21:47.119 --> 0:21:50.400
<v Speaker 1>break it all down, a CPU is all about performing

0:21:50.440 --> 0:21:53.399
<v Speaker 1>mathematical operations on data, so it's kind of important that

0:21:53.440 --> 0:21:57.920
<v Speaker 1>it does this correctly. Unfortunately, the flaw and the Pentium

0:21:57.920 --> 0:22:00.840
<v Speaker 1>processors kind of messed that up. And the issue has

0:22:00.880 --> 0:22:04.280
<v Speaker 1>to do with floating point operations. So the predecessor to

0:22:04.280 --> 0:22:07.879
<v Speaker 1>the Pentium, the four six, used a shift and subtract

0:22:07.960 --> 0:22:12.800
<v Speaker 1>algorithm for floating point operations, which was effective but relatively

0:22:12.880 --> 0:22:17.000
<v Speaker 1>slow compared to what Intel thought they could do by

0:22:17.280 --> 0:22:22.960
<v Speaker 1>totally redesigning that structure and using a look up table approach. Now,

0:22:22.960 --> 0:22:26.159
<v Speaker 1>the table was supposed to have one thousand sixty six

0:22:26.440 --> 0:22:30.800
<v Speaker 1>entries programmed directly onto the logic array of the Pentium processor,

0:22:31.920 --> 0:22:36.320
<v Speaker 1>but for some reason only one thousand sixty one entries

0:22:36.400 --> 0:22:40.800
<v Speaker 1>made it. Five entries went missing and essentially returned an

0:22:40.800 --> 0:22:45.400
<v Speaker 1>answer of zero instead of what they were supposed to say,

0:22:45.480 --> 0:22:47.919
<v Speaker 1>So if a calculation accessed one of those missing cells,

0:22:47.960 --> 0:22:50.280
<v Speaker 1>it got zero, even though that's not the correct answer.

0:22:51.200 --> 0:22:53.720
<v Speaker 1>All the first generation pentiums went out with this error

0:22:53.800 --> 0:22:56.200
<v Speaker 1>because it was so minor that it wasn't even picked

0:22:56.320 --> 0:23:01.680
<v Speaker 1>up by Intel's quality control at the time. Now, processes

0:23:01.680 --> 0:23:05.159
<v Speaker 1>work just fine up to the eighth decimal point. Beyond

0:23:05.240 --> 0:23:08.360
<v Speaker 1>that things got messy. But for most folks that wasn't

0:23:08.359 --> 0:23:12.959
<v Speaker 1>a problem because they weren't doing mathematical calculations that needed

0:23:12.960 --> 0:23:16.400
<v Speaker 1>that level of precision. It just wasn't a thing. In fact,

0:23:16.440 --> 0:23:19.399
<v Speaker 1>there was only a one in three sixty billion chance

0:23:19.880 --> 0:23:23.320
<v Speaker 1>that this error would cause a a big enough problem

0:23:23.560 --> 0:23:27.480
<v Speaker 1>to reach up to the fourth decimal place. So most

0:23:27.480 --> 0:23:31.000
<v Speaker 1>calculations that were simple were bulletproof. You you're fine, But

0:23:31.080 --> 0:23:34.439
<v Speaker 1>if you needed that precision, if you needed that really

0:23:34.560 --> 0:23:38.399
<v Speaker 1>fine degree, that's when you would encounter the flaw, and

0:23:38.560 --> 0:23:42.439
<v Speaker 1>that happened because there are math professors in this world,

0:23:42.920 --> 0:23:48.040
<v Speaker 1>and one of those, Thomas nicely discovered in October that

0:23:48.119 --> 0:23:51.200
<v Speaker 1>he was getting errors because of this issue. He needed

0:23:51.240 --> 0:23:54.840
<v Speaker 1>the processor to work correctly, and so he contacted Intel

0:23:54.880 --> 0:23:58.800
<v Speaker 1>about the problem. And this is where we take a

0:23:58.880 --> 0:24:01.639
<v Speaker 1>moment to acknowledge there's a right way and a wrong

0:24:01.680 --> 0:24:06.479
<v Speaker 1>way to handle an issue. That's your fault until decided

0:24:06.520 --> 0:24:09.199
<v Speaker 1>to go the wrong way. My opinion is, if you

0:24:09.240 --> 0:24:11.520
<v Speaker 1>make a mistake, it's usually a good idea to just

0:24:11.720 --> 0:24:13.920
<v Speaker 1>own up to it and try to make it better.

0:24:14.600 --> 0:24:16.960
<v Speaker 1>But Intel's response was more along the lines of yeah,

0:24:17.040 --> 0:24:19.200
<v Speaker 1>we didn't think it was a big deal. And then

0:24:19.240 --> 0:24:23.800
<v Speaker 1>Intel made other pr blenders. But because people began to hear, hey,

0:24:23.880 --> 0:24:27.119
<v Speaker 1>that Pentium processor in your computer that you just bought,

0:24:27.880 --> 0:24:31.480
<v Speaker 1>it doesn't work properly. So people wanted to get replacements.

0:24:32.160 --> 0:24:34.520
<v Speaker 1>But Intel said, oh, we're only going to replace the

0:24:34.560 --> 0:24:37.880
<v Speaker 1>ones if you can prove that the mistakes that it

0:24:37.960 --> 0:24:42.119
<v Speaker 1>makes affect you in some meaningful way. So they weren't

0:24:42.600 --> 0:24:45.320
<v Speaker 1>They weren't denying that there was a problem. They were

0:24:45.359 --> 0:24:47.840
<v Speaker 1>just saying, hey, unless you can prove the problem affects

0:24:47.840 --> 0:24:51.880
<v Speaker 1>you where we don't care. That didn't go well. If

0:24:51.880 --> 0:24:53.919
<v Speaker 1>you create a product and you market it as the

0:24:53.960 --> 0:24:56.680
<v Speaker 1>future of computing and then it's discovered there's a flaw

0:24:56.720 --> 0:24:59.280
<v Speaker 1>on the design, and then you say we'll replace it,

0:24:59.320 --> 0:25:02.880
<v Speaker 1>but only if you proof you deserve it, it doesn't

0:25:03.000 --> 0:25:06.919
<v Speaker 1>tend to make your customer base very happy. So ultimately,

0:25:07.040 --> 0:25:11.080
<v Speaker 1>until reverse that decision and offered to replace the processor

0:25:11.160 --> 0:25:15.240
<v Speaker 1>for anyone who wanted it who had a first generation Pentium,

0:25:15.400 --> 0:25:22.760
<v Speaker 1>and that mistake ended up costing the company four million dollars. Yikes.

0:25:23.560 --> 0:25:27.280
<v Speaker 1>All right, now we're gonna switch Gears over to Microsoft. First.

0:25:27.320 --> 0:25:30.399
<v Speaker 1>I think you could claim that all of Microsoft Bob

0:25:31.920 --> 0:25:34.600
<v Speaker 1>product that was supposed to be an easy, accessible computer

0:25:34.640 --> 0:25:38.720
<v Speaker 1>interface was really just a massive software bug. I mean,

0:25:39.080 --> 0:25:44.400
<v Speaker 1>it introduced comic sands for goodness sakes, the cluttered organization system,

0:25:44.520 --> 0:25:49.000
<v Speaker 1>the lack of meaningful security, and other numerous issues plagued

0:25:49.200 --> 0:25:52.560
<v Speaker 1>that software. But we did an entire episode of Tech

0:25:52.560 --> 0:25:55.239
<v Speaker 1>Stuff about Microsoft Bob a couple of years ago, so

0:25:55.240 --> 0:25:57.920
<v Speaker 1>I'm not gonna dwell on it anymore, but if you

0:25:57.960 --> 0:26:00.720
<v Speaker 1>want to hear more about it, go in that episode.

0:26:00.800 --> 0:26:03.760
<v Speaker 1>It was a fun one. Now in two thousand seven,

0:26:04.720 --> 0:26:08.280
<v Speaker 1>Microsoft experienced a massive headache when a bug on their

0:26:08.320 --> 0:26:11.960
<v Speaker 1>servers notified thousands of Windows customers that they were filthy,

0:26:12.040 --> 0:26:15.280
<v Speaker 1>dirty software pirates and they should be punished. These include

0:26:15.320 --> 0:26:20.120
<v Speaker 1>people who actually had legitimate, legal purchase copies of Windows

0:26:20.240 --> 0:26:24.679
<v Speaker 1>XP or Vista. So the problem here was Microsoft had

0:26:24.720 --> 0:26:29.280
<v Speaker 1>an initiative called Windows Genuine Advantage, and it was a

0:26:29.359 --> 0:26:35.040
<v Speaker 1>nice name for a strategy meant to curtail operating system piracy. Essentially,

0:26:35.080 --> 0:26:37.960
<v Speaker 1>it was a component in Windows that would allow Microsoft

0:26:38.040 --> 0:26:40.680
<v Speaker 1>to figure out if the copy of Windows on any

0:26:40.720 --> 0:26:45.199
<v Speaker 1>given computer was legit. In other words, it was a

0:26:45.280 --> 0:26:48.080
<v Speaker 1>d r M strategy. But in two thousand seven, a

0:26:48.119 --> 0:26:54.000
<v Speaker 1>buggy install of software on a server misidentified thousands of legitimate,

0:26:54.520 --> 0:26:59.400
<v Speaker 1>law abiding customers as pirates for nineteen hours. The software

0:26:59.440 --> 0:27:01.679
<v Speaker 1>just laid on the law, and so people began to

0:27:01.720 --> 0:27:05.000
<v Speaker 1>receive sternly written warnings about their choice to indulge in

0:27:05.119 --> 0:27:08.440
<v Speaker 1>bad behavior. And if you were a Windows Vista customer,

0:27:08.920 --> 0:27:11.639
<v Speaker 1>you had it the worst, not just because you were

0:27:11.720 --> 0:27:15.239
<v Speaker 1>using Windows Vista, which I think we all agree was

0:27:15.400 --> 0:27:20.200
<v Speaker 1>not one of the bright points and Microsoft's operating system history,

0:27:20.520 --> 0:27:23.919
<v Speaker 1>but also because Microsoft had built in the ability for

0:27:24.000 --> 0:27:28.760
<v Speaker 1>Windows genuine advantage to switch off certain operating system features

0:27:29.000 --> 0:27:32.680
<v Speaker 1>in Windows Vista if it determined that the copy someone

0:27:32.760 --> 0:27:36.560
<v Speaker 1>was using was a pirated version, so it was misidentifying

0:27:36.640 --> 0:27:40.280
<v Speaker 1>real versions as pirated ones turning off features, and these

0:27:40.280 --> 0:27:43.119
<v Speaker 1>are for people who have bought legitimate copies. This, by

0:27:43.119 --> 0:27:45.639
<v Speaker 1>the way, is one of the big arguments people have

0:27:45.880 --> 0:27:51.240
<v Speaker 1>against DRM. It has the tendency to punish legitimate customers.

0:27:52.080 --> 0:27:56.280
<v Speaker 1>And you feel like you're stupid for buying a copy

0:27:56.520 --> 0:27:58.960
<v Speaker 1>of a piece of software rather than just stealing one

0:27:59.040 --> 0:28:02.119
<v Speaker 1>that has had those feet yours or those defenses removed,

0:28:02.640 --> 0:28:05.439
<v Speaker 1>Like why you're you're creating more incentives for people to

0:28:05.480 --> 0:28:11.000
<v Speaker 1>go outside and get a pirated copy. Alright, so imagine

0:28:11.040 --> 0:28:14.240
<v Speaker 1>you've purchased this legitimate copy of Windows Vista. First of all,

0:28:14.280 --> 0:28:17.200
<v Speaker 1>you you already feel bad. Then you're told you're a thief,

0:28:17.280 --> 0:28:20.320
<v Speaker 1>so you feel worse. Then someone remotely switches off several

0:28:20.359 --> 0:28:22.560
<v Speaker 1>features of your operating system. That was not a great

0:28:22.600 --> 0:28:26.880
<v Speaker 1>pr message, So that was a real issue. They did

0:28:26.920 --> 0:28:29.800
<v Speaker 1>eventually fix it after that nineteen hours, but by then

0:28:29.840 --> 0:28:32.720
<v Speaker 1>people were already very upset. Also, I don't want to

0:28:33.040 --> 0:28:38.080
<v Speaker 1>just you know, pile lots of abuse onto Microsoft I

0:28:38.080 --> 0:28:42.240
<v Speaker 1>gotta talk about Apple here too. So the company prides

0:28:42.280 --> 0:28:45.880
<v Speaker 1>itself on a high standard of quality and general it's

0:28:45.920 --> 0:28:48.920
<v Speaker 1>pretty good about living up to that standard of quality,

0:28:49.080 --> 0:28:51.600
<v Speaker 1>depending upon your point of view of their various products.

0:28:52.200 --> 0:28:55.880
<v Speaker 1>But that hasn't stopped a few clunkers getting through and

0:28:56.440 --> 0:28:59.400
<v Speaker 1>into the public hands. And that was the case in

0:28:59.400 --> 0:29:02.400
<v Speaker 1>two thousand twelve with Apple Maps. If you owned an

0:29:02.400 --> 0:29:04.960
<v Speaker 1>iPhone back in two thousand twelve when Apple Maps came out,

0:29:05.360 --> 0:29:08.960
<v Speaker 1>you may remember this problem. It's pretty well publicized. Maps

0:29:08.960 --> 0:29:12.120
<v Speaker 1>were inaccurate, sometimes leaving out important details like you know,

0:29:12.320 --> 0:29:15.440
<v Speaker 1>a river or a lake between you and your destination,

0:29:16.200 --> 0:29:18.160
<v Speaker 1>things that might be important if I don't know you

0:29:18.240 --> 0:29:21.680
<v Speaker 1>don't drive an amphibious vehicle, might not have a road

0:29:21.760 --> 0:29:25.800
<v Speaker 1>on there that's important. Might misidentify the location of a

0:29:25.920 --> 0:29:29.600
<v Speaker 1>historical landmark. For instance, that thought the Washington Monument was

0:29:29.640 --> 0:29:32.800
<v Speaker 1>across the street from where it is, But nope, it's

0:29:32.880 --> 0:29:36.600
<v Speaker 1>just where we left it. Despite all of Roland emericks

0:29:36.920 --> 0:29:40.880
<v Speaker 1>best attempts to move it or destroy it, it's still there.

0:29:43.280 --> 0:29:45.800
<v Speaker 1>The real problem here was that the Apple software just

0:29:45.880 --> 0:29:49.320
<v Speaker 1>wasn't ready for public unveiling. It was. It needed a

0:29:49.400 --> 0:29:52.400
<v Speaker 1>lot more testing. It was trying to play catch up

0:29:52.440 --> 0:29:55.479
<v Speaker 1>to Google Maps, but Google had the advantage of working

0:29:55.480 --> 0:29:58.880
<v Speaker 1>with companies that have been doing mapping software for years.

0:29:58.960 --> 0:30:02.000
<v Speaker 1>Google acquired the those companies and acquired the expertise of

0:30:02.040 --> 0:30:04.880
<v Speaker 1>people who have been working on that software. And Apple

0:30:05.040 --> 0:30:08.800
<v Speaker 1>was really just trying to create their own version and

0:30:08.840 --> 0:30:10.600
<v Speaker 1>get it out as fast as it could. But it

0:30:10.680 --> 0:30:13.400
<v Speaker 1>got out a little too early, and the company spent

0:30:13.480 --> 0:30:15.800
<v Speaker 1>the next several months tweaking maps and trying to keep

0:30:15.800 --> 0:30:17.840
<v Speaker 1>control of the situation. But by that time, many of

0:30:17.840 --> 0:30:20.840
<v Speaker 1>Apple's fans, even the most devoted ones, had kind of

0:30:20.880 --> 0:30:24.920
<v Speaker 1>given up and switched over to Google Maps instead. Well,

0:30:24.960 --> 0:30:27.440
<v Speaker 1>that's most of the fun stuff. I've got some really

0:30:27.680 --> 0:30:31.760
<v Speaker 1>serious bugs to cover. But before I do that, let's

0:30:31.760 --> 0:30:43.400
<v Speaker 1>take another quick break and thank our sponsor. Now I'm

0:30:43.440 --> 0:30:46.760
<v Speaker 1>going to transition into some serious bugs. These are ones

0:30:46.840 --> 0:30:51.400
<v Speaker 1>that either threatened the lives of people or they contributed

0:30:51.480 --> 0:30:56.680
<v Speaker 1>to people dying. The ones I've talked about now up

0:30:56.720 --> 0:30:59.760
<v Speaker 1>to now rather have cost companies millions of dollars, but

0:31:00.160 --> 0:31:04.480
<v Speaker 1>one's life was truly threatened. Unfortunately, that's not the case

0:31:04.520 --> 0:31:07.200
<v Speaker 1>with all software bugs. Now, a couple of bugs had

0:31:07.200 --> 0:31:11.960
<v Speaker 1>the potential to kill millions of people. One of those

0:31:12.000 --> 0:31:17.560
<v Speaker 1>happened in night a famous, famous bug, or at least

0:31:17.560 --> 0:31:20.360
<v Speaker 1>a faulty circuit, and that was a faulty circuit in

0:31:20.440 --> 0:31:23.680
<v Speaker 1>nora ADS computer system which caused it to mistakenly conclude

0:31:23.720 --> 0:31:26.720
<v Speaker 1>the US was under nuclear attack from the Soviet Union.

0:31:28.400 --> 0:31:32.600
<v Speaker 1>So displays on nora AD systems showed seemingly random attacks,

0:31:32.600 --> 0:31:35.440
<v Speaker 1>and they didn't correspond with each other. So the display

0:31:35.520 --> 0:31:38.240
<v Speaker 1>might show, Hey, there two missiles heading over from the

0:31:38.280 --> 0:31:41.600
<v Speaker 1>Soviet Union. No, they're two hundred. No they're fifty. No,

0:31:41.760 --> 0:31:45.880
<v Speaker 1>there's three, And it wasn't consistent, and command posts around

0:31:46.080 --> 0:31:49.840
<v Speaker 1>the US all had conflicting information, which led leaders to

0:31:49.880 --> 0:31:54.400
<v Speaker 1>conclude the whole thing was a regrettable computer error, and

0:31:54.440 --> 0:31:57.560
<v Speaker 1>they were right to do so. To be fair, they

0:31:57.560 --> 0:31:59.880
<v Speaker 1>were kind of prepared for this because there was another

0:32:00.040 --> 0:32:02.600
<v Speaker 1>incident that had actually happened in nineteen seventy nine that

0:32:02.720 --> 0:32:06.760
<v Speaker 1>was way scarier, and in that case, someone mistakenly inserted

0:32:06.760 --> 0:32:09.360
<v Speaker 1>a training scenario into the computer system that made it

0:32:09.400 --> 0:32:11.760
<v Speaker 1>seem like the Soviet Union had launched an all out

0:32:11.840 --> 0:32:15.200
<v Speaker 1>nuclear attack on the US. But that wasn't a bug.

0:32:15.360 --> 0:32:17.080
<v Speaker 1>That was a mistake on the part of a human

0:32:17.120 --> 0:32:20.960
<v Speaker 1>who had accidentally uploaded the wrong or rather executed the

0:32:20.960 --> 0:32:23.560
<v Speaker 1>wrong command. It didn't have something to do with a

0:32:23.600 --> 0:32:27.680
<v Speaker 1>flaw in the computer system itself, however, because that thing

0:32:27.760 --> 0:32:32.360
<v Speaker 1>happened and everybody was freaked out and then was able

0:32:32.360 --> 0:32:34.320
<v Speaker 1>to determine that, in fact it was a false alarm,

0:32:34.640 --> 0:32:37.520
<v Speaker 1>it meant that calmer heads could prevail in the nineteen

0:32:37.560 --> 0:32:42.600
<v Speaker 1>eighty incident, so the Soviets also had a close call

0:32:42.680 --> 0:32:44.720
<v Speaker 1>just a few years later. It was a bug in

0:32:44.760 --> 0:32:48.640
<v Speaker 1>the early warning detection software that the USSR was using

0:32:48.840 --> 0:32:51.600
<v Speaker 1>in the early eighties, and on September twenty three, nine

0:32:51.840 --> 0:32:55.560
<v Speaker 1>eight three and so Union received an alert that the

0:32:55.680 --> 0:32:58.640
<v Speaker 1>US had launched a nuclear attack in the form of

0:32:58.800 --> 0:33:03.200
<v Speaker 1>five nuclear war It's uh, technically two different attacks. The

0:33:03.280 --> 0:33:06.280
<v Speaker 1>first would have been a single nuclear warhead and the

0:33:06.360 --> 0:33:09.920
<v Speaker 1>second was four nuclear warheads. And this was during a

0:33:09.920 --> 0:33:13.600
<v Speaker 1>particularly stressful period in the history of both countries and

0:33:13.640 --> 0:33:16.880
<v Speaker 1>their relationship with each other, at the height of the

0:33:16.920 --> 0:33:23.800
<v Speaker 1>Cold War nine three now fortunately, UH Soviet Air Defense

0:33:23.840 --> 0:33:29.960
<v Speaker 1>Forces Lieutenant Colonel Stanislav Petrov suspected that this report was

0:33:30.040 --> 0:33:32.920
<v Speaker 1>an error and that there was some sort of bug

0:33:32.920 --> 0:33:36.479
<v Speaker 1>in the software or a mistake in the reporting system

0:33:36.520 --> 0:33:39.960
<v Speaker 1>that caused this, he gave a command to hold off

0:33:40.000 --> 0:33:43.240
<v Speaker 1>on any sort of retaliatory strike, which would have initiated

0:33:43.240 --> 0:33:47.040
<v Speaker 1>a full scale nuclear war had it happened. Petrov was

0:33:47.360 --> 0:33:49.680
<v Speaker 1>the officer in charge of a bunker that served as

0:33:49.680 --> 0:33:52.840
<v Speaker 1>the command center for this early warning system, and he

0:33:52.840 --> 0:33:56.640
<v Speaker 1>he had said afterward that his reckoning was any real

0:33:56.640 --> 0:34:00.680
<v Speaker 1>attack would consist of hundreds of warheads, not five. No

0:34:00.760 --> 0:34:04.560
<v Speaker 1>one would start an attack with just five warheads, so

0:34:04.600 --> 0:34:06.320
<v Speaker 1>it was more likely to be an error than a

0:34:06.360 --> 0:34:09.440
<v Speaker 1>genuine attack. So he gave the command to wait until

0:34:09.440 --> 0:34:12.480
<v Speaker 1>the reported missiles would pass into the range of radar,

0:34:13.000 --> 0:34:16.720
<v Speaker 1>which only extended as far as the horizon, so if

0:34:16.880 --> 0:34:18.959
<v Speaker 1>it had in fact been a real attack, it would

0:34:18.960 --> 0:34:22.759
<v Speaker 1>have potentially limited the Soviet Union's ability to respond. But

0:34:23.120 --> 0:34:29.040
<v Speaker 1>no missile showed up, and he was vindicated in his decision. Now,

0:34:29.040 --> 0:34:31.080
<v Speaker 1>the cause of the false alarm in this case was

0:34:31.760 --> 0:34:36.840
<v Speaker 1>a combination of factors that the designers didn't anticipate, uh

0:34:36.920 --> 0:34:41.279
<v Speaker 1>which largely consisted of sunlight hitting high altitude clouds at

0:34:41.320 --> 0:34:45.359
<v Speaker 1>a particular angle from a particular perspective of the satellites,

0:34:45.760 --> 0:34:52.239
<v Speaker 1>so the satellites misidentified that reflection as a warhead. Now,

0:34:52.280 --> 0:34:54.480
<v Speaker 1>they were. The subvieys were able to address this error

0:34:54.520 --> 0:34:58.120
<v Speaker 1>in the future by adding another step in which these

0:34:58.160 --> 0:35:02.520
<v Speaker 1>satellites would cross referenced data from other geostationary satellites to

0:35:02.640 --> 0:35:07.680
<v Speaker 1>make certain that they are identifying actual rockets as opposed

0:35:07.719 --> 0:35:13.640
<v Speaker 1>to high altitude clouds. Now, there are several cases of

0:35:14.640 --> 0:35:19.360
<v Speaker 1>software bugs leading to actual deaths. For example, the the

0:35:19.560 --> 0:35:22.880
<v Speaker 1>RACK was such a case. Now that was a radiation

0:35:22.960 --> 0:35:26.799
<v Speaker 1>therapy machine that could deliver two different modes of radiation treatments.

0:35:27.400 --> 0:35:30.719
<v Speaker 1>The first was a low powered direct electron beam and

0:35:30.760 --> 0:35:33.960
<v Speaker 1>the second was a mega volt X ray beam. Now,

0:35:33.960 --> 0:35:36.440
<v Speaker 1>the x ray beam was far more intense and it

0:35:36.520 --> 0:35:40.839
<v Speaker 1>required physicians to provide shielding to patients to limit exposure

0:35:40.880 --> 0:35:44.880
<v Speaker 1>to the beam. But the therac had inherited its code

0:35:44.920 --> 0:35:49.000
<v Speaker 1>from its predecessor, which had different hardware constraints. Now the

0:35:49.040 --> 0:35:53.160
<v Speaker 1>new machine meant that these constraints weren't there, and it

0:35:53.239 --> 0:35:56.600
<v Speaker 1>created a deadly problem if operators changed the machines mode

0:35:56.719 --> 0:35:59.600
<v Speaker 1>too quickly from one to the other, it would actually

0:35:59.600 --> 0:36:03.000
<v Speaker 1>send sets of instructions to the processor, one for each

0:36:03.080 --> 0:36:06.160
<v Speaker 1>mode of operation, and whichever set of instructions reached the

0:36:06.160 --> 0:36:10.680
<v Speaker 1>processor first. That's what the machine would switch to So

0:36:10.760 --> 0:36:15.640
<v Speaker 1>let's say you've been operating the therac in the mega

0:36:15.719 --> 0:36:18.759
<v Speaker 1>volt X ray mode, but now you're going to have

0:36:18.880 --> 0:36:21.720
<v Speaker 1>a patient come in. You need to administer radiation therapy,

0:36:22.040 --> 0:36:24.560
<v Speaker 1>so you want to switch it to low electron. Being

0:36:25.080 --> 0:36:27.880
<v Speaker 1>you switch it too quickly, it sends two sets of

0:36:27.920 --> 0:36:30.560
<v Speaker 1>instructions to the processor, and the one that arises the

0:36:30.600 --> 0:36:33.759
<v Speaker 1>mega volt x ray instruction, so instead of switching it,

0:36:34.040 --> 0:36:39.000
<v Speaker 1>you confirm to stay on the more intense, deadlier radiation.

0:36:40.520 --> 0:36:45.799
<v Speaker 1>The tragic news is this did happen several times. Six

0:36:45.840 --> 0:36:49.840
<v Speaker 1>patients were documented as dying from complications due to radiation

0:36:49.880 --> 0:36:53.560
<v Speaker 1>poisoning from there at twenty five machines between night five

0:36:53.640 --> 0:36:56.840
<v Speaker 1>and nineteen eight six, And while the machine would send

0:36:56.960 --> 0:37:01.360
<v Speaker 1>error messages when these conditions were present, the documentation for

0:37:01.400 --> 0:37:04.640
<v Speaker 1>the machine didn't explain what the errors meant. It didn't say, hey,

0:37:04.640 --> 0:37:07.400
<v Speaker 1>if you get this error, it means that you've switched

0:37:07.480 --> 0:37:11.399
<v Speaker 1>modes too quickly and you need to address this. So,

0:37:11.440 --> 0:37:16.000
<v Speaker 1>since operators weren't told that this was necessarily a hazardous condition,

0:37:16.080 --> 0:37:19.440
<v Speaker 1>they would just clear the error and proceed, and there

0:37:19.440 --> 0:37:24.680
<v Speaker 1>were deadly results in a similar vein in Panama City, Panama,

0:37:25.520 --> 0:37:29.120
<v Speaker 1>there was an incident involving a Cobalt sixty system, actually

0:37:29.200 --> 0:37:32.840
<v Speaker 1>several incidents involving this Cobalt sixty system that was running

0:37:32.880 --> 0:37:35.960
<v Speaker 1>therapy planning software made by a company called Multi Data

0:37:36.000 --> 0:37:39.799
<v Speaker 1>Systems International. Now, the software's purpose was to calculate the

0:37:39.840 --> 0:37:44.040
<v Speaker 1>amount of radiation that cancer patients should receive in radiation

0:37:44.080 --> 0:37:49.600
<v Speaker 1>therapy sessions. During these radiation therapy sessions, the therapists were

0:37:49.600 --> 0:37:53.920
<v Speaker 1>meant to place metal shields on the patient to protect

0:37:54.000 --> 0:37:59.080
<v Speaker 1>healthy tissue from radiation damage. And the software would allow

0:37:59.160 --> 0:38:03.560
<v Speaker 1>therapists to use a methodology to show where those shields

0:38:03.600 --> 0:38:06.560
<v Speaker 1>were on the patient, to indicate where the shields are present.

0:38:07.640 --> 0:38:11.000
<v Speaker 1>But they could only draw up to four shields, and

0:38:11.040 --> 0:38:14.040
<v Speaker 1>the doctors in Panama wanted to use five shields for

0:38:14.160 --> 0:38:18.239
<v Speaker 1>particular therapy sessions. They were overloaded, they had a long

0:38:18.280 --> 0:38:20.440
<v Speaker 1>waiting list of patients, and they were trying to make

0:38:20.480 --> 0:38:24.439
<v Speaker 1>things more efficient, and they discovered that they could kind

0:38:24.480 --> 0:38:29.000
<v Speaker 1>of work around this limitation of four shields by drawing

0:38:29.040 --> 0:38:31.120
<v Speaker 1>a design on the computer screen as if they were

0:38:31.200 --> 0:38:34.319
<v Speaker 1>using just one large shield that has a hole in

0:38:34.360 --> 0:38:36.279
<v Speaker 1>the middle of it. And so what they would do

0:38:36.320 --> 0:38:39.080
<v Speaker 1>is they would arrange the five shields to essentially be

0:38:39.080 --> 0:38:41.880
<v Speaker 1>in the same sort of shape with the middle of

0:38:41.920 --> 0:38:44.480
<v Speaker 1>it being open so that they can have the radiation

0:38:44.520 --> 0:38:49.600
<v Speaker 1>therapy passed through it. Uh, But they didn't realize that

0:38:49.719 --> 0:38:52.000
<v Speaker 1>the software had a bug in it, and that bug

0:38:52.160 --> 0:38:55.400
<v Speaker 1>was if you drew the whole in one direction, you

0:38:55.440 --> 0:38:58.399
<v Speaker 1>get the correct dose of radiation, but if you drew

0:38:58.440 --> 0:39:02.600
<v Speaker 1>it in the other direction, so like clockwise versus counterclockwise,

0:39:03.120 --> 0:39:06.839
<v Speaker 1>the software would recommend a dosage twice as strong as

0:39:06.880 --> 0:39:10.480
<v Speaker 1>what was needed, and the result was devastating. Eight patients

0:39:10.640 --> 0:39:14.840
<v Speaker 1>died as a result of this, and another twenty received

0:39:14.880 --> 0:39:17.640
<v Speaker 1>doses high enough to potentially cause health problems. Later on,

0:39:18.960 --> 0:39:21.959
<v Speaker 1>the physicians were actually arrested and brought up on murder

0:39:22.120 --> 0:39:25.760
<v Speaker 1>charges because they were supposed to double check all calculations

0:39:25.800 --> 0:39:28.440
<v Speaker 1>by hand to ensure that they were going to give

0:39:28.480 --> 0:39:31.960
<v Speaker 1>the proper dose of radiation treatment. So while the software

0:39:32.160 --> 0:39:37.040
<v Speaker 1>was calculating the incorrect dose, the physicians were responsible for

0:39:37.120 --> 0:39:40.640
<v Speaker 1>making sure that any dose that was calculated was in

0:39:40.680 --> 0:39:42.480
<v Speaker 1>fact the correct one, and they failed to do so,

0:39:42.840 --> 0:39:46.600
<v Speaker 1>or at least that was the charge. There are also

0:39:46.680 --> 0:39:49.640
<v Speaker 1>bugs that involved military applications that have resulted in the

0:39:49.719 --> 0:39:52.640
<v Speaker 1>loss of life. During the Persian Gulf War in Iraqi,

0:39:52.840 --> 0:39:55.800
<v Speaker 1>fired scud missile hit a US base in Saudi Arabia

0:39:56.080 --> 0:40:00.120
<v Speaker 1>and it killed twenty eight soldiers. Now the base had

0:40:00.160 --> 0:40:04.000
<v Speaker 1>detected the missile and had launched and fired a Patriot

0:40:04.000 --> 0:40:06.719
<v Speaker 1>missile in return. The purpose of the Patriot missile was

0:40:06.760 --> 0:40:09.880
<v Speaker 1>to intercept and destroy incoming missiles, and the way a

0:40:09.880 --> 0:40:12.840
<v Speaker 1>Patriot missile did this was to use radar pulses to

0:40:12.960 --> 0:40:17.120
<v Speaker 1>guide trajectory calculations so that it would end up getting

0:40:17.160 --> 0:40:19.880
<v Speaker 1>close to the incoming missile. This is harder than it

0:40:19.960 --> 0:40:23.520
<v Speaker 1>sounds because both missiles are moving very very quickly, so

0:40:23.560 --> 0:40:26.600
<v Speaker 1>we need a very precise information in order to adjust

0:40:26.680 --> 0:40:31.400
<v Speaker 1>its trajectory properly and make sure it was on target. Now,

0:40:31.440 --> 0:40:34.279
<v Speaker 1>once it gets within range, which is between five and

0:40:34.520 --> 0:40:38.399
<v Speaker 1>ten meters I think uh, it would then fire out

0:40:38.840 --> 0:40:42.440
<v Speaker 1>a thousand pellets from the Patriot missile at high velocity

0:40:42.480 --> 0:40:46.080
<v Speaker 1>with the goal of causing the incoming warhead to explode prematurely.

0:40:47.719 --> 0:40:50.560
<v Speaker 1>In this case, the Patriot missile missed and the military

0:40:50.600 --> 0:40:52.880
<v Speaker 1>investigated the issue in the wake of the loss of

0:40:52.920 --> 0:40:55.600
<v Speaker 1>life and found a problem with the software guiding the

0:40:55.600 --> 0:40:58.759
<v Speaker 1>Patriot missile, and it was a problem that actually the

0:40:58.760 --> 0:41:01.000
<v Speaker 1>military kind of knew about already. So one of the

0:41:01.040 --> 0:41:04.080
<v Speaker 1>processes in the Patriots programming was to convert time into

0:41:04.120 --> 0:41:10.000
<v Speaker 1>floating point operations for increased accuracy. But not all subroutines

0:41:10.560 --> 0:41:15.200
<v Speaker 1>that depended on tracking time did this. Some of them

0:41:15.200 --> 0:41:19.759
<v Speaker 1>remained UH clock units rather than floating point operations, which

0:41:19.800 --> 0:41:22.960
<v Speaker 1>meant that they would get out of sync after a while.

0:41:23.000 --> 0:41:26.160
<v Speaker 1>There'd be a disagreement in various subroutines as to what

0:41:26.600 --> 0:41:29.279
<v Speaker 1>how much time had actually passed. And like I said,

0:41:29.280 --> 0:41:31.560
<v Speaker 1>the military was aware of this issue and they had

0:41:31.600 --> 0:41:35.440
<v Speaker 1>a work around, which was not ideal. The workaround was

0:41:35.880 --> 0:41:38.840
<v Speaker 1>you would occasionally reboot the system, which would reset the

0:41:38.840 --> 0:41:41.480
<v Speaker 1>clocks and synchronize them, but over time they would fall

0:41:41.520 --> 0:41:44.320
<v Speaker 1>out of sync because they're not tracking time the same way.

0:41:44.960 --> 0:41:47.520
<v Speaker 1>And since there was no hard and fast rule as

0:41:47.520 --> 0:41:50.799
<v Speaker 1>to how frequently you'd reset the system, problems like this

0:41:50.840 --> 0:41:53.160
<v Speaker 1>one where possible, and in fact, in this case it

0:41:53.200 --> 0:41:57.040
<v Speaker 1>did happen. So prior to this particular incident, that specific

0:41:57.080 --> 0:42:00.080
<v Speaker 1>Patriot system had been running for one hours with how

0:42:00.120 --> 0:42:05.319
<v Speaker 1>to reboot, and the clock disagreement amounted to about one

0:42:05.400 --> 0:42:07.680
<v Speaker 1>third of a second. Now, that seems like it's no

0:42:07.800 --> 0:42:09.760
<v Speaker 1>time at all. One third of a second is so

0:42:09.760 --> 0:42:13.440
<v Speaker 1>so short, But a scutt missile's top speed is about

0:42:13.480 --> 0:42:17.200
<v Speaker 1>one point one miles per second or one point seven

0:42:17.280 --> 0:42:20.120
<v Speaker 1>kilometers per second, which means if you take a third

0:42:20.120 --> 0:42:22.399
<v Speaker 1>of a second, the missile could travel more than five

0:42:24.000 --> 0:42:26.160
<v Speaker 1>And since the patriot needs to be within ten ms

0:42:26.160 --> 0:42:28.279
<v Speaker 1>of a target to destroy it, that resulted in a

0:42:28.360 --> 0:42:32.960
<v Speaker 1>catastrophic failure. So software bugs can be a matter of

0:42:33.000 --> 0:42:36.239
<v Speaker 1>life or death. It's not all just Hey, this irritating

0:42:36.320 --> 0:42:40.480
<v Speaker 1>thing meant people couldn't make long distance phone calls or uh,

0:42:40.520 --> 0:42:44.680
<v Speaker 1>this issue caused my computer to start writing massive amounts

0:42:44.680 --> 0:42:47.799
<v Speaker 1>of data to its hard drive. And this is why

0:42:48.200 --> 0:42:53.080
<v Speaker 1>it's so important to have really qualified q A personnel

0:42:53.360 --> 0:42:55.879
<v Speaker 1>go through code and make sure it's doing what it's

0:42:55.880 --> 0:42:58.720
<v Speaker 1>supposed to do, because the problems that can arise can

0:42:58.760 --> 0:43:01.680
<v Speaker 1>be non trivial and in fact life or death situations

0:43:02.000 --> 0:43:05.959
<v Speaker 1>depending upon the application of technology. So technology is a

0:43:06.000 --> 0:43:09.799
<v Speaker 1>fascinating thing. It's a wonderful thing. It has benefited us

0:43:09.840 --> 0:43:13.399
<v Speaker 1>in ways that I can't even begin to describe. It's

0:43:13.440 --> 0:43:16.000
<v Speaker 1>just too broad a topic, and it's something I've been

0:43:16.040 --> 0:43:19.200
<v Speaker 1>tackling for, you know, eight years and I haven't haven't

0:43:19.239 --> 0:43:22.279
<v Speaker 1>even gotten close to getting toward the finishing point. So

0:43:23.400 --> 0:43:26.000
<v Speaker 1>I don't want to suggest that technology is bad, but

0:43:26.080 --> 0:43:30.360
<v Speaker 1>we definitely have the need to check, double check, and

0:43:30.400 --> 0:43:32.799
<v Speaker 1>triple check all this work to make certain things are

0:43:32.880 --> 0:43:35.840
<v Speaker 1>working properly before we release them out into the wild.

0:43:35.880 --> 0:43:40.640
<v Speaker 1>That particularly applies if, again, you are reusing old code

0:43:41.000 --> 0:43:45.680
<v Speaker 1>or old components in a new way, because you have

0:43:45.760 --> 0:43:47.959
<v Speaker 1>to make absolutely certain that there's not going to be

0:43:48.080 --> 0:43:53.200
<v Speaker 1>some unintended problem that results when a new form factor

0:43:53.440 --> 0:43:57.200
<v Speaker 1>is using old code. I hope you guys found this

0:43:57.280 --> 0:44:00.719
<v Speaker 1>episode interesting. I plan on doing a lot of other

0:44:00.960 --> 0:44:06.479
<v Speaker 1>kind of list sort of podcasts in the future, things

0:44:06.520 --> 0:44:11.680
<v Speaker 1>like some of the the most successful pieces of software

0:44:11.680 --> 0:44:15.439
<v Speaker 1>of all time, the most uh popular gadgets of all time,

0:44:15.480 --> 0:44:17.480
<v Speaker 1>that sort of stuff. But if you have any suggestions

0:44:17.480 --> 0:44:20.640
<v Speaker 1>for that kind of topic or anything else, really you

0:44:20.680 --> 0:44:23.839
<v Speaker 1>should write me. My email address is tech stuff at

0:44:23.920 --> 0:44:26.400
<v Speaker 1>how stuff works dot com, or you can drop me

0:44:26.440 --> 0:44:30.000
<v Speaker 1>a line on Facebook for Twitter to handle it. Both

0:44:30.000 --> 0:44:33.560
<v Speaker 1>of those is text stuff H s W. And I'll

0:44:33.600 --> 0:44:42.719
<v Speaker 1>talk to you guys again really soon for more on

0:44:42.719 --> 0:44:45.200
<v Speaker 1>this and thousands of other topics. Is it how stuff

0:44:45.200 --> 0:44:55.680
<v Speaker 1>Works dot Com