So, hypothetically speaking, let’s say you want to design a system where you had absolute control over which applications your customers were allowed to install on your device. Certainly you would want to ensure that you were the only source for applications. But for extraordinary cases, you might also need to create a blacklist of applications.

Each entry in the blacklist would also need a human-readable title — presumably the name of the app — and perhaps even a human-readable description to explain why the app was blacklisted. But each entry would also need a unique identifier, of course, so you don’t accidentally get confused between six apps named “TODO.” Finally, you would probably want to include the date that the entry was added to the list.

Furthermore, since you anticipate continually adding new applications to this blacklist to protect your and your partners’ business model, you would need your proprietary non-browser-based client to periodically poll the list for changes.

All of which raises a very serious question: what data format should you use for the list?

If you answered “JSON” then congratulations, you win the Trendy Tech of the Month Award lose! To collect your prize, please proceed through the door marked “This way to the egress.” Some restrictions apply.

Update: OK, OK, it’s a “Core Location” blacklist. Big deal. I’ll see your tree and raise you a forest:

… an independent engineer discovered code inside the iPhone that suggested iPhones routinely check an Apple Web site that could, in theory trigger the removal of the undesirable software from the devices.

Mr. Jobs confirmed such a capability exists, but argued that Apple needs it in case it inadvertently allows a malicious program — one that stole users’ personal data, for example — to be distributed to iPhones through the App Store.

As I’ve said before, “protecting users from malicious programs” is code for “cryptographically enforcing restrictions on applications to protect our and our partners’ business model.” The bullshit about “stealing personal data” is just a rhetorical sleight of hand, like the RIAA claiming that piracy hurts “artists and other rights holders” when 99% of artists don’t own the rights to their own songs. How many apps has Apple de-listed over privacy concerns? Only one that I know of, and it was quickly reinstated after a quick update. How many apps has Apple de-listed (or prevented being written in the first place) to protect their business? Lots and lots.

§

Twenty four comments here (latest comments)

  1. Hate to break it to you, but that’s not JSON.

    Note that it uses an equals where JS would use a colon and a semicolon where JS would use a comma.

    — Daniel Parks #

  2. Well, that’s not valid JSON … but – appropriately – some proprietary derivative thereof?

    — jsled #

  3. *shrug*
    Yes, rss fits nicely for this purpose.
    But I don’t see anything wrong with the solution they have used.
    There’s currently exactly one piece of software that is meant to consume this list.

    — Anonymous #

  4. *shrug*
    Yes, rss fits nicely for this purpose.
    But I don’t see anything wrong with the solution they have used.
    There’s currently exactly one piece of software that is meant to consume this list.

    — HS #

  5. Hmm, the JSON file looks like a test file at the moment:
    {
    “Date Generated” = “2008-08-08 01:22:28 Etc/GMT”;
    “BlackListedApps” = {
    “com.mal.icious” = {
    “Description” = “Being really bad!”;
    “App Name” = “Malicious”;
    “Date Revoked” = “2004-02-01 08:00:00 Etc/GMT”;
    };
    };
    }

    Was there something else there before?

    — Justin Watt #

  6. According to John Siracusa, it’s the old, non-XML plist format. That makes sense because there’s already a parser built into OS X. I dunno why they didn’t use the new plist format, but maybe this is easier to produce on the server side.

    http://arstechnica.com/journals/apple.ars/2008/08/07/the-goings-on-behind-the-iphone-application-blacklist

    Justin, as far as I can tell, nobody has seen any other content in the file. All of the apps linked in this entry were removed from the store but not blacklisted.

    — Daniel Parks #

  7. That’s not JSON. JSON objects look like {”a”: “b”, “c”: “d”}, that text is formatted as {”a” = “b”; “c” = “d”;}.

    — John Millikin #

  8. Sadly, they don’t seem to carry a “unique identifier” that I can see. Or perhaps, joyously, they don’t. But I don’t own an iPhone, so it seems silly for me to be angry about all this.

    — jldugger #

  9. That last comment didn’t show up when the page reloaded, so I’m guessing there’s about seven hours of “but that’s not JSON!” comments. Oh well.

    — John Millikin #

  10. I don’t understand why you care. You don’t have an iPhone, you don’t want one, and you won’t buy one. But I’ve seen your Twitters about these various issues…is it jealousy? Do you want one, but can’t bring yourself to buy one because of it’s super-duper proprietary nature? If that’s your angle, then I respect that, but otherwise, I don’t get why you’d care.

    — Brady Wetherington #

  11. I love all the links. They make Windows Mobile look good. :)

    — Nightbird #

  12. I keep hoping that Android will get its act together and be awesome when it comes out, but I have a feeling it’ll suck too, just in a different way. The most likely outcome appears to be that we will still be bitching about mobile phones for years to come.

    — Owen #

  13. Only because it appears my earlier comment went puff. It’s Apple’s favorite plist format:
    http://en.wikipedia.org/wiki/Property_list
    And on the bright side, at least they didn’t butcher any XML with their key-value ordered elements style.

    — Assaf #

  14. That’s actually a Mac OS X Property List in its classical NeXTSTEP format (which is less wordy than the XML flavor that Apple started to use a few years ago.)

    http://en.wikipedia.org/wiki/Property_list

    I guess I just got the Pedantic Oldy Moldy Techie of the Month Award.

    — Carlos #

  15. I didn’t get it, as one of the articles you linked mentions that it uses an old-style plist format.

    — Eduardo Habkost #

  16. Uh… something wasn’t right here, because shift-reloading the article on Firefox was showing *no comments* at the time I posted my comment. I ended up being redundant.

    — Eduardo Habkost #

  17. Another peculiar thing, is that although it is in plist format, it is served from Apple’s site with content type text/html; rather than text/plain, application/octet-stream, or text/x-plist.

    — Deron Meranda #

  18. Pilgrim vs. Gruber: FIGHT!
    http://daringfireball.net/2008/08/core_location_blacklist

    If it is a Core Location blacklist, and not an application blacklist, the next question then seems to be: if you’ve determined that an application wants to do something bad/sneaky/insecure with Core Location, under what circumstances would you just disable Core Location and let the evil/sloppy app hang around, and not actually blacklist the app itself?

    — Jonathan #

  19. So the list is served over https, no chance of MITMing it.

    — James #

  20. Honestly, it seems to me like you really just wanted to jump onto the “Let’s hate on Apple for being proprietary” bandwagon so badly that you forgot to fact-check first.

    This “blacklist” ain’t JSON, and it also is meant as a kill-switch for the Core Location services so that Apple has the opportunity to protect your privacy in the event of a malicious application accidentally getting sold on the Apple store.

    You’re really not making a strong enough argument here.

    — Bob Aman #

  21. I’m quite glad they used the old school NeXTStep property list rather than their horrible XML version (which had the strong reasoning of “XML makes everything better, right?” behind its creation). You don’t really want the XML one. Whether that’s appropriate or not, considering they already have the property list browser and that it’s not the most insane format ever invented…

    I don’t see anyone mentioning that this evil, evil thing is actually a blacklist for the location API. It’s more of a security feature to block nefarious applications (say, one which would transmit your location to a third-party). I like this feature, and I hope that Android has an equivalent.

    — Pierre Phaneuf #

  22. Well, the data could fit in a relational database, like an SQL one.

    — Indy #

  23. {
    “Date Generated” = “2008-08-10 00:19:33 Etc/GMT”;
    “BlackListedApps” =
    {
    “com.mal.icious” =
    {
    “Description” = “Being really bad!”;
    “App Name” = “Malicious”;
    “Date Revoked” = “2004-02-01 08:00:00 Etc/GMT”;
    };
    };
    }

    As XML?

    Being really bad!

    — Bobby #

  24. Try that again!
    {
      ”Date Generated” = “2008-08-10 00:19:33 Etc/GMT”;
      ”BlackListedApps” =
      {
        ”com.mal.icious” =
        {
          ”Description” = “Being really bad!”;
          ”App Name” = “Malicious”;
          ”Date Revoked” = “2004-02-01 08:00:00 Etc/GMT”;
        };
      };
    }

    As XML?
    <unauthorizedApps Date_Generated=”2008-08-10 00:19:33 Etc/GMT”>
      <BlackListedApps>
        <com_mal_icious App_Name=”Malicious” Date_Revoked=”2004-02-01 08:00:00 Etc/GMT”>
    Being really bad!
        </com_mal_icious>
      </BlackListedApps>
    </unauthorizedApps>

    — Bobby #

Respond privately

I am no longer accepting public comments on this post, but you can use this form to contact me privately. (Your message will not be published.)



§

firehosecodemusicplanet

© 2001–8 Mark Pilgrim