Ted Neward has begged for a definition of "service", fearing that SOA will become just so much marketecture littering our already littered landscape. Well, for starters, too late.
However, since he asked, here's my definition of a "service".
Service. n. (sir-viss) A unit of functionality that has a better than 10% chance of being called by an alien machine.
To further clarify: "a unit of functionality" means some set of related abilities of a system, like a bunch of document transformation code, or ways of processing credit cards, etc. "better than 10% chance" is a totally off-the-cuff WAG (wild-assed guess). "alien machine" means alien in the "not this machine" as well as the "foreign os/platform/vm" senses.
Because the definition of a service says that it represents functionality to be called from somewhere else, and since conventional wisdom about distributed application calls has already settled into advanced rigormortus stage, the transitive property of technical definitions applies and our definition of "service" implicitly includes the notion of highly granulized access levels to our functionality and the minimization of round trips and tight coupling to type systems, runtime support, or stateful connections.
There's no need to make "services" out of library calls that will only be accessed by local or semi-local code. Likewise, if the functionality has a pretty good chance of being accessed by an alien, you'd better make it a service.
Ted, what's missing from this definition?