recently asked the Cloud Computing Group to define IaaS, so I'm going to jump in with an analogy.
In the technical sense Infrastructure is the hardware, networking, and software that runs the foundation of an information system. This infrastructure includes fiber optic cables, hard drives, servers, and usually an operating system. From the perspective of a software developer, this infrastructure runs the code that produces the screens, data, and workflows the end users interact with, but the infrastructure is not the code itself.
By itself, infrastructure isn't useful -- it just sits there waiting for someone to make it productive in solving a particular problem. Imagine the Interstate transportation system in the U.S. Even with all these roads built, they wouldn't be useful without cars and trucks to transport people and goods. In this analogy, the roads are the infrastructure and the cars and trucks are the platform that sits on top of the infrastructure and transports the people and goods. These goods and people might be considered the software and information in the technical realm.
There can be many types of infrastructure. It could be a slice of a single server as in shared hosting (GoDaddy), an entire machine (Rackspace, 1and1), or even a cluster of computers all working together (Mosso, Amazon, Joyent). The provisioning, maintenance, and stability of this infrastructure is provided by a hosting service or cloud computing provider. Infrastructure as a Service (IaaS) is a term used to describe infrastructure providers that allow the developers building on top of the infrastructure the capability to dynamically expand and contract the physical footprint of the infrastructure they are using, most specifically in the number of servers being used at one time and what those servers are doing, either serving web pages, running database queries, or processing video files.
So what is a PaaS? A Platform as a Service is one additional layer of abstraction on top of IaaS that makes it even easier to put hardware to use. In the PaaS model, the customer can jump right in and start working without thinking about servers, stacks, networking and the like. This entire layer of the software system is hidden from the end user. The end user uses the platform to build a particular software system that solves an exact end user problem -- usually much faster than starting with infrastructure directly.
For example, if a customer were to go sign up for an account at Mosso, they'd get a server and the capacity to serve web pages. If customer never did another thing, they'd get a URL with a standard message saying a site had been created -- and that's pretty much it. The next step for this user would be to write a lot of code or find an open source or commercial software package, like Word Press, Joomla, or Magento that could run /at/ Mosso and serve a purpose. Now, with one of these packages or the code installed at Mosso, the infrastructure is doing something useful. It's running a blog, a website, or an online store and people can purchase goods.
A PaaS sits on top of the infrastructure and makes it easier to put infrastructure to work. The end user of a platform need not worry about how many servers are running the software or what kind of database it is.
For example, our product Qrimp
is a PaaS. If you sign up to use Qrimp, you'll get an immediately usable software system that does something useful. Upload a spreadsheet and Qrimp will infer the relational model for you, add security, navigation, and forms for you to get to work right away -- in 5 minutes. This level of functionality on an IaaS would still take another many days or weeks of coding or research to find a software package that will solve your problem and also work in the environment running it.
If you think about all this cloud computing as one big experiment in abstraction, then the IaaS abstracts a particular type of hardware with a stack, either Windows, Linux, or some other operating system, plus sometimes a database or two and the networking. The PaaS abstracts that hardware into a software layer that is much closer to the end product. A PaaS simplifies the process of software development by an order of magnitude, but may not be as flexible as IaaS because some of the details are hidden from the end user.
When to use IaaS or PaaS?
If you have already written a lot of code or have a software package you want to install and run in the cloud, then you'll be looking for IaaS. If you have no software or want to build something from scratch to solve a problem for which there is no package available or the packages are too expensive or complicated, then try a PaaS and mold it into shape.