A method comprising: obtaining, at a control subsystem (110, 202) associated with a teleoperated surgical system, a hardware configuration from a first patient side subsystem (106, 204) of the teleoperated surgical system, wherein the first patient side subsystem (106, 204) is communicatively coupled to and controlled by the control subsystem (110, 202); determining, with a data processing apparatus, a software version to be used by the control subsystem (110, 202) and the first patient side subsystem (106, 204), wherein determining the software version includes selecting the software version from among a plurality of software versions, and wherein each software version of the plurality of software versions is associated with a particular patient side subsystem (106, 204); instructing, with the data processing apparatus, the first patient side subsystem (106, 204) to use the software version; determining, with the data processing apparatus, whether the software version is currently loaded on the control subsystem (110, 202); in response to determining that the software version is not currently loaded on the control subsystem (110, 202), loading, with the data processing apparatus, the software version on the control subsystem (110, 202) by: determining a particular boot image of multiple boot images, wherein the particular boot image contains the software version; and rebooting the first patient side subsystem (106, 204) from a current boot image to the particular boot image, wherein rebooting the first patient side subsystem (106, 204) from the current boot image to the particular boot image comprises: obtaining a first header block for the particular boot image; restoring the obtained first header block to the particular boot image; storing a copy of a second header block for the current boot image; and after restoring of the obtained first header block and storing of the copy of the second header block, invalidating the second header block for the current boot image; validating, with the data processing apparatus, the software version loaded on the control subsystem (110, 202) and the first patient side subsystem (106, 204); and initializing, with the data processing apparatus, the teleoperated surgical system with the software version. obtaining, at a control subsystem (110, 202) associated with a teleoperated surgical system, a hardware configuration from a first patient side subsystem (106, 204) of the teleoperated surgical system, wherein the first patient side subsystem (106, 204) is communicatively coupled to and controlled by the control subsystem (110, 202); determining, with a data processing apparatus, a software version to be used by the control subsystem (110, 202) and the first patient side subsystem (106, 204), wherein determining the software version includes selecting the software version from among a plurality of software versions, and wherein each software version of the plurality of software versions is associated with a particular patient side subsystem (106, 204); instructing, with the data processing apparatus, the first patient side subsystem (106, 204) to use the software version; determining, with the data processing apparatus, whether the software version is currently loaded on the control subsystem (110, 202); in response to determining that the software version is not currently loaded on the control subsystem (110, 202), loading, with the data processing apparatus, the software version on the control subsystem (110, 202) by: determining a particular boot image of multiple boot images, wherein the particular boot image contains the software version; and rebooting the first patient side subsystem (106, 204) from a current boot image to the particular boot image, wherein rebooting the first patient side subsystem (106, 204) from the current boot image to the particular boot image comprises: obtaining a first header block for the particular boot image; restoring the obtained first header block to the particular boot image; storing a copy of a second header block for the current boot image; and after restoring of the obtained first header block and storing of the copy of the second header block, invalidating the second header block for the current boot image; determining a particular boot image of multiple boot images, wherein the particular boot image contains the software version; and rebooting the first patient side subsystem (106, 204) from a current boot image to the particular boot image, wherein rebooting the first patient side subsystem (106, 204) from the current boot image to the particular boot image comprises: obtaining a first header block for the particular boot image; restoring the obtained first header block to the particular boot image; storing a copy of a second header block for the current boot image; and after restoring of the obtained first header block and storing of the copy of the second header block, invalidating the second header block for the current boot image; obtaining a first header block for the particular boot image; restoring the obtained first header block to the particular boot image; storing a copy of a second header block for the current boot image; and after restoring of the obtained first header block and storing of the copy of the second header block, invalidating the second header block for the current boot image; validating, with the data processing apparatus, the software version loaded on the control subsystem (110, 202) and the first patient side subsystem (106, 204); and initializing, with the data processing apparatus, the teleoperated surgical system with the software version.