A resource greedy process can mean that other processes do not get access to an object as often as necessary - an example of this often occurs in operating systems which over-prioritise a diskette drive, so that terminal access is radically slowed down when the diskette is running. Distributed systems involve another resource that must be shared fairly - this is the network. Reasoning about the number of possible orderings of events in distributed or centralized conncurrent systems is simply not feasible in the same as way as for sequential programs. Instead, formal, mathematically founded systems now exist for defining and checking the behaviour of such systems of distributed concurrent tasks - for example: Some of these are introduced in Chapter five. It must be noted here, though, that while it is attractive in principle that one may be able to build provably correct distributed systems one day, recent application in real large systems has been of limited success, and as a result, that industrial application of formal approaches only advances in small steps. <#529#>#tex2html_wrap3818#<#529#> The work of operating systems designers has meant that most application programmers have managed to avoid dealing with concurrency. Unfortunately, distributed systems remove that luxury. Distributed systems inherently require the programmer to be intimately aware of concurrent programming problems and techniques, no matter how hard distributed systems designers have struggled to avoid this so far. <#530#>#tex2html_wrap3820#<#530#>