A computer-implemented method, comprising: receiving, at a computing device (230, 302, 500) comprising shared library storage for storing shared libraries, versioned-shared-library information (124, 324) for at least a first software library used by a software application, wherein the versioned-shared-library information for the first software library comprises an identifier of the first software library; determining, at the computing device, that the computing device stores a copy of the first software library identified in the versioned-shared-library information by the identifier of the first software library; sending, to a server, a request for an executable for the software application, wherein the request comprises a request for a stripped executable, wherein a full executable includes the first software library, and wherein the stripped executable excludes the first software library; and in response to the request, receiving, from the server, the requested executable for the software application for storage on the computing device, and wherein the method is characterized by: determining, by the computing device, to clean up the shared library storage of the computing device; after determining to clean up the shared library storage, the computing device determining whether the number of applications that use a stored version of the first software library is less than a threshold value; and after determining that the number of applications that use the stored version of the first software library is less than the threshold value, sending, to the server, a request for the full executable for the software application; receiving, from the server, the full executable of the software application for storage on the computing device, replacing (394, 398) the stripped executable with the full executable at the computing device, by uninstalling the stripped executable and installing the full executable; and removing the stored version of the first software library from shared library storage on the computing device, by uninstalling the first software library from shared library storage. receiving, at a computing device (230, 302, 500) comprising shared library storage for storing shared libraries, versioned-shared-library information (124, 324) for at least a first software library used by a software application, wherein the versioned-shared-library information for the first software library comprises an identifier of the first software library; determining, at the computing device, that the computing device stores a copy of the first software library identified in the versioned-shared-library information by the identifier of the first software library; sending, to a server, a request for an executable for the software application, wherein the request comprises a request for a stripped executable, wherein a full executable includes the first software library, and wherein the stripped executable excludes the first software library; and in response to the request, receiving, from the server, the requested executable for the software application for storage on the computing device, and wherein the method is characterized by: determining, by the computing device, to clean up the shared library storage of the computing device; after determining to clean up the shared library storage, the computing device determining whether the number of applications that use a stored version of the first software library is less than a threshold value; and after determining that the number of applications that use the stored version of the first software library is less than the threshold value, sending, to the server, a request for the full executable for the software application; receiving, from the server, the full executable of the software application for storage on the computing device, replacing (394, 398) the stripped executable with the full executable at the computing device, by uninstalling the stripped executable and installing the full executable; and removing the stored version of the first software library from shared library storage on the computing device, by uninstalling the first software library from shared library storage. determining, by the computing device, to clean up the shared library storage of the computing device; after determining to clean up the shared library storage, the computing device determining whether the number of applications that use a stored version of the first software library is less than a threshold value; and after determining that the number of applications that use the stored version of the first software library is less than the threshold value, sending, to the server, a request for the full executable for the software application; receiving, from the server, the full executable of the software application for storage on the computing device, replacing (394, 398) the stripped executable with the full executable at the computing device, by uninstalling the stripped executable and installing the full executable; and removing the stored version of the first software library from shared library storage on the computing device, by uninstalling the first software library from shared library storage.