@PerfectPhase: You're suggesting a task that only runs the first time a role is started on a VM? (In other words, the second time it would be skipped?) I think the reason not to do that is that there's no way for us to tell that the task has succeeded... if something failed, you'll want to rerun the task. Hence the design where we run the task every time the role is started, and it's up to you to detect when you should just return without doing anything.

@Dom Lawson: Your role can recycle on the same VM (just a VM reboot or just restarting your role's process). No one else will ever be on that VM (because anyone else coming along will get a new VM). That's an important security/isolation feature. All we were talking about is if your code fails to install something and then is restarted. In that case, you'll be on the same VM, and it will be in a weird state.