Difference between desktop and server virtualization? - virtualization

I have read many article but, still difference between them confusing.
Server virualization virualizes the physical server while desktop virtualization virtualizates desktop.
Can somebody elaborate with example?

In the end, this is about
a powerful piece of hardware able to run many more instances of "something"
virtualization technology that supports "slicing" that single hardware instance into those "somethings"
And from there: such a "something" can either be an instance of a service; or it can make up what you, as a user perceive as "desktop".
In that sense, your distinction doesn't really exist: desktop virtualization is nothing else but a server offering "client desktops" to its users; instead of say a http or database service.


How would you explain the term 'Web Services' to a non-technical person?

As a person of finance, how would you explain the term 'web services' to me.
I've looked around and all definitions seem really technical. I've asked my colleagues and it's still not very clear.
What's your take?
This may not be accurate but should give them an idea.
"They are web sites that other software (as opposed to human) can use to get information"
Web services are a way for your server (might say "computer") to ask another computer for information, or to tell it do do something.
Note:sometimes precision must be sacrificed for the sake of clarity. To what degree depends entirely on your target audience.
They are like a web version of the friendly telephone clerk at the movie theater, sitting around and waiting to dispense certain information to anyone that calls and asks for it.
Sorry if that is too non-technical. Also - does a human even actually answer the phone at movie theaters anymore?
"Web Services" simply enable two different computers to take advantage of web technology as a conduit to communicate and exchange data with each other. Instead of the server providing access for direct human interaction, it provides access for computer-to-computer interaction at a lower level, and the results are usually subjected to further processing before being made available for human interaction.
A web service is a mechanism for transmitting data between two different machines, regardless of the underlying operating system or software which runs on top of it. Examples of web services are receiving information about the weather, or local tax information by passing the service a postal code, or receiving tracking information from UPS, FedEx by passing it a tracking number.
It is a machine-to-machine service exposed via the Internet using Web technologies.
A service can be any number of things: ask/search/compute/store information etc.
Bear in mind that "Web Services" is somewhat vague and thus definition will likely vary.
At a very basic level, web services are the protocols that allow servers (like ISPs) and clients (us) to communicate with each other. So it's things like HTML, XML, and Java.
Web services let computer programs exist partially on your computer, and partially on the world wide web.
This has all kinds of advantages like allowing the part that lives online to be updated without you having to do anything, etc.
It's especially good because the part running on your computer can use many different "services" online.
"A web site for computers"
A web page that returns Xml instead of Html (if they understand what Xml is) so that it is machine-readable.
An internet site that can return information to other sites. Example: feeding weather forecasts
How much do you want to know?
Web Services is computer speak for one (better?) way for 2 computer programs to talk to each other, there are many other ways, but if you want to understand the difference between a WebService and let us say .NET Remoting or Java RMI, you have to be prepared to tolerate some computer mumbo jumbo.
One of the biggest advantages of WebServices over many others (inlcuding the 2 I mentioned) is that it is platform independent, which means that 2 programs can communicate through WebServices regardless of what langauge they are written in.

OS for web server hosting [closed]

I own my own website design business, and currently pay a company to host all of my client's websites. I would like to move into hosting via a web server on top of design, and have a machine with which to host said server. That said, deciding on an OS to host this server is proving to be a bit more complex than I realized.
Ideally this software would be free, but I do have a bit of money I can put towards such an endeavor if that would be best in the long run. Something lightweight and secure would be best.
Amahi seems to be more for home servers and file sharing on home networks, and not really for hosting websites.
NAS4Free also seems to be more towards hosting files on a home network and designed for sharing on a Cloud.
I know Linux is good for this sort of thing, but I'm not entirely comfortable with the command console in that OS, though I have used it a bit.
Windows Server might be my best bet, but is rather expensive.
What I wish to know:
Am I wrong about Amahi/NAS4Free? Could they provide the back-end that I need?
Should I go with Linux or Windows Server instead?
Is there a clear winner, or is it preferential?
Linux management is probably easier than you think it is (and I say this as a die-hard Windows fan). Your best options are likely Windows (Server) or Linux (I personally prefer Ubuntu for developer-friendliness, but there are many options and some will perform better in a production environment).
I definitely think you're barking up the wrong tree with N4F, which is a great network attached storage platform but a bad web hosting platform.
With that said, there are many other concerns with self-hosting (like examining the hardware requirements and obtaining a suitable Internet link) and if you have to ask this question, you may be better off sticking with a hosting organization (though you can, of course, examine all the options in this very large field) or hiring someone (consultant or employee) to help manage this process.

How does Xen expose hardware to guests?

(I feel this question half belongs here and half on Server Fault; please let me know if you think there's a better venue for it.)
How does Xen, or indeed, any hypervisor, expose hardware to guest operating systems?
For instance, a guest wanting to communicate on the network; at some stage its request must get translated into a request to the NIC. Does the hypervisor expose a dummy network device, which we assume the guest knows how to use? Or do paravirtualised guests have knowledge of how to directly make a request for a given piece of hardware? (If so, what do non-paravirtualised guests do?)
Once the request is made, who handles it? I'm guessing the hypervisor has no little knowledge about physical hardware (from a driver perspective), so it probably has to come down to the dom0. Right?
I ask because I love doing kernel development, but writing drivers is a chore. If I could rely on a dom0 with pretty good hardware support (Ubuntu, say), and then just write my kernel to run paravirtualised, and/or to make use of some mock device that Xen exposes, that would make my life a lot easier. It's pretty difficult to find documentation on these topics, however, so my next stop is probably to look at a range of Xen guest implementations; HaLVM, a port of GHC for running Haskell software natively as a Xen guest, looks like a good start.
Thanks and salutations!
Edit: this marketing doc from Xen.org seems to state that the dom0 runs drivers in order to facilitate domUs' block device and network access, in line with my guess. In this case, any technical references/specs/etc. would be awesome!
Edit: this (apparently outdated) documentation looks good.
There are three types of device models.
PV — For example, Linux PV guests use pv_ops (http://wiki.xen.org/wiki/XenParavirtOps, http://wiki.xen.org/wiki/Category:PVOPS)
HVM — full virtualization of devices with QEMU (https://serverfault.com/questions/222010/difference-between-xen-pv-xen-kvm-and-hvm)
Passthrough (http://wiki.xensource.com/wiki/Xen_PCI_Passthrough)
The book The Definitive Guide to the Xen Hypervisor might be useful to you.
There is quite a bit of development related info on the wiki:

dedicated web server for my appliation/s?

I am looking for a dedicated server because shared webhosting solutions have some limitations.
I am going to start with one appliation (web server + db) but in the future I will need more resources for more applications. I am starting small so the price is very important right now the quality is more important though.
The requirements are like (not sure what I forgot)
scalable hw resources (memory, hdd, bandwith)
linux/unix based
able to install programs
backup solution?
unlimited number of outgoing emails
'simple scripts' ?
server user management
Does the location of the server matters as I want to target my 'visitors' world wide?
Well I don't know where you are from and if it matters to you where the server's at. But I am very happy with swiss based hostfactory (I host some ecommerce solutions there). The support team reacts very fast and you'll get full control of the server (rdp access on windows, shell access on linux).
Check it out here: hostfactory
Hardware resources are scalable via the web interface.
Yes - location matters. If you are going with just one server location, you need to make your best guess as to where most of your visitors are going to come from.
The plumbing of the internet tends to be US centric, so if you are not sure, and have no legal restrictions on where your data can live, that may be your best (and often cheapest) option.
I went for linode

How to identify that you're running under a VM?

Is there a way to identify, from within a VM, that your code is running inside a VM?
I guess there are more or less easy ways to identify specific VM systems, especially if the VM has the provider's extensions installed (such as for VirtualBox or VMWare). But is there a general way to identify that you are not running directly on the CPU?
A lot of the research on this is dedicated to detecting so-called "blue pill" attacks, that is, a malicious hypervisor that is actively attempting to evade detection.
The classic trick to detect a VM is to populate the ITLB, run an instruction that must be virtualized (which necessarily clears out such processor state when it gives control to the hypervisor), then run some more code to detect if the ITLB is still populated. The first paper on it is located here, and a rather colorful explanation from a researcher's blog and alternative Wayback Machine link to the blog article (images broken).
Bottom line from discussions on this is that there is always a way to detect a malicious hypervisor, and it's much simpler to detect one that isn't trying to hide.
Red Hat has a program which detects which (if any) virtualization product it's being run under: virt-what.
Using a third-party-maintained tool such is this is a better strategy long-term than trying to roll your own detection logic: more eyes (testing against more virtualization products), etc.
A more empirical approach is to check for known VM device drivers. You could write WMI queries to locate, say, the VMware display adapter, disk drive, network adapter, etc. This would be suitable if you knew you only had to worry about known VM host types in your environment. Here's an example of doing this in Perl, which could be ported to the language of your choice.
It depends on what you are after:
If the VM is not hiding from you on purpose, you can use some known hook. LIke looking for VmWare drivers or the presence of certain strings in memory or certain other tell-tale signs.
If the VM is really wanting you to do special things for it, it will have some obvious hook in place, like modifying the ID of the processor or adding some special registers that you can access to detect it. Or s a special device in a known location in memory (presuming you can get raw access to the physical memory space of your world). NOte that modern machine designs like the IBM Power6 and Sun UltraSparc T1/T2 are designed to ALWAYS run a hypervisor, and never directly on raw hardware. The interface to the "hardware" that an OS uses is in fact the interface ot a hypervisor software layer, with no way to get around it. In this case, detection is trivial since it is a constant "yes". This is the likely future direction for all computer systems that can afford the overhead, look at the support in recent designs like the Freescale QorIQ P4080 chip, for example (www.freescale.com/qoriq).
If the VM is intentionally trying to hide, and you are chasing its presence, it is a game of cat-and-mouse where the timing disturbance and different performance profile of a VM is almost always going to give it away. Obviously, this depends on how the VM is implemented and how much hardware support there is in place in the architecture (I think a zSeries mainframe is much better at hiding the presence of a VM or stack of VMs under your particular OS than a regular x86 machine is, for example). See http://jakob.engbloms.se/archives/97 for some discussion on this topic. It is possible to try to hide as a VM, but detection is quite likely to always win if it tries hard enough.
I once ran across an assembly code snippet that told you if you were in a VM....I googled but couldn't find the original article.
I did find this though: Detect if your program is running inside a Virtual Machine.
Hope it helps.
One good example is that apparently doing a WMI query for the motherboard manufacturer, and if it returns "Microsoft" you're in a VM. Thought I believe this is only for VMWare. There are likely different ways to tell for each VM host software.
This article here http://blogs.technet.com/jhoward/archive/2005/07/26/407958.aspx has some good suggestions and links to a couple of ways to detect if you are in a VM (VMWare and VirtualPC at least).
You might be able to identify whether you're in a virtual machine by looking at the MAC address of your network connection. Xen for example typically recommends using a specific range of addresses 00:16:3e:xx:xx:xx.
This isn't guaranteed as it's up to the administrator of the system to specify what MAC address they like.
In Linux systems, you can try to search for common files on /proc.
Example, the existente of /proc/vz/ tell you is a OpenVZ.
Here's a full guide to detect VM's environent under Linux without have to "drink pills" :)
In most cases, you shouldn't try to. You shouldn't care if someone is running your code in a VM, except in a few specific cases.
If you need to, in Linux the most common way is to look at /sys/devices/virtual/dmi/id/product_name, which will list the name of the laptop/mainboard on most real systems, and the hypervisor on most virtual systems. dmidecode | grep Product is another common method, but I think that requires root access.
TrapKIT provides ScoopyNG, a tool for VMware identification -- it attempts to work around evasion techniques, but doesn't necessarily target any virtualization software other than VMware. Both source and binaries are available.
If it VM does the job well, it should be invisible to the client that it's being virtualized. However, one can look at other clues.
I would imagine that looking for known drivers or software specific to the VM environment would be the best possible way.
For example, on a VMWare client running Windows, vmxnet.sys would be the network driver, displayed as VMware accelerated AMD PCNet Adapter.