1. A system for streaming a software application to a client comprising: an application library having application files and a prediction model stored therein; a streaming manager configured to send the application files to a client as a plurality of streamlets, each streamlet corresponding to a particular data block in a respective application file; a streaming prediction engine configured to identify at least one streamlet which is predicted to be most appropriate to send to a given client at a particular time in accordance with the prediction model.