> this would not be an "API" as it is usually defined.

I beg to differ, and consider both definitions you subsequently give as incredibly restrictive as it would exclude some of the most used APIs in the wild. Everyone in the field will call the Twitter API an API, and everyone will agree that StatusNet implements the Twitter API.

That said, the consumer of the API is indeed AirPlay clients while the API is being served by Apple TV, Airport Express and AirFoil Speakers (Touch). But again this does not matter (and even if we called it a protocol, and really here we have multiple protocols at hand) and RA would have every right to implement it (just as Google implements the Java API, or Wine the Windows API, or StatusNet the Twitter API).

1. It is inaccurate in that it misses one of the most critical points of the discussion.

2. I agree that RA (probably) did not use any non-approved iOS API and that they have every right to implement the AirPlay API/Protocol. I maintain though that they can not make their implementation interoperate with existing AirPlay clients that encrypt the stream. Whether that falls under the "approv[able] API" wording is a stretch, but nonetheless possible. Even RA considered that case in their May 29th post. But this does not matter, since the rest of the phrase is linked to this one with "or".

3. No this does not. This says: "you do not have a license to do that". The fact that no such licensing scheme exists is relevant only in implying that they simply can't do that at all.

4. Apple's iOS developer agreement being quite vague, I'm pretty sure they could fit almost anything they want under this agreement, and this is bad.

5. According to RA, Apple rejected the app because they deemed it non compliant, and as such they "asked Rogue Amoeba to update their app to remain in compliance with our terms and conditions". Not detailing what was not compliant, however rough, does not make the previous statement false. The first Apple answer seems like the usual preset, generic and despicable answer. If anyone takes time to analyze and invalidate an application to such levels of detail, they should disclose their full process and reasons to reject the app together with the app rejection.

6. They do have a program, and it appears to exclude software makers. I find it very sad that it comes to such an escalating situation to at least extend the current licensing scheme to software manufacturers.

7. Agreed.

8. Both the part you cite and the point you make are entirely true, and the second part is simply outrageous. Apple definitely has to improve on that front.

So, did Schiller wrote an inaccurately worded letter? Sure it did. And while they handled the case in a heavy handed and awkward manner, can we call those purposeful lies? It might be, but I'm really not convinced. In the meantime Rogue Amoeba recognizes they "inquired as to the possibility of this type of licensing being available for software manufacturers in the future, [and being] informed that it was unlikely" yet still trying to push the update through approval.

What's more they go on to say, regarding accessing the encrypted content:

> "Quite simply, it is not. While there are multiple layers of encryption involved in the AirPlay audio streaming protocol, their primary purpose appears to be preventing third parties from building applications which interoperate with AirPlay."

In a word, they assumed they had the right to circumvent a mechanism protecting Apple's licensing scheme (however vile we think it is WRT interoperability), made a run for it, were caught red handed, and called out the web regarding the injustice. Maybe they genuinely believe they're right, but that does not make them the good guys.

To sum this up, I believe both sides are at fault, but I'm much more inclined to say that they are all acting in good faith, and that such matters would resolve with much less friction if there was not so much tension (mainly due to delay and opacity, which only increase the uneasy feeling that things are arbitrary) around the review process.