WEBVTT - The Evolution of Virtualization

0:00:04.240 --> 0:00:07.240
<v Speaker 1>Welcome to tex Stuff, a production of I Heart Radios,

0:00:07.320 --> 0:00:13.880
<v Speaker 1>How Stuff Works. Hey there, and welcome to tech Stuff.

0:00:13.920 --> 0:00:17.159
<v Speaker 1>I'm your host, Jonathan Strickland. I'm an executive producer with

0:00:17.200 --> 0:00:19.320
<v Speaker 1>How Stuff Works and I heart Radio and I love

0:00:19.400 --> 0:00:23.200
<v Speaker 1>all things tech. And today's episode comes to us due

0:00:23.320 --> 0:00:29.040
<v Speaker 1>to a listener request. Martin many many moons ago asked

0:00:29.080 --> 0:00:31.880
<v Speaker 1>if I could do an episode talking about the evolution

0:00:32.000 --> 0:00:35.520
<v Speaker 1>of virtualization, and so that's what this episode is all about.

0:00:35.920 --> 0:00:41.520
<v Speaker 1>But first, what is virtualization? Well, as the name implies,

0:00:41.640 --> 0:00:46.600
<v Speaker 1>it's all about creating a virtual representation of something else. Now,

0:00:46.640 --> 0:00:50.479
<v Speaker 1>in computing, we typically use it to mean creating virtual

0:00:50.640 --> 0:00:54.360
<v Speaker 1>computer platforms, and there are a lot of reasons why

0:00:54.560 --> 0:00:56.560
<v Speaker 1>you would want to do this. It would be a

0:00:56.640 --> 0:01:01.160
<v Speaker 1>virtual computer platform that exists on top of actual physical hardware.

0:01:01.600 --> 0:01:04.040
<v Speaker 1>And you might want to do it for security reasons,

0:01:04.319 --> 0:01:08.440
<v Speaker 1>to separate different programs and storage systems from one another.

0:01:08.920 --> 0:01:11.160
<v Speaker 1>You might want to do it to provide different stable

0:01:11.280 --> 0:01:16.120
<v Speaker 1>development environments so that a mistake in one partition doesn't

0:01:16.120 --> 0:01:19.119
<v Speaker 1>bring everything else down on the machine. You might want

0:01:19.160 --> 0:01:21.560
<v Speaker 1>to do it to run different operating systems on the

0:01:21.600 --> 0:01:24.200
<v Speaker 1>same physical hardware, or maybe you want to do it

0:01:24.240 --> 0:01:28.080
<v Speaker 1>to maximize efficiency in your computer system, or perhaps some

0:01:28.160 --> 0:01:31.520
<v Speaker 1>combination of some or all of the above, but we'll

0:01:31.520 --> 0:01:33.920
<v Speaker 1>get into that later. For now, the important thing, no,

0:01:34.480 --> 0:01:37.000
<v Speaker 1>is that the goal is to create a virtual version

0:01:37.120 --> 0:01:41.160
<v Speaker 1>of something that runs on top of actual physical hardware. Now,

0:01:41.160 --> 0:01:45.119
<v Speaker 1>the history of virtualization stretches back to the nineteen sixties,

0:01:45.480 --> 0:01:48.400
<v Speaker 1>well before the days when the average person had any

0:01:48.440 --> 0:01:52.720
<v Speaker 1>sort of interactions with a computer. Early computers were useful

0:01:53.120 --> 0:01:56.400
<v Speaker 1>but had some limitations. This is like the main frame

0:01:56.600 --> 0:02:00.240
<v Speaker 1>age of computers. So one of those limitations was that

0:02:00.360 --> 0:02:04.040
<v Speaker 1>early computers could really only run one process at a time,

0:02:04.440 --> 0:02:06.800
<v Speaker 1>and there had to be a person there to initiate

0:02:07.000 --> 0:02:10.000
<v Speaker 1>a new program. At first, that wasn't that big of

0:02:10.000 --> 0:02:13.679
<v Speaker 1>a problem because computers were such a niche gadget. Very

0:02:13.680 --> 0:02:16.080
<v Speaker 1>few people had any access to them in the first place,

0:02:16.080 --> 0:02:18.960
<v Speaker 1>so it wasn't that big of a limitation. The scientific

0:02:19.000 --> 0:02:23.280
<v Speaker 1>and academic communities were using them, but beyond them, very

0:02:23.400 --> 0:02:26.880
<v Speaker 1>few people had any experience with a computer. They were

0:02:26.880 --> 0:02:31.639
<v Speaker 1>mostly unknown. But as computers were becoming more available, as

0:02:31.680 --> 0:02:35.160
<v Speaker 1>businesses were starting to use them, and they were becoming

0:02:35.160 --> 0:02:39.160
<v Speaker 1>more capable of handling processes that went beyond academic interests,

0:02:39.520 --> 0:02:43.080
<v Speaker 1>it became clear that the limitations were a liability, and

0:02:43.120 --> 0:02:46.399
<v Speaker 1>so you had companies like IBM researching ways to get

0:02:46.400 --> 0:02:50.480
<v Speaker 1>around these limitations. One such way was an approach later

0:02:50.720 --> 0:02:54.680
<v Speaker 1>called batch processing. This dates from the time when programs

0:02:54.680 --> 0:02:58.920
<v Speaker 1>were represented on physical cards with holes punched in them,

0:02:59.000 --> 0:03:02.919
<v Speaker 1>known as punch cards for obvious reasons. So in an

0:03:02.919 --> 0:03:07.240
<v Speaker 1>early computer, you'd have a stack of cards representing a

0:03:07.440 --> 0:03:10.840
<v Speaker 1>single program, and you would feed those cards into the

0:03:10.880 --> 0:03:15.280
<v Speaker 1>computer's hopper, which is essentially its intake for cards, and

0:03:15.320 --> 0:03:19.280
<v Speaker 1>the computer would analyze the cards, which would have instructions

0:03:19.320 --> 0:03:23.080
<v Speaker 1>on them. The computer would then follow those instructions and

0:03:23.120 --> 0:03:26.480
<v Speaker 1>produce a result and either printed out or create a

0:03:26.480 --> 0:03:29.840
<v Speaker 1>new punch card or stack of punch cards, or later

0:03:29.919 --> 0:03:33.880
<v Speaker 1>on it would display the results on a monitor. IBM

0:03:33.919 --> 0:03:37.680
<v Speaker 1>developed computers that could accept stacks of cards that represented

0:03:37.760 --> 0:03:40.920
<v Speaker 1>more than one process. The computer would be able to

0:03:40.960 --> 0:03:44.160
<v Speaker 1>read out the stacks and complete each process in turn,

0:03:44.520 --> 0:03:47.840
<v Speaker 1>so you could feed batches of cards to the computer.

0:03:48.200 --> 0:03:51.640
<v Speaker 1>Thus batch processing it cut down on the amount of

0:03:51.680 --> 0:03:55.200
<v Speaker 1>time people had to spend babysitting a computer or waiting

0:03:55.200 --> 0:03:57.520
<v Speaker 1>for their turn to run a process, freeing them up

0:03:57.520 --> 0:04:00.560
<v Speaker 1>to work on other stuff. But was still limited, and

0:04:00.560 --> 0:04:03.800
<v Speaker 1>you were still stuck running just one process at a time.

0:04:03.840 --> 0:04:06.600
<v Speaker 1>You would just run them in sequence, and you couldn't

0:04:06.640 --> 0:04:09.440
<v Speaker 1>easily have multiple people using the same computer at the

0:04:09.480 --> 0:04:12.600
<v Speaker 1>same time. At best, you could use batch processing to

0:04:12.720 --> 0:04:15.640
<v Speaker 1>run a second job right after the first one, but

0:04:15.760 --> 0:04:18.800
<v Speaker 1>it was restrictive, and as computers were becoming more important,

0:04:19.040 --> 0:04:22.160
<v Speaker 1>this was a problem in the late fifties and early

0:04:22.320 --> 0:04:27.120
<v Speaker 1>nineteen sixties some engineers or computer scientists, though that term

0:04:27.240 --> 0:04:30.520
<v Speaker 1>was hardly in use yet, and many in academic fields

0:04:30.520 --> 0:04:33.080
<v Speaker 1>were very snooty. They didn't quite yet view the subject

0:04:33.160 --> 0:04:36.640
<v Speaker 1>as worthy of standing on its own anyway, Some of

0:04:36.680 --> 0:04:39.760
<v Speaker 1>these innovators began to experiment with ways to get around

0:04:39.960 --> 0:04:44.160
<v Speaker 1>these limitations. A fellow named John McCarthy, a professor at

0:04:44.160 --> 0:04:47.960
<v Speaker 1>the Massachusetts Institute of Technology better known as m i T,

0:04:48.520 --> 0:04:52.080
<v Speaker 1>proposed in nineteen fifty nine that an IBM seven O

0:04:52.279 --> 0:04:55.279
<v Speaker 1>nine main frame could be tweaked to allow for a

0:04:55.360 --> 0:04:59.320
<v Speaker 1>few people to use the machine more or less at

0:04:59.360 --> 0:05:02.120
<v Speaker 1>the same time time. He then began to recommend some

0:05:02.240 --> 0:05:05.920
<v Speaker 1>changes to the university's IBM seven oh four main frame

0:05:06.200 --> 0:05:10.400
<v Speaker 1>to allow what he called a time stealing mode. In

0:05:10.440 --> 0:05:12.839
<v Speaker 1>this mode, you could have a batch of jobs running

0:05:12.880 --> 0:05:15.760
<v Speaker 1>on a computer, then someone else with an unrelated job

0:05:15.800 --> 0:05:19.000
<v Speaker 1>shows up, and, using time stealing, the new person could

0:05:19.080 --> 0:05:21.960
<v Speaker 1>interrupt the batch process to run this other job, and

0:05:22.000 --> 0:05:25.920
<v Speaker 1>then the batch process could resume as per normal. Another

0:05:26.080 --> 0:05:29.760
<v Speaker 1>m i T professor named Fernando Corbato worked on a

0:05:29.800 --> 0:05:33.599
<v Speaker 1>similar project, tweaking the university's IBM seven oh nine main

0:05:33.640 --> 0:05:36.400
<v Speaker 1>frame so that four people could use the system at

0:05:36.400 --> 0:05:39.599
<v Speaker 1>the same time. But these were all solutions using systems

0:05:39.600 --> 0:05:44.120
<v Speaker 1>that weren't natively designed to support multiple users. They were workarounds,

0:05:44.400 --> 0:05:48.479
<v Speaker 1>and m i T computer scientists found manufacturers were uninterested

0:05:48.520 --> 0:05:52.200
<v Speaker 1>in changing that because there seemed to be very little

0:05:52.240 --> 0:05:55.839
<v Speaker 1>call for it. On July one, nineteen sixty three, m

0:05:55.880 --> 0:05:59.960
<v Speaker 1>i T launched a project originally called Mathematics and Computation

0:06:00.040 --> 0:06:04.240
<v Speaker 1>in or MAC, but later the acronym would be retroactively

0:06:04.320 --> 0:06:08.800
<v Speaker 1>applied to the phrase multiple access computer. Funding for the

0:06:08.839 --> 0:06:12.080
<v Speaker 1>project came courtesy of ar PA, which would later get

0:06:12.120 --> 0:06:15.560
<v Speaker 1>its own acronym update to DARPA. And in case you

0:06:15.560 --> 0:06:19.200
<v Speaker 1>are unfamiliar with that organization, it's a division within the

0:06:19.279 --> 0:06:22.800
<v Speaker 1>United States Department of Defense, and its mission is to

0:06:22.920 --> 0:06:26.400
<v Speaker 1>fund research and development into technologies that contribute to the

0:06:26.440 --> 0:06:29.719
<v Speaker 1>defense of the country in some way. So why was

0:06:29.760 --> 0:06:33.480
<v Speaker 1>the Department of Defense interested in this? It largely had

0:06:33.520 --> 0:06:36.719
<v Speaker 1>to do with Russia and Sputnik. Now, I've talked about

0:06:36.720 --> 0:06:40.160
<v Speaker 1>how spot Nick helped spur on a ton of innovation

0:06:40.240 --> 0:06:44.120
<v Speaker 1>in the United States. It scared the daylights out of

0:06:44.240 --> 0:06:47.280
<v Speaker 1>people in the US. It suggested that Russia was much

0:06:47.360 --> 0:06:51.520
<v Speaker 1>further along technologically speaking than the US had suspected. And

0:06:51.560 --> 0:06:54.680
<v Speaker 1>it lit a fire under the proverbial backside of the

0:06:54.760 --> 0:06:57.960
<v Speaker 1>US military. And so there was a strong incentive to

0:06:58.040 --> 0:07:00.960
<v Speaker 1>advance computer science and technolog g in the US to

0:07:01.080 --> 0:07:06.080
<v Speaker 1>outpace the Russians. Project max primary purpose was to advance

0:07:06.120 --> 0:07:09.880
<v Speaker 1>computer science in several ways, including the development of new

0:07:09.960 --> 0:07:14.080
<v Speaker 1>operating systems and computational theory. It largely grew out of

0:07:14.160 --> 0:07:17.560
<v Speaker 1>a meeting between m i T Professor Robert Fano and

0:07:17.640 --> 0:07:21.080
<v Speaker 1>Joseph C. R. Lick Lighter, who had previously established a

0:07:21.120 --> 0:07:24.240
<v Speaker 1>psychology group in the Electrical Engineering department of m i T.

0:07:24.840 --> 0:07:27.840
<v Speaker 1>Then gone on to join a research firm called Bolt,

0:07:27.960 --> 0:07:31.240
<v Speaker 1>Baroneck and Newman better known as B B N, and

0:07:31.280 --> 0:07:35.200
<v Speaker 1>then was named the first director of ARPA's Information Processing

0:07:35.280 --> 0:07:39.520
<v Speaker 1>Techniques Office or I p t O. Lick Lighter convinced

0:07:39.520 --> 0:07:43.240
<v Speaker 1>Fano to head up Project Mac, which would receive funding

0:07:43.400 --> 0:07:46.800
<v Speaker 1>from the I p t O through ARPA. But standing

0:07:46.800 --> 0:07:49.600
<v Speaker 1>in the way of this goal were the limitations I've

0:07:49.600 --> 0:07:52.840
<v Speaker 1>mentioned already. It's hard to make real progress if you're

0:07:52.880 --> 0:07:55.920
<v Speaker 1>limited to just one person working on one computer at

0:07:55.960 --> 0:07:58.680
<v Speaker 1>any given time, and so M I T sought out

0:07:58.680 --> 0:08:02.520
<v Speaker 1>proposals from companies like General Electric and IBM to develop

0:08:02.560 --> 0:08:05.800
<v Speaker 1>a computer system that could support multiple users through this

0:08:06.080 --> 0:08:10.480
<v Speaker 1>time sharing idea. Now, the basic idea behind time sharing

0:08:10.880 --> 0:08:14.080
<v Speaker 1>is that you have multiple workstations that all connect back

0:08:14.080 --> 0:08:17.760
<v Speaker 1>to the same computer. The workstations are all dummy terminals

0:08:17.840 --> 0:08:21.080
<v Speaker 1>or thin clients. The computer can only work on one

0:08:21.160 --> 0:08:23.360
<v Speaker 1>job at a time, but it can do so at

0:08:23.360 --> 0:08:26.480
<v Speaker 1>a pretty darn fast pace, and so as you run

0:08:26.480 --> 0:08:29.040
<v Speaker 1>a job at your workstation, the computer waits for a

0:08:29.080 --> 0:08:32.040
<v Speaker 1>break and its processing of other jobs, then slots your

0:08:32.120 --> 0:08:35.160
<v Speaker 1>job in that break and runs your job to you.

0:08:35.320 --> 0:08:37.439
<v Speaker 1>It's like you've got the full attention of the computer,

0:08:37.559 --> 0:08:40.400
<v Speaker 1>but in reality, the computer is actually switching back and

0:08:40.440 --> 0:08:44.280
<v Speaker 1>forth between users, finishing each job quickly before moving on

0:08:44.320 --> 0:08:46.920
<v Speaker 1>to the next one, rather than doing all the jobs

0:08:46.920 --> 0:08:49.480
<v Speaker 1>at the same time. The benefit of time sharing is

0:08:49.480 --> 0:08:52.320
<v Speaker 1>that it's as if you've increased the number of computers

0:08:52.360 --> 0:08:55.480
<v Speaker 1>by the number of workstations, and so more people can

0:08:55.520 --> 0:08:58.480
<v Speaker 1>take advantage of the computer than with older systems. You

0:08:58.559 --> 0:09:02.520
<v Speaker 1>reduce downtime, you increase efficiency, and more people can actually

0:09:02.520 --> 0:09:07.400
<v Speaker 1>get stuff done. IBM was initially not interested in working

0:09:07.400 --> 0:09:10.000
<v Speaker 1>with m I T. The company wasn't convinced that a

0:09:10.080 --> 0:09:12.520
<v Speaker 1>multi user computer was going to be that big of

0:09:12.559 --> 0:09:15.320
<v Speaker 1>a deal and that most of their customers would have

0:09:15.400 --> 0:09:18.840
<v Speaker 1>no need for such a computer. So rather than dedicate

0:09:18.880 --> 0:09:21.480
<v Speaker 1>the time and resources needed to develop something that the

0:09:21.520 --> 0:09:24.439
<v Speaker 1>company wasn't convinced would ever be an actual product, it

0:09:24.480 --> 0:09:27.080
<v Speaker 1>would just be a one off, they bowed out and

0:09:27.120 --> 0:09:30.040
<v Speaker 1>so ge became the vendor for the early days of

0:09:30.080 --> 0:09:33.720
<v Speaker 1>Project Mac. But over at IBM, minds were slowly changing.

0:09:33.800 --> 0:09:37.120
<v Speaker 1>The Project Mac contract was a big deal with a

0:09:37.120 --> 0:09:40.079
<v Speaker 1>lot of funding at that time, and then it became

0:09:40.120 --> 0:09:42.480
<v Speaker 1>known that Bell Labs was also looking out for a

0:09:42.520 --> 0:09:45.400
<v Speaker 1>system that would grant access to multiple users to a

0:09:45.400 --> 0:09:48.360
<v Speaker 1>computer at the same time, and this was enough for

0:09:48.400 --> 0:09:51.920
<v Speaker 1>the folks at IBM to say, huh, maybe we were wrong,

0:09:52.240 --> 0:09:54.040
<v Speaker 1>and they changed their minds and they put some work

0:09:54.040 --> 0:09:57.840
<v Speaker 1>into developing such a system. They created a prototype called

0:09:58.040 --> 0:10:03.120
<v Speaker 1>the c P forty mainframe computer. The computer never became

0:10:03.120 --> 0:10:06.720
<v Speaker 1>a product sold by IBM, but was used internally in

0:10:06.800 --> 0:10:10.360
<v Speaker 1>IBM S labs. But the CP forty will be really

0:10:10.400 --> 0:10:13.280
<v Speaker 1>important in our story because it was the starting point

0:10:13.360 --> 0:10:15.280
<v Speaker 1>for a journey that would take us to the first

0:10:15.320 --> 0:10:20.360
<v Speaker 1>commercial mainframe computer system that could support virtualization. The time

0:10:20.400 --> 0:10:25.000
<v Speaker 1>sharing approach involved sharing parts of a computer's processing capabilities,

0:10:25.280 --> 0:10:29.280
<v Speaker 1>such as its system memory or its storage, and sharing

0:10:29.320 --> 0:10:32.240
<v Speaker 1>that with each user. But this was not just useful,

0:10:32.280 --> 0:10:35.160
<v Speaker 1>it was also limiting. If something went wrong for one user,

0:10:35.600 --> 0:10:39.360
<v Speaker 1>it would affect everyone on that computer. Creating more meaningful

0:10:39.400 --> 0:10:43.360
<v Speaker 1>partitions that would isolate each user would be more useful. Now.

0:10:43.400 --> 0:10:47.839
<v Speaker 1>Typically we described this process as a hypervisor, or sometimes

0:10:47.880 --> 0:10:51.559
<v Speaker 1>as a control program. A hypervisor's job is to separate

0:10:51.600 --> 0:10:55.079
<v Speaker 1>the applications and operating system running on a computer from

0:10:55.120 --> 0:10:58.440
<v Speaker 1>the computer's actual hardware. There are a couple of different

0:10:58.440 --> 0:11:02.400
<v Speaker 1>types of hypervisors. Type one hypervisors are also known as

0:11:02.520 --> 0:11:06.400
<v Speaker 1>bare metal hypervisors because they exist in a layer that's

0:11:06.480 --> 0:11:09.600
<v Speaker 1>directly on top of a machine's hardware. Then you have

0:11:09.679 --> 0:11:13.880
<v Speaker 1>type two hypervisors that's a software layer that exists over

0:11:13.960 --> 0:11:18.200
<v Speaker 1>top the existing machines operating system, so there's an extra

0:11:18.360 --> 0:11:22.360
<v Speaker 1>layer of abstraction there. Now, through a hypervisor, a single

0:11:22.440 --> 0:11:26.760
<v Speaker 1>machine can host multiple virtual guest machines. This idea would

0:11:26.800 --> 0:11:30.880
<v Speaker 1>be further explored in the next phase, that of true virtualization,

0:11:31.320 --> 0:11:33.160
<v Speaker 1>which I'll get to in just a moment. But first

0:11:33.240 --> 0:11:43.800
<v Speaker 1>let's take a quick break. Okay, so we just got

0:11:43.800 --> 0:11:48.439
<v Speaker 1>into what you could think of as the prehistoric virtualization era,

0:11:48.679 --> 0:11:53.240
<v Speaker 1>with hypervisor technology just coming into development. IBM was at

0:11:53.240 --> 0:11:56.640
<v Speaker 1>the forefront of this research with the CP forty mainframe

0:11:56.720 --> 0:11:59.560
<v Speaker 1>system in the nineteen sixties. The system ran on a

0:11:59.600 --> 0:12:05.000
<v Speaker 1>special operating system called CP slash c MS, which originally

0:12:05.040 --> 0:12:10.240
<v Speaker 1>stood for Control Program slash Cambridge Monitor System, though later

0:12:10.280 --> 0:12:13.760
<v Speaker 1>CMS would change to mean Conversational Monitor System and I've

0:12:13.800 --> 0:12:16.200
<v Speaker 1>even seen a couple of other variants out there. The

0:12:16.240 --> 0:12:20.280
<v Speaker 1>control program part was what allowed for this early virtualization

0:12:20.440 --> 0:12:24.760
<v Speaker 1>in the CP forty. It effectively created a full virtualization

0:12:24.920 --> 0:12:28.200
<v Speaker 1>of the underlying hardware of the CP forty for each

0:12:28.400 --> 0:12:32.560
<v Speaker 1>virtual machine, so people on dumb terminals terminals that did

0:12:32.600 --> 0:12:36.319
<v Speaker 1>not have their own solely dedicated computer could have a

0:12:36.440 --> 0:12:40.280
<v Speaker 1>virtual computer at their disposal. All the work was actually

0:12:40.360 --> 0:12:43.719
<v Speaker 1>being done on top of the single CP forty prototype,

0:12:43.960 --> 0:12:45.800
<v Speaker 1>but to each user it was as if they had

0:12:45.880 --> 0:12:51.239
<v Speaker 1>access to their own individual computer. The virtualization software partitioned

0:12:51.320 --> 0:12:55.120
<v Speaker 1>computer assets to each user. This wasn't just a matter

0:12:55.240 --> 0:12:59.280
<v Speaker 1>of convenience. It also allowed for rapid innovation. Programmers could

0:12:59.320 --> 0:13:03.320
<v Speaker 1>work on their own virtual machines, creating applications without having

0:13:03.320 --> 0:13:07.120
<v Speaker 1>to worry about a bug affecting everyone else. The partitions

0:13:07.160 --> 0:13:10.880
<v Speaker 1>provided protection, so if you were plugging away on a

0:13:10.960 --> 0:13:14.679
<v Speaker 1>difficult section of code and your coworker fouled something up

0:13:14.679 --> 0:13:17.320
<v Speaker 1>on their virtual machine, you didn't have to worry about

0:13:17.400 --> 0:13:20.840
<v Speaker 1>their mistake bringing you down with them. Each virtual machine

0:13:21.080 --> 0:13:25.640
<v Speaker 1>acted like its own individual physical computer. You can see

0:13:25.679 --> 0:13:29.080
<v Speaker 1>some similarities between this model of computing and what would

0:13:29.120 --> 0:13:32.200
<v Speaker 1>come much later in the era of cloud computing and

0:13:32.240 --> 0:13:36.800
<v Speaker 1>the brief age of netbooks. Technically, netbooks are still around,

0:13:37.000 --> 0:13:41.760
<v Speaker 1>but they are no longer the heyday type device that

0:13:41.800 --> 0:13:44.920
<v Speaker 1>they were for a very short while. The netbook essentially

0:13:44.960 --> 0:13:47.360
<v Speaker 1>had a five year run from two thousand seven to

0:13:47.400 --> 0:13:51.520
<v Speaker 1>two thousand twelve, and it's a category of lightweight laptop

0:13:51.559 --> 0:13:55.800
<v Speaker 1>computers that had modest specifications because the real purpose of

0:13:55.800 --> 0:13:58.760
<v Speaker 1>the computer was to use cloud based services. You didn't

0:13:58.800 --> 0:14:01.960
<v Speaker 1>have to have a b E fee computer because most

0:14:01.960 --> 0:14:05.320
<v Speaker 1>of the processing was taking place somewhere else. The netbooks

0:14:05.320 --> 0:14:07.920
<v Speaker 1>were a type of thin client, kind of like those

0:14:08.000 --> 0:14:11.920
<v Speaker 1>dummy terminals used in time sharing mainframe systems. You didn't

0:14:11.960 --> 0:14:14.000
<v Speaker 1>have to have a lot of horsepower. You just needed

0:14:14.040 --> 0:14:18.719
<v Speaker 1>input devices like a keyboard and output devices like a display,

0:14:18.760 --> 0:14:21.520
<v Speaker 1>and the actual computing was happening on some other machine

0:14:21.560 --> 0:14:24.080
<v Speaker 1>out on the internet. We'll talk about that more a

0:14:24.120 --> 0:14:27.920
<v Speaker 1>bit later in this episode. So while work on and

0:14:28.040 --> 0:14:31.640
<v Speaker 1>with the CP forty system was going, IBM researchers were

0:14:31.680 --> 0:14:34.840
<v Speaker 1>looking into other breakthroughs that would become important for computers

0:14:34.840 --> 0:14:39.120
<v Speaker 1>in general and virtualization in particular. In nineteen sixty five,

0:14:39.200 --> 0:14:42.240
<v Speaker 1>IBM announced it was developing a thirty two bit central

0:14:42.280 --> 0:14:46.360
<v Speaker 1>processing unit that included virtual memory hardware in it. This

0:14:46.480 --> 0:14:50.920
<v Speaker 1>was called the IBM System SLASH three sixty. IBM researchers

0:14:51.000 --> 0:14:54.560
<v Speaker 1>used what they learned developing the CP forty to create

0:14:54.640 --> 0:14:58.000
<v Speaker 1>the CP sixty seven, which was built on this IBM

0:14:58.040 --> 0:15:02.560
<v Speaker 1>system Slash three sixty DASH sixties seven hardware. I love

0:15:02.640 --> 0:15:06.200
<v Speaker 1>these names, by the way, there's so much fun to say. Anyway,

0:15:06.360 --> 0:15:09.040
<v Speaker 1>this would be the first computer to support virtualization that

0:15:09.040 --> 0:15:12.880
<v Speaker 1>would actually be widely available as a commercial product, not

0:15:12.960 --> 0:15:16.880
<v Speaker 1>just a prototype. This was an important component for mainframe users,

0:15:17.160 --> 0:15:20.760
<v Speaker 1>but it wouldn't really transfer to micro or mini computers.

0:15:20.960 --> 0:15:23.000
<v Speaker 1>So this is still in the main frame age where

0:15:23.000 --> 0:15:26.480
<v Speaker 1>you have the big centralized computer, and it's not that

0:15:26.560 --> 0:15:29.240
<v Speaker 1>big of a surprise. You know, a mainframe is a

0:15:29.280 --> 0:15:33.960
<v Speaker 1>centralized machine, but later computers didn't necessarily follow that model. Instead,

0:15:34.200 --> 0:15:36.640
<v Speaker 1>you could have a computer at your own desk. The

0:15:36.680 --> 0:15:39.800
<v Speaker 1>need to partition and separate your machine from everyone else

0:15:40.200 --> 0:15:43.200
<v Speaker 1>wasn't as pressing since you were working on an actual

0:15:43.320 --> 0:15:47.800
<v Speaker 1>separate piece of hardware rather than sharing a centralized computer

0:15:47.920 --> 0:15:51.440
<v Speaker 1>amongst everybody else, and the hardware you were using was

0:15:51.480 --> 0:15:54.000
<v Speaker 1>capable enough to do whatever it was you were doing.

0:15:54.400 --> 0:15:57.800
<v Speaker 1>Majorization reached the point where it was possible to produce

0:15:57.840 --> 0:16:01.760
<v Speaker 1>a relatively small computer, especially compared to the giant mainframes

0:16:01.840 --> 0:16:04.480
<v Speaker 1>of the nineteen fifties and nineteen sixties, and it could

0:16:04.520 --> 0:16:07.440
<v Speaker 1>handle all the tasks that your average user could throw

0:16:07.480 --> 0:16:09.760
<v Speaker 1>at it. So we started to see a shift away

0:16:09.880 --> 0:16:13.480
<v Speaker 1>from this centralized model of the mainframe strategy to a

0:16:13.680 --> 0:16:17.000
<v Speaker 1>decentralized approach in which everyone would work on their own

0:16:17.080 --> 0:16:20.800
<v Speaker 1>separate machine. This would continue and accelerate in the mid

0:16:20.840 --> 0:16:24.440
<v Speaker 1>to late nineteen seventies when the personal computer emerged and

0:16:24.480 --> 0:16:27.400
<v Speaker 1>the general public began to dip their proverbial toe in

0:16:27.440 --> 0:16:31.600
<v Speaker 1>the computational pool or something. Now that's not to say

0:16:31.640 --> 0:16:35.880
<v Speaker 1>that all work on virtualization stopped completely in the nineteen seventies.

0:16:36.120 --> 0:16:38.960
<v Speaker 1>It certainly didn't speed up, and it pretty much remained

0:16:39.000 --> 0:16:43.480
<v Speaker 1>in the domain of mainframe computers, which still had their uses,

0:16:43.520 --> 0:16:47.760
<v Speaker 1>but in niche cases, in fact increasingly niche cases. So

0:16:47.840 --> 0:16:50.960
<v Speaker 1>whether they were legacy systems that companies depended upon to

0:16:51.040 --> 0:16:54.600
<v Speaker 1>keep business going, or they were more powerful machines that

0:16:54.640 --> 0:16:57.560
<v Speaker 1>could be realized in the smaller formats. You know, they

0:16:57.560 --> 0:17:00.400
<v Speaker 1>were these powerful machines that were being used are very

0:17:00.440 --> 0:17:04.159
<v Speaker 1>specific tasks. They still had a place, it was just

0:17:04.320 --> 0:17:08.400
<v Speaker 1>a reduced place, and that was pretty much where virtualization

0:17:08.480 --> 0:17:12.439
<v Speaker 1>was stuck until the mid nineteen eighties. That's when a

0:17:12.440 --> 0:17:17.280
<v Speaker 1>company called Locust Computing Corporation developed special software in collaboration

0:17:17.320 --> 0:17:20.000
<v Speaker 1>with A T and T for a computer called the

0:17:20.080 --> 0:17:24.399
<v Speaker 1>A T and T sixty three hundred plus. The computers

0:17:24.440 --> 0:17:28.560
<v Speaker 1>operating system was Unix s v R two. Now, the

0:17:28.600 --> 0:17:31.800
<v Speaker 1>thing about Unix is. It's an operating system that can

0:17:31.800 --> 0:17:36.520
<v Speaker 1>support Unix programs, but it couldn't run DOSS based programs

0:17:36.560 --> 0:17:38.600
<v Speaker 1>on its own. And for those of you who aren't

0:17:38.600 --> 0:17:42.320
<v Speaker 1>familiar with DOSS, it was the text based operating system

0:17:42.400 --> 0:17:45.399
<v Speaker 1>used by many computers. There were lots of different flavors

0:17:45.440 --> 0:17:49.200
<v Speaker 1>of DOSS um Apple had its own sort of version,

0:17:49.280 --> 0:17:52.359
<v Speaker 1>but the one that everyone really knew was IMMAs DOSS,

0:17:52.480 --> 0:17:55.920
<v Speaker 1>the Microsoft flavor of DOSS that was the most popular

0:17:56.040 --> 0:17:58.719
<v Speaker 1>version of the text based operating system out there for

0:17:58.760 --> 0:18:02.399
<v Speaker 1>IBM and IBM comp udible machines. So there are a

0:18:02.400 --> 0:18:06.880
<v Speaker 1>lot of programs developed for MS DOSS and DAWs in general,

0:18:07.240 --> 0:18:10.120
<v Speaker 1>but you couldn't run them on a Unix based device.

0:18:10.520 --> 0:18:14.119
<v Speaker 1>So Locus developed some software that would handle the interaction

0:18:14.480 --> 0:18:18.840
<v Speaker 1>between DOSS programs designed for the eight eight six instruction

0:18:18.920 --> 0:18:24.280
<v Speaker 1>set that DOSS programs were reliant upon and the underlying

0:18:24.400 --> 0:18:27.560
<v Speaker 1>Unix operating system, so it's kind of like a liaison

0:18:27.640 --> 0:18:30.879
<v Speaker 1>between those. The software have become known as MERGE and

0:18:30.920 --> 0:18:33.960
<v Speaker 1>would be one of the first virtual machine managing or

0:18:34.080 --> 0:18:37.800
<v Speaker 1>VMM products on the market. So now you could have

0:18:37.840 --> 0:18:40.560
<v Speaker 1>a Unix machine and still run DOSS programs on top

0:18:40.600 --> 0:18:44.320
<v Speaker 1>of it. By having this virtual DOSS machine running on

0:18:44.400 --> 0:18:47.840
<v Speaker 1>the Unix hardware. This would mark a new era in

0:18:47.880 --> 0:18:51.119
<v Speaker 1>which companies would make software that would allow computers running

0:18:51.160 --> 0:18:54.120
<v Speaker 1>on one type of operating system in hardware to run

0:18:54.160 --> 0:18:57.600
<v Speaker 1>an instance of a different operating system, and it opened

0:18:57.680 --> 0:19:00.879
<v Speaker 1>up access to other types of programs. Most of us

0:19:01.359 --> 0:19:05.040
<v Speaker 1>don't tend to work on Unix systems. But what about

0:19:05.119 --> 0:19:09.040
<v Speaker 1>max versus PCs. You know that a Mac computer can't

0:19:09.160 --> 0:19:12.800
<v Speaker 1>run a DOSS or later on a Windows program, and

0:19:12.920 --> 0:19:17.560
<v Speaker 1>vice versa Windows computer can't run a Mac program. But

0:19:17.640 --> 0:19:21.600
<v Speaker 1>developers created virtual machine software that would allow a Macintosh

0:19:21.600 --> 0:19:25.600
<v Speaker 1>computer to run a virtual instance of DOSS on a Mac,

0:19:25.880 --> 0:19:29.080
<v Speaker 1>meaning you could access those DOSS programs on a Macintosh

0:19:29.240 --> 0:19:32.400
<v Speaker 1>while running this virtual machine software. Suddenly you could take

0:19:32.400 --> 0:19:35.959
<v Speaker 1>advantage of programs meant for another type of computer on

0:19:36.000 --> 0:19:39.439
<v Speaker 1>your own machine. By the way, it probably comes as

0:19:39.520 --> 0:19:41.760
<v Speaker 1>very little surprised to those of you who are familiar

0:19:41.800 --> 0:19:44.840
<v Speaker 1>with Apple that the company was not a fan of

0:19:44.880 --> 0:19:49.240
<v Speaker 1>anyone running the Mac operating system on a non Apple machine.

0:19:49.920 --> 0:19:54.119
<v Speaker 1>Through virtualization. This was technically possible, but Apple maintained that

0:19:54.160 --> 0:19:56.960
<v Speaker 1>the only legal way to do it was to run

0:19:57.080 --> 0:20:00.840
<v Speaker 1>mac os on a virtual platform on top of another

0:20:01.000 --> 0:20:04.440
<v Speaker 1>Apple branded computer. So why would you want to run

0:20:04.520 --> 0:20:07.320
<v Speaker 1>a virtual version of mac OS on top of a

0:20:07.359 --> 0:20:11.520
<v Speaker 1>computer already running Mac OS. One reason would be to

0:20:11.600 --> 0:20:15.399
<v Speaker 1>test a new program against multiple versions of a single

0:20:15.520 --> 0:20:18.640
<v Speaker 1>operating system. So you might want to run your new

0:20:18.720 --> 0:20:22.439
<v Speaker 1>mac program against the latest version of Mac OS and

0:20:22.440 --> 0:20:24.800
<v Speaker 1>then the previous versions of Mac OS to see if

0:20:24.840 --> 0:20:28.000
<v Speaker 1>it's still compatible, making sure you have backwards compatibility written

0:20:28.000 --> 0:20:31.280
<v Speaker 1>in there. That would be handy to know. For about

0:20:31.280 --> 0:20:34.680
<v Speaker 1>a decade, that was the state of virtualization. Companies made

0:20:34.680 --> 0:20:38.159
<v Speaker 1>programs that would allow users to run one operating system

0:20:38.240 --> 0:20:41.399
<v Speaker 1>on top of a machine running a different operating system.

0:20:41.400 --> 0:20:44.119
<v Speaker 1>It was useful for people who were developing software for

0:20:44.160 --> 0:20:47.960
<v Speaker 1>other platforms, but beyond that, there wasn't much general use

0:20:48.040 --> 0:20:50.800
<v Speaker 1>for it, because, again, everyone was relying on their own

0:20:50.800 --> 0:20:53.960
<v Speaker 1>individual computers anyway, you didn't have to worry about creating

0:20:53.960 --> 0:20:57.160
<v Speaker 1>partitions between users for the most part. There were other

0:20:57.240 --> 0:21:00.119
<v Speaker 1>manifestations of virtualization that would come on the scene a

0:21:00.160 --> 0:21:03.359
<v Speaker 1>little bit later. In the early nineteen nineties, a team

0:21:03.400 --> 0:21:06.640
<v Speaker 1>at Sun Microsystems was hard at work developing a new

0:21:06.680 --> 0:21:11.600
<v Speaker 1>programming language that would eventually take on the name Java. Initially,

0:21:12.000 --> 0:21:15.000
<v Speaker 1>the idea was that this programming language would allow developers

0:21:15.040 --> 0:21:19.240
<v Speaker 1>to create programs running on home appliances like television's. The

0:21:19.280 --> 0:21:21.800
<v Speaker 1>need for a language that developers could use to create

0:21:21.840 --> 0:21:25.960
<v Speaker 1>programs for different platforms was obvious because these appliances would

0:21:25.960 --> 0:21:28.760
<v Speaker 1>be coming from different manufacturers who would be working with

0:21:28.880 --> 0:21:32.760
<v Speaker 1>different microprocessor companies, so there was no guarantee that televisions

0:21:32.760 --> 0:21:36.280
<v Speaker 1>from two different companies would have similar microchips in them. Now,

0:21:36.320 --> 0:21:39.400
<v Speaker 1>this is a non trivial problem. If you are a programmer,

0:21:39.640 --> 0:21:42.080
<v Speaker 1>you have to make some practical decisions that have little

0:21:42.119 --> 0:21:44.879
<v Speaker 1>to do with the actual purpose of your application, and

0:21:44.920 --> 0:21:49.360
<v Speaker 1>one of those decisions is what platform will I develop for. Frequently,

0:21:49.400 --> 0:21:52.440
<v Speaker 1>the answer that many developers gravitate toward is I want

0:21:52.480 --> 0:21:55.680
<v Speaker 1>to develop for the most popular platform out there because

0:21:55.680 --> 0:21:59.000
<v Speaker 1>it represents the largest potential customer base. To put it

0:21:59.000 --> 0:22:01.520
<v Speaker 1>in another way, let's say you're making a video game,

0:22:01.840 --> 0:22:04.119
<v Speaker 1>and let's say there's only two consoles that are on

0:22:04.160 --> 0:22:08.119
<v Speaker 1>the market. One of those consoles has a market share

0:22:08.280 --> 0:22:11.000
<v Speaker 1>and the other has a ten market share, and they're

0:22:11.000 --> 0:22:14.000
<v Speaker 1>both great game consoles, but you're more likely to focus

0:22:14.040 --> 0:22:15.760
<v Speaker 1>on developing the game for the one that has the

0:22:16.680 --> 0:22:19.480
<v Speaker 1>market share because that's where most of the gamers are.

0:22:19.920 --> 0:22:22.320
<v Speaker 1>But one if you could create a programming language that

0:22:22.359 --> 0:22:27.440
<v Speaker 1>could work on different platforms despite the underlying hardware, That

0:22:27.520 --> 0:22:31.760
<v Speaker 1>was the idea behind Java. So programmer James Gosling and

0:22:31.880 --> 0:22:34.359
<v Speaker 1>his team set out to create a programming language that

0:22:34.400 --> 0:22:37.280
<v Speaker 1>could work on top of any device that was running

0:22:37.320 --> 0:22:41.200
<v Speaker 1>a Java virtual machine. While the resulting language wasn't used

0:22:41.200 --> 0:22:44.359
<v Speaker 1>in TVs at that time, it quickly became recognized as

0:22:44.359 --> 0:22:46.919
<v Speaker 1>a valuable tool for web development by the time the

0:22:47.040 --> 0:22:51.760
<v Speaker 1>Java Development Kit debuted in By then, the web was

0:22:51.800 --> 0:22:54.680
<v Speaker 1>really starting to take off, but it was also pretty limited.

0:22:54.720 --> 0:22:58.040
<v Speaker 1>All sorts of computers were acting as servers on the Internet,

0:22:58.240 --> 0:23:01.080
<v Speaker 1>running on different hardware and using for an operating systems,

0:23:01.359 --> 0:23:04.800
<v Speaker 1>and there was a need for more dynamic, interesting, rich

0:23:04.880 --> 0:23:08.320
<v Speaker 1>experiences online. But with everyone running different systems, it was

0:23:08.359 --> 0:23:11.520
<v Speaker 1>impossible to guarantee that a web app would work for everyone.

0:23:12.200 --> 0:23:15.880
<v Speaker 1>Java helped take that pressure off. It was a right, once,

0:23:16.080 --> 0:23:20.359
<v Speaker 1>run anywhere programming language, and so the language was adopted

0:23:20.400 --> 0:23:23.919
<v Speaker 1>widely on the web, with web browsers building Java applets

0:23:23.960 --> 0:23:27.920
<v Speaker 1>to support it within the browser itself. This virtualization made

0:23:28.040 --> 0:23:32.040
<v Speaker 1>rich Internet experiences possible. As it turns out the Internet

0:23:32.119 --> 0:23:35.000
<v Speaker 1>in general and the Web in particular would create the

0:23:35.160 --> 0:23:39.600
<v Speaker 1>perfect environment for the evolution of virtualization. This appeals to

0:23:39.680 --> 0:23:43.480
<v Speaker 1>common sense. After all, the Internet is a network of networks,

0:23:43.520 --> 0:23:47.119
<v Speaker 1>and each network can potentially include millions of computers running

0:23:47.119 --> 0:23:51.600
<v Speaker 1>on different operating systems and hardware. This makes common sense, right,

0:23:51.640 --> 0:23:54.119
<v Speaker 1>after all, being Internet is a network of networks, and

0:23:54.160 --> 0:23:57.240
<v Speaker 1>each network can potentially include millions of computers running on

0:23:57.240 --> 0:24:00.440
<v Speaker 1>different operating systems and hardware. When we come back, I'll

0:24:00.480 --> 0:24:03.440
<v Speaker 1>talk about how virtualization really took off in the late

0:24:03.520 --> 0:24:06.760
<v Speaker 1>nineties and what's been going on up to today. But

0:24:06.880 --> 0:24:16.840
<v Speaker 1>first let's take a quick break. In a way, you

0:24:16.920 --> 0:24:21.000
<v Speaker 1>could say that the Internet made the evolution of virtualization

0:24:21.080 --> 0:24:25.760
<v Speaker 1>not just possible but necessary. Typically, I T departments like

0:24:25.880 --> 0:24:29.600
<v Speaker 1>to dedicate servers to a specific task. They handle that

0:24:29.720 --> 0:24:34.080
<v Speaker 1>one task and nothing else. This dedication helps keep things

0:24:34.200 --> 0:24:37.560
<v Speaker 1>streamlined and reduces the chance that different tasks will start

0:24:37.560 --> 0:24:41.480
<v Speaker 1>to interfere with one another and cost stability issues. But

0:24:41.600 --> 0:24:45.120
<v Speaker 1>as the Internet was growing faster and faster, it became

0:24:45.480 --> 0:24:49.280
<v Speaker 1>clear that this particular strategy was going to be unsustainable.

0:24:49.400 --> 0:24:53.119
<v Speaker 1>It was just getting too big and too complex. Servers

0:24:53.280 --> 0:24:57.160
<v Speaker 1>are expensive and they're not just expensive to purchase, they're

0:24:57.160 --> 0:25:01.160
<v Speaker 1>also expensive to operate and maintain. If you're dedicating a

0:25:01.240 --> 0:25:05.240
<v Speaker 1>single server to every single task and you're adding to

0:25:05.320 --> 0:25:08.200
<v Speaker 1>the number of services you have on offer, your server

0:25:08.320 --> 0:25:11.720
<v Speaker 1>room is going to get really crowded really quickly. Those

0:25:11.760 --> 0:25:14.960
<v Speaker 1>machines take up physical space. Then you have other considerations

0:25:14.960 --> 0:25:17.240
<v Speaker 1>you have to take into account, such as having a

0:25:17.280 --> 0:25:21.480
<v Speaker 1>sufficient cooling system to keep everything operational, because computers don't

0:25:21.480 --> 0:25:24.479
<v Speaker 1>do well when they overheat, and as you add more machines,

0:25:24.520 --> 0:25:26.840
<v Speaker 1>you're generating more and more heat, so you've got to

0:25:26.920 --> 0:25:30.480
<v Speaker 1>cool them down more effectively. Then you have to figure

0:25:30.520 --> 0:25:34.720
<v Speaker 1>out how much electricity these things are gobbling up. It's

0:25:35.080 --> 0:25:38.320
<v Speaker 1>it's getting more expensive as you're adding more servers, and

0:25:38.320 --> 0:25:40.960
<v Speaker 1>and then there's the question of downtime. It's quite possible

0:25:41.000 --> 0:25:44.919
<v Speaker 1>that some servers will be in less demand than others.

0:25:45.200 --> 0:25:48.080
<v Speaker 1>So you might have one server operating at about fifteen

0:25:48.160 --> 0:25:51.560
<v Speaker 1>percent of its overall capacity and it's essentially idling the

0:25:51.600 --> 0:25:55.800
<v Speaker 1>other of the day. That's not an efficient use of resources.

0:25:56.040 --> 0:25:58.959
<v Speaker 1>If you've got fifty servers but all of them are

0:25:59.000 --> 0:26:02.080
<v Speaker 1>working at fifteen percent, you're saying, Wow, I'm I'm really

0:26:02.320 --> 0:26:07.360
<v Speaker 1>inefficient with how I'm using these machines. Virtualization would prove

0:26:07.440 --> 0:26:10.600
<v Speaker 1>to be a solution to this problem, but it wasn't

0:26:10.760 --> 0:26:16.359
<v Speaker 1>an easy solution. One of the big challenges facing developers

0:26:16.359 --> 0:26:19.840
<v Speaker 1>at that time was that the X eight six architecture

0:26:20.040 --> 0:26:24.600
<v Speaker 1>that many modern computers rely upon wasn't designed with virtualization

0:26:24.640 --> 0:26:28.199
<v Speaker 1>in mind, and there were some hurdles to overcome. And

0:26:28.240 --> 0:26:31.040
<v Speaker 1>you may have heard of X eight six and maybe

0:26:31.160 --> 0:26:33.720
<v Speaker 1>you wonder what the heck does that actually mean. It's

0:26:33.720 --> 0:26:38.560
<v Speaker 1>a reference to Intel's eight eighty six microprocessor, which originally

0:26:38.600 --> 0:26:43.280
<v Speaker 1>debuted in ninety eight. The eight eight six architecture is

0:26:43.320 --> 0:26:47.639
<v Speaker 1>the foundation for successive processors such as the two eighty six,

0:26:47.920 --> 0:26:50.160
<v Speaker 1>the e D three eighty six, and the eight four

0:26:50.200 --> 0:26:52.480
<v Speaker 1>eighty six. So if you ever heard someone talking about

0:26:52.480 --> 0:26:55.680
<v Speaker 1>like a three eight six or forty six computer, they

0:26:55.680 --> 0:26:58.959
<v Speaker 1>were actually talking about this particular architecture. It's a computer

0:26:59.040 --> 0:27:03.560
<v Speaker 1>that's based off this microprocessor architecture, which was largely designed

0:27:03.600 --> 0:27:06.919
<v Speaker 1>so that it could be backwards compatible while adding to

0:27:07.200 --> 0:27:11.639
<v Speaker 1>the various features and the processing speed generation to generation.

0:27:12.160 --> 0:27:16.600
<v Speaker 1>More importantly, it became the dominant architecture for computing platforms,

0:27:17.080 --> 0:27:22.520
<v Speaker 1>including Internet servers. But as I said that architecture was

0:27:22.640 --> 0:27:26.240
<v Speaker 1>not created with virtualization in mind, and there were several

0:27:26.359 --> 0:27:30.440
<v Speaker 1>key instructions that, when virtualized, would tend to cause an

0:27:30.600 --> 0:27:34.480
<v Speaker 1>X eight six system to crash. So while there was

0:27:34.520 --> 0:27:38.040
<v Speaker 1>a growing need for virtualization as the Internet was growing,

0:27:38.640 --> 0:27:42.960
<v Speaker 1>there was this challenge of implementing virtualization without actually making

0:27:43.000 --> 0:27:47.520
<v Speaker 1>everything crash all the time. Enter vm Ware. Now I'll

0:27:47.560 --> 0:27:50.239
<v Speaker 1>have to do a full episode on the company a

0:27:50.320 --> 0:27:55.760
<v Speaker 1>vm Ware someday. It's known for its virtualization software. In

0:27:55.800 --> 0:27:59.879
<v Speaker 1>two thousand one, vm Ware would introduce virtualization platforms for

0:28:00.000 --> 0:28:03.639
<v Speaker 1>Internet servers that handled the operations of virtualization in a

0:28:03.680 --> 0:28:07.000
<v Speaker 1>way that wouldn't trigger these system crashes. So now you

0:28:07.040 --> 0:28:11.840
<v Speaker 1>could run virtualization software on X eight six architecture systems

0:28:12.200 --> 0:28:16.240
<v Speaker 1>and not have to worry about them just completely crapping

0:28:16.240 --> 0:28:19.480
<v Speaker 1>out on you at a moment's notice. At first, the

0:28:19.480 --> 0:28:22.119
<v Speaker 1>products were actually slow to catch on It was not

0:28:22.240 --> 0:28:25.560
<v Speaker 1>yet apparent how useful they would be, but that would change,

0:28:25.720 --> 0:28:28.920
<v Speaker 1>and vm Ware's early entry into the space would mean

0:28:28.960 --> 0:28:31.720
<v Speaker 1>that the company would end up holding a dominant portion

0:28:32.160 --> 0:28:36.359
<v Speaker 1>of the virtualization market even as other software companies caught

0:28:36.440 --> 0:28:40.400
<v Speaker 1>onto it. Now, to avoid this episode just becoming a

0:28:40.480 --> 0:28:45.160
<v Speaker 1>list of release dates, for virtualization software. I'm gonna summarize

0:28:45.200 --> 0:28:48.360
<v Speaker 1>this to say that companies like Virtue Tech, A M

0:28:48.440 --> 0:28:54.200
<v Speaker 1>D Connectics, Virtus, Sun, and then later Oracle when it

0:28:54.240 --> 0:28:58.600
<v Speaker 1>would buy Sun Microsystems, also Microsoft itself, all of them

0:28:58.640 --> 0:29:03.240
<v Speaker 1>released various virtual realization solutions over the years. Some were

0:29:03.240 --> 0:29:06.240
<v Speaker 1>built to take advantage of changes in architecture, such as

0:29:06.400 --> 0:29:11.120
<v Speaker 1>sixty four bit instruction sets. But beyond these technical specifications,

0:29:11.160 --> 0:29:13.720
<v Speaker 1>there's not really that much to talk about. So I

0:29:13.720 --> 0:29:15.719
<v Speaker 1>think it's better to go back to a broad picture,

0:29:15.760 --> 0:29:19.520
<v Speaker 1>because otherwise, all I'm telling you is that the virtualization

0:29:19.600 --> 0:29:23.680
<v Speaker 1>software improved so that it could take advantage of improvements

0:29:23.920 --> 0:29:29.000
<v Speaker 1>in microprocessor design. That gets really boring really fast. So

0:29:29.440 --> 0:29:33.920
<v Speaker 1>how did virtualization actually help in the Internet age? Well,

0:29:33.920 --> 0:29:37.840
<v Speaker 1>by using this special software and I T admin could

0:29:37.840 --> 0:29:42.520
<v Speaker 1>take a single existing Internet server and then create multiple

0:29:42.640 --> 0:29:46.400
<v Speaker 1>virtual servers, and then each virtual server would perform as

0:29:46.440 --> 0:29:49.120
<v Speaker 1>if it was its own physical machine, similar to the

0:29:49.160 --> 0:29:52.880
<v Speaker 1>way previous implementations of virtualization would do. But you know,

0:29:52.880 --> 0:29:54.960
<v Speaker 1>in those cases you were talking about running a different

0:29:55.000 --> 0:29:57.760
<v Speaker 1>operating system on top of a machine or something like that.

0:29:58.840 --> 0:30:01.320
<v Speaker 1>But in this case, all of the virtual servers would

0:30:01.360 --> 0:30:04.480
<v Speaker 1>exist on top of a single device, and with careful planning,

0:30:04.680 --> 0:30:07.600
<v Speaker 1>you can build out virtual servers to make each physical

0:30:07.640 --> 0:30:12.320
<v Speaker 1>machine more efficient by run making it run closer to capacity. Right,

0:30:12.360 --> 0:30:15.600
<v Speaker 1>so instead of running at capacity, you might have it

0:30:15.720 --> 0:30:18.520
<v Speaker 1>running at seventy or eighty percent capacity. Now, you never

0:30:18.600 --> 0:30:22.000
<v Speaker 1>really want to run at full capacity because you could

0:30:22.000 --> 0:30:24.680
<v Speaker 1>have response time issues if they're if the demand is

0:30:25.000 --> 0:30:29.960
<v Speaker 1>exceeding the server's ability to serve up data, then you're

0:30:29.960 --> 0:30:33.600
<v Speaker 1>gonna have performance problems. But if you could get it

0:30:33.880 --> 0:30:37.560
<v Speaker 1>closer to capacity, then you have less downtime for your

0:30:37.600 --> 0:30:40.239
<v Speaker 1>machine and you're making better use of your equipment. And

0:30:40.280 --> 0:30:44.280
<v Speaker 1>with the right virtual machine management software, each individual virtual

0:30:44.360 --> 0:30:48.240
<v Speaker 1>server is totally partitioned from the others, which helps you

0:30:48.280 --> 0:30:52.640
<v Speaker 1>maintain security and stability. If one virtual server does go down,

0:30:52.720 --> 0:30:55.600
<v Speaker 1>the other virtual servers on top of that same physical

0:30:55.640 --> 0:30:59.520
<v Speaker 1>machine should be able to continue to operate without being affected.

0:30:59.640 --> 0:31:03.720
<v Speaker 1>So let's say you're a company and you have four

0:31:03.760 --> 0:31:07.520
<v Speaker 1>different apps. This is just a very basic example. So

0:31:07.600 --> 0:31:10.160
<v Speaker 1>you've got a server and you divided it into four

0:31:10.280 --> 0:31:13.080
<v Speaker 1>virtual servers, and then one of your virtual servers for

0:31:13.160 --> 0:31:15.880
<v Speaker 1>one of those apps fails, the other three apps should

0:31:15.880 --> 0:31:18.720
<v Speaker 1>still be able to operate just fine. Meanwhile, you've got

0:31:18.720 --> 0:31:22.280
<v Speaker 1>an I T admin frantically trying to fix the problem

0:31:22.320 --> 0:31:24.840
<v Speaker 1>on the virtual server of the affected app and get

0:31:24.880 --> 0:31:28.080
<v Speaker 1>it back online as fast as possible. But ideally you're

0:31:28.120 --> 0:31:30.640
<v Speaker 1>doing this in a way where your other operations aren't

0:31:30.680 --> 0:31:33.400
<v Speaker 1>being affected at all. So not only could you get

0:31:33.440 --> 0:31:36.200
<v Speaker 1>better use out of your hardware using virtualization, you could

0:31:36.200 --> 0:31:39.000
<v Speaker 1>also reduce the number of physical servers you had in

0:31:39.040 --> 0:31:42.600
<v Speaker 1>your data centers, and this would become increasingly important as

0:31:42.600 --> 0:31:45.480
<v Speaker 1>cloud services came on the scene and grew in popularity.

0:31:45.760 --> 0:31:49.600
<v Speaker 1>A large cloud service, whether it's offering an operational platform,

0:31:49.840 --> 0:31:53.400
<v Speaker 1>or storage space or something else, requires an awful lot

0:31:53.440 --> 0:31:56.560
<v Speaker 1>of hardware, but that requirement would be gargantuan if it

0:31:56.600 --> 0:32:00.480
<v Speaker 1>weren't for virtualization. For example, one of the many important

0:32:00.520 --> 0:32:05.680
<v Speaker 1>concepts in computing is redundancy. That is, making sure the

0:32:05.680 --> 0:32:08.440
<v Speaker 1>service you offer remains available even in the event of

0:32:08.480 --> 0:32:10.760
<v Speaker 1>a failure in the system. And this is true for

0:32:10.840 --> 0:32:13.920
<v Speaker 1>all sorts of services, but it's probably easiest to understand

0:32:13.960 --> 0:32:15.680
<v Speaker 1>if we take something that most of us have had

0:32:15.720 --> 0:32:19.000
<v Speaker 1>experience with. So let's talk about cloud storage. Let's say

0:32:19.000 --> 0:32:22.800
<v Speaker 1>you're using an online data storage service like Google Drive,

0:32:22.960 --> 0:32:26.200
<v Speaker 1>so you've stored some files on Google Drive. You've created

0:32:26.280 --> 0:32:30.840
<v Speaker 1>numerous documents, or you've uploaded files into your personal Google Drive,

0:32:30.920 --> 0:32:33.280
<v Speaker 1>and you expect to be able to access those files

0:32:33.880 --> 0:32:36.680
<v Speaker 1>whenever and wherever you need them, assuming you have some

0:32:36.720 --> 0:32:39.360
<v Speaker 1>sort of Internet connection, and you know that your files

0:32:39.400 --> 0:32:42.040
<v Speaker 1>are not living on your own personal computer or device.

0:32:42.360 --> 0:32:45.000
<v Speaker 1>It's living on the cloud, so you can use whatever

0:32:45.040 --> 0:32:48.320
<v Speaker 1>device you want to connect to those files. So the

0:32:48.320 --> 0:32:52.000
<v Speaker 1>files live somewhere on some server that is owned and

0:32:52.040 --> 0:32:55.440
<v Speaker 1>operated by Google, and that's partly true, but it's more

0:32:55.520 --> 0:32:59.560
<v Speaker 1>accurate to say that those files live on multiple servers

0:33:00.000 --> 0:33:03.840
<v Speaker 1>and and operated by Google, because hardware occasionally fails, and

0:33:03.840 --> 0:33:06.120
<v Speaker 1>if that were to happen to the machine that's holding

0:33:06.200 --> 0:33:09.080
<v Speaker 1>your files, you wouldn't be able to get to your stuff,

0:33:09.400 --> 0:33:11.160
<v Speaker 1>and that would be a problem for you and thus

0:33:11.200 --> 0:33:14.200
<v Speaker 1>a problem for Google. So to avoid that, Google has

0:33:14.280 --> 0:33:17.800
<v Speaker 1>copies of all of your files, and it's spread across

0:33:18.120 --> 0:33:22.560
<v Speaker 1>numerous servers to provide redundancy. If one server should fail,

0:33:22.880 --> 0:33:25.440
<v Speaker 1>Google can switch to a different one to serve up

0:33:25.480 --> 0:33:27.760
<v Speaker 1>your files to you when you request them, and you

0:33:27.800 --> 0:33:30.000
<v Speaker 1>get what you want and you're none the wiser that

0:33:30.120 --> 0:33:33.800
<v Speaker 1>anything is wrong on the back end. Redundancy is important

0:33:33.800 --> 0:33:37.600
<v Speaker 1>for any online service, and virtualization can help reduce the

0:33:37.680 --> 0:33:41.880
<v Speaker 1>physical hardware requirements for redundancy. So now, let's say you're

0:33:41.920 --> 0:33:46.120
<v Speaker 1>the one that's running Google Drive. It's it's under your direction,

0:33:46.760 --> 0:33:50.080
<v Speaker 1>and while you'd be using virtual servers, you would likely

0:33:50.080 --> 0:33:53.240
<v Speaker 1>still want to store the same information from the same

0:33:53.280 --> 0:33:57.240
<v Speaker 1>client on different physical machines. So let's say you've got

0:33:57.240 --> 0:34:00.480
<v Speaker 1>two physical servers. You've got server one and server two,

0:34:00.520 --> 0:34:04.160
<v Speaker 1>and each physical server has four virtual servers on it.

0:34:04.360 --> 0:34:07.720
<v Speaker 1>So Server one has virtual servers A, B, C, and D,

0:34:07.960 --> 0:34:11.680
<v Speaker 1>and server too has virtual servers E, F, G, n H. Now,

0:34:11.719 --> 0:34:16.000
<v Speaker 1>technically you could dedicate virtual servers A and B, both

0:34:16.040 --> 0:34:18.719
<v Speaker 1>of those living on the same physical machine, to act

0:34:18.719 --> 0:34:21.120
<v Speaker 1>as backups for each other. But if something were to

0:34:21.160 --> 0:34:23.960
<v Speaker 1>go wrong in one of the virtual environments, it wouldn't

0:34:23.960 --> 0:34:26.760
<v Speaker 1>affect the other one their partition from each other. However,

0:34:26.800 --> 0:34:29.840
<v Speaker 1>if something were to go wrong to the underlying physical hardware,

0:34:30.000 --> 0:34:33.480
<v Speaker 1>the actual machine that's running everything, you'd be out of

0:34:33.560 --> 0:34:37.160
<v Speaker 1>luck because you'd lose both your copies or you'd at

0:34:37.239 --> 0:34:39.520
<v Speaker 1>least not not be able to access them until you've

0:34:39.560 --> 0:34:42.560
<v Speaker 1>repaired whatever the problem was. So for that reason, you

0:34:42.600 --> 0:34:45.759
<v Speaker 1>want to spread the load around your physical machines, and

0:34:45.880 --> 0:34:48.200
<v Speaker 1>you want to keep everything running at a good efficiency,

0:34:48.480 --> 0:34:51.799
<v Speaker 1>so you want to use virtual servers to reduce downtime.

0:34:52.400 --> 0:34:55.040
<v Speaker 1>And of course virtualization is used for all types of

0:34:55.080 --> 0:34:59.759
<v Speaker 1>cloud services, including app development um. In fact, that's a

0:34:59.800 --> 0:35:02.600
<v Speaker 1>great use of virtualization as it gives developers the chance

0:35:02.680 --> 0:35:05.839
<v Speaker 1>to program in an environment where they are reassured they're

0:35:05.840 --> 0:35:08.320
<v Speaker 1>not gonna mess everything else up if something goes wrong.

0:35:08.760 --> 0:35:11.160
<v Speaker 1>And so there are companies out there that get massive

0:35:11.160 --> 0:35:14.480
<v Speaker 1>amounts of revenue from customers who are essentially renting out

0:35:14.520 --> 0:35:17.759
<v Speaker 1>a virtual server space to develop apps on top of

0:35:18.160 --> 0:35:21.520
<v Speaker 1>before they develop, develop and deploy those apps into the

0:35:21.680 --> 0:35:24.560
<v Speaker 1>into the wild to get them to actual customers. Now,

0:35:24.600 --> 0:35:27.719
<v Speaker 1>I've talked a lot about why virtualization is useful, but

0:35:27.800 --> 0:35:31.640
<v Speaker 1>it also presents challenges. It's not a perfect solution to

0:35:31.680 --> 0:35:35.600
<v Speaker 1>all problems. It also presents opportunities for problems to arise,

0:35:36.080 --> 0:35:39.279
<v Speaker 1>and one of those is in security. If someone is

0:35:39.280 --> 0:35:42.920
<v Speaker 1>able to get access to the underlying hardware, either physically

0:35:43.120 --> 0:35:47.800
<v Speaker 1>or remotely, then they could potentially affect all the virtual

0:35:47.920 --> 0:35:50.880
<v Speaker 1>servers that are running on that physical machine. So instead

0:35:50.880 --> 0:35:54.680
<v Speaker 1>of corrupting one service, a bad actor could have affect

0:35:54.719 --> 0:35:58.640
<v Speaker 1>possibly several services. So security is a big concern in

0:35:58.680 --> 0:36:02.840
<v Speaker 1>the virtualization world and in the information world in general.

0:36:03.440 --> 0:36:07.040
<v Speaker 1>Another challenge is that there's a lack of established standards

0:36:07.080 --> 0:36:10.200
<v Speaker 1>in virtualization, though there's movement in the space to change that,

0:36:10.680 --> 0:36:12.960
<v Speaker 1>and that means that a data center might use several

0:36:13.000 --> 0:36:16.120
<v Speaker 1>different virtualization strategies, which in turn means the I T

0:36:16.239 --> 0:36:18.600
<v Speaker 1>department has to be able to handle all that, and

0:36:18.640 --> 0:36:21.839
<v Speaker 1>this can get pretty tough as organizations and systems grow

0:36:21.880 --> 0:36:25.560
<v Speaker 1>more complicated. There's also the problem that as systems grow,

0:36:25.600 --> 0:36:28.239
<v Speaker 1>things can be forgotten. Just keeping track of all those

0:36:28.320 --> 0:36:31.120
<v Speaker 1>virtual machines and what's running on each of them can

0:36:31.160 --> 0:36:34.720
<v Speaker 1>become challenging in itself, and with a complicated enough system,

0:36:34.960 --> 0:36:38.279
<v Speaker 1>it's possible for virtual servers to go overlooked. And if

0:36:38.280 --> 0:36:40.760
<v Speaker 1>it's overlooked and no one is using it, that brings

0:36:40.760 --> 0:36:44.280
<v Speaker 1>down the operational efficiency of the physical machine that's running

0:36:44.280 --> 0:36:47.760
<v Speaker 1>that server, and it's hard to get around performance issues

0:36:47.800 --> 0:36:52.000
<v Speaker 1>as well. A dedicated physical server that is only running

0:36:52.000 --> 0:36:56.000
<v Speaker 1>one task can more efficiently handle that task than a

0:36:56.000 --> 0:36:58.560
<v Speaker 1>computer that has a virtual layer on top of the

0:36:58.600 --> 0:37:01.200
<v Speaker 1>physical layer. Think of it sort of like getting permission

0:37:01.200 --> 0:37:04.520
<v Speaker 1>from a boss in a smooth operation. You just go

0:37:04.600 --> 0:37:07.320
<v Speaker 1>to your boss and you ask for permission to do something,

0:37:07.360 --> 0:37:09.520
<v Speaker 1>and you get it or you don't get it. But

0:37:09.600 --> 0:37:13.240
<v Speaker 1>in a company that has, say a bloated middle management layer,

0:37:13.640 --> 0:37:15.960
<v Speaker 1>maybe first you have to go through a lower level

0:37:16.000 --> 0:37:18.840
<v Speaker 1>manager who doesn't have that authority, but you still have

0:37:18.880 --> 0:37:21.719
<v Speaker 1>to talk to them before you can get access to

0:37:21.760 --> 0:37:24.319
<v Speaker 1>the boss who actually does have the authority to say

0:37:24.440 --> 0:37:28.520
<v Speaker 1>yes or no to your request. It slows things down. Well,

0:37:28.600 --> 0:37:32.799
<v Speaker 1>virtual platforms can also slow things down a little bit,

0:37:33.200 --> 0:37:39.760
<v Speaker 1>so that's another potential drawback to virtualization. However, overall, virtualization

0:37:39.760 --> 0:37:43.560
<v Speaker 1>has been a huge reason why we've seen such explosive

0:37:43.640 --> 0:37:47.800
<v Speaker 1>growth in online services, and it continues to be important

0:37:47.840 --> 0:37:52.680
<v Speaker 1>for developers who are creating programs for multiple platforms. And

0:37:52.760 --> 0:37:56.040
<v Speaker 1>so I hope this episode has sort of given you

0:37:56.080 --> 0:37:59.239
<v Speaker 1>an idea of what virtualization is all about, where it

0:37:59.320 --> 0:38:04.520
<v Speaker 1>came from, and why it's important. Uh, it's definitely something

0:38:04.520 --> 0:38:07.920
<v Speaker 1>that has enabled us to have a world where we

0:38:08.000 --> 0:38:12.120
<v Speaker 1>have discussions about things like the Internet of Things. Without virtualization,

0:38:12.480 --> 0:38:16.200
<v Speaker 1>we wouldn't have the ability to support all those services

0:38:16.640 --> 0:38:18.960
<v Speaker 1>because you wouldn't have a data center large enough to

0:38:19.040 --> 0:38:22.400
<v Speaker 1>hold all the actual physical servers you would need to

0:38:22.480 --> 0:38:24.880
<v Speaker 1>dedicate to each and every task. It would be a

0:38:25.000 --> 0:38:30.640
<v Speaker 1>terrible waste of space, of energy, of resources, of money.

0:38:31.040 --> 0:38:35.880
<v Speaker 1>So virtualization has really helped create an efficient and cost

0:38:35.920 --> 0:38:42.719
<v Speaker 1>effective approach to deploying numerous services across the Internet. So

0:38:42.760 --> 0:38:45.080
<v Speaker 1>we'll probably see a lot more development in that space,

0:38:45.480 --> 0:38:49.560
<v Speaker 1>will see more competition in it, although the big players

0:38:49.640 --> 0:38:52.920
<v Speaker 1>will probably hold on to a pretty large market share.

0:38:53.360 --> 0:38:57.200
<v Speaker 1>They've got time on their side and their reputations are

0:38:57.200 --> 0:39:00.919
<v Speaker 1>built on that. So I'll probably do more episodes about

0:39:01.000 --> 0:39:03.720
<v Speaker 1>virtualization or the company is involved in it in the future.

0:39:04.040 --> 0:39:07.360
<v Speaker 1>In the meantime, thank you so much for this suggestion.

0:39:07.600 --> 0:39:10.799
<v Speaker 1>I greatly appreciate it. It's the sort of topic that

0:39:11.360 --> 0:39:12.960
<v Speaker 1>I used to cover all the time on tech Stuff,

0:39:12.960 --> 0:39:14.839
<v Speaker 1>but it's been a while since I've covered one like this,

0:39:15.440 --> 0:39:18.680
<v Speaker 1>So Martin, thank you very much. I hope you enjoyed

0:39:18.719 --> 0:39:20.960
<v Speaker 1>this episode, and I hope the rest of you were

0:39:21.000 --> 0:39:23.480
<v Speaker 1>able to learn something from it. If you guys have

0:39:23.560 --> 0:39:26.560
<v Speaker 1>suggestions for future episodes, you can send me an email.

0:39:26.640 --> 0:39:30.480
<v Speaker 1>The address is tech stuff at how stuff works dot com.

0:39:30.680 --> 0:39:34.719
<v Speaker 1>Drop on by our website that's tech stuff podcast dot com.

0:39:35.040 --> 0:39:36.960
<v Speaker 1>There you're gonna find an archive of all of our

0:39:36.960 --> 0:39:40.000
<v Speaker 1>past episodes, as well as links to things like our

0:39:40.040 --> 0:39:44.480
<v Speaker 1>social media presence and our online store, where every purchase

0:39:44.520 --> 0:39:46.560
<v Speaker 1>you make goes to help the show and we greatly

0:39:46.560 --> 0:39:50.479
<v Speaker 1>appreciate it, and I'll talk to you again really soon.

0:39:56.360 --> 0:39:58.560
<v Speaker 1>Text Stuff is a production of I heart Radio's How

0:39:58.640 --> 0:40:02.000
<v Speaker 1>Stuff Works. For more podcasts from I heart Radio, visit

0:40:02.040 --> 0:40:05.120
<v Speaker 1>the I heart Radio app, Apple Podcasts, or wherever you

0:40:05.200 --> 0:40:11.080
<v Speaker 1>listen to your favorite shows. H