Hi Marc,

I want to debate a couple points from your post:

> 1. Distribution of GPL covered applications is not permissible via the App

> Store due to the Apple Terms of Service language, which infringes upon
rights
> granted under the GPL.
>
> 'Nuff said.

I'm not sure I agree with this, but there's so much wiggle room in
interpreting what the GPL means that there would probably be no way to
decide without a courtroom & judge, so I'll leave this part alone. =)  I
also haven't yet read your other post where you discuss this.

> 3.3.1    Applications may only use Documented APIs in the manner
prescribed by
> Apple and must not use or call any private APIs.

I believe that language only refers to *Apple's* APIs.  In other words, they
don't want you to call hidden functions that aren't supposed to be exposed
to developers.  If it meant no use of any APIs private to the developer, it
would rule out pretty much every application in existence, considering that
a call from one function to any other is an API call.

> However, the beta release of the 4.x version of the iPhone SDK has the
> following language in the same section:
>
> 3.3.1 — Applications may only use Documented APIs in the manner prescribed
by
> Apple and must not use or call any private APIs. Applications must be
> originally written in Objective-C, C, C++, or JavaScript as executed by
the
> iPhone OS WebKit engine, and only code written in C, C++, and Objective-C
may
> compile and directly link against the Documented APIs (e.g., Applications
that
> link to Documented APIs through an intermediary translation or
compatibility
> layer or tool are prohibited).

Here again I believe the "private" API language refers to
unsanctioned-but-exposed pieces of Apple's platform that you're not supposed
to touch.  The language restrictions I interpret to mean that if you call
their Official API hooks, you must do it from one of the Official Languages.

However, FORTRAN code will never call Apple's API hooks, it just does its
little matrixy/FFT/etc. stuff and returns the results.  In the call stack,
FORTRAN is always a dead end.  It doesn't call Apple's APIs, and it doesn't
call a translation layer that calls Apple's APIs.  So again, R may be in the
clear here, under this interpretation.

Note that Java & Flash applications, under this interpretation, are *NOT* in
the clear, because they do call GUI APIs (among others).

> 3.3.2    An Application may not itself install or launch other executable
code
> by any means, including without limitation through the use of a plug-in
> architecture, calling other frameworks, other APIs or otherwise. No
> interpreted code may be downloaded or used in an Application except for
code
> that is interpreted and run by Apple's Documented APIs and built-in
> interpreter(s).

I think this indeed pretty effectively rules out installation of packages
from CRAN, which is a bummer - unless those modules are downloaded &
installed through the app store.  Not sure if that would even work though,
since they're not apps.

As for the "interpreted code" stuff, there's so much murkiness about what
constitutes interpreted code that I don't know if this is a deal-breaker or
not.  At one extreme, it could prohibit pressing buttons in an app and then
"interpreting" those presses as commands for the app to "do something."  At
the other extreme,  Somewhere in the middle, it would seem to cover language
translation apps.  The notion of "interpreted" is just not very
well-defined.  For instance, most people think of Perl as an interpreted
language, but it compiles to bytecode before executing just like Java (it
just doesn't typically save it to a bytecode file).

Finally, I do agree with the general tone implied in your post - it is a
major major hassle that Apple's overlords control the distribution channel
for software on non-jailbroken iDevices.  I don't like it at all, for the
exact reason that people like you & me & the rest of the world now have to
sit around speculating whether our helpful apps will pass muster with the
cabal.

 -Ken

	[[alternative HTML version deleted]]

