Project: Open Software Update

  • one app to find them all, and in the darkness bind them.
    • open to anyone. dependent on no one.
    • like mac os x's Software Update
    • extensible
  • simple plugin interface
    • format
                      <?xml version="1.0" encoding="utf-8"?>
                      <application>
                      <name>Delicious Library</name>
                      <host>delicious-monster.com</host>
                      <updateInfoURI>http://delicious-monster.com/softwareUpdate/update.xml</updateInfoURI>
                      </application>
                    
    • optional nodes
                      <updateFrequency>daily</updateFrequency>
                      <updateFrequency>weekly</updateFrequency>
                      <updateFrequency>monthly</updateFrequency>
      
                      <requiredMinimumVersion>2.0</requiredMinimumVersion>
                      <requiredMinimumUpdated>20040118</requiredMinimumUpdated>
                    
    • plugins by users or developers (partying together)
  • server side : update.xml
    • single app
                    <host name="delicious-monster.com">
                    <application>
                    <name>Delicious Library</name>
                    <updated>20041118</updated>
                    <version>1.0.5</version>
                    <updateURI>http://delicious-monster.com/downloads/DeliciousLibrary.dmg</updateURI>
                    </application>
                    </host>
                  
    • multiple apps
                    <host name="ranchero.com.com">
                    <application>
                    <name> NetNewsWire</name>
                    <updated>20041022</updated>
                    <version>2.0b6</version>
                    <updateURI>http://ranchero.com/downloads/NetNewsWire2.0b6.dmg.gz</updateURI>
                    </application>
                    <application>
                    <name>MarsEdit</name>
                    <updated>20041116</updated>
                    <version>1.0b12</version>
                    <updateURI> http://ranchero.com/downloads/MarsEdit1.0b12.dmg.gz </updateURI>
                    </application>
                    </host>
                  
    • optional nodes
                    <updateFrequency>daily</updateFrequency>
                    <updateFrequency>weekly</updateFrequency>
                    <updateFrequency>monthly</updateFrequency>
      
                    <requiredMinimumVersion>2.0</requiredMinimumVersion>
                    <requiredMinimumUpdated>20040118</requiredMinimumUpdated>
      
                    <endOfLife>true</endOfLife>
                    <endOfLife>false</endOfLife>
                  
  • download prefs
    • respect server side unless overwritten client side by user
    • update frequency : all items
      • daily
      • weekly
      • monthly
      • manually
    • enable / disable : item specific
    • auto download : item specific
    • auto download : item specific
    • admin password : save in keychain (BOOL)
  • auto open files
    • resolve decompression
      • if zip, gz, tar, et al : decompress internally
      • if sit, sitx : farm out to stuffitexpander
    • replace old version
    • backup older version pref (BOOL)
    • keep originals pref (BOOL)
  • issues to work out
    • initial lastUpdated date for each app
      • from the app's 'date modified' data?
      • sounds like good enough to me
    • xml namespaces
      • are namespaces necessary?
      • beneficial?
  • benefits
    • for users
    • for developers
      • can easily migrate existing check for update systems
      • inexpensive deployment
      • inexpensive maintenance
      • inexpensive bandwidth
      • keeps user base up to date