Warning: Panda3D Runtime is NOT self-contained!

The 2MB MacOSX "Panda3D Runtime" appears to be a cheat. The first time you run it, it silently attempts to open a network connection and download a bunch more stuff.

I find this offensive for two reasons:
The implementation is also flawed in various ways:

(log in to comment)

Comments

I installed it (on a Mac too) with intense suspicion, but I was pleasantly surprised by how smoothly it worked. It may be optimized for broadband connections, but since I have one I had no issues with it.
What Mac system are you using?

It doesn't work so smoothly for me on MacOSX 10.4.10. After letting it download another 120MB of stuff (which it hides in a non-obvious per-user cache location) it falls over, silently.

Digging around revealed a log file containing the following:

Failure on startup.
Traceback (most recent call last):
  File "VFSImporter", line 153, in load_module
  File "/Users/rdb/pandaworker/panda3d-1.7.0/built_cmu/direct/p3d/AppRunner.py", line 35, in <module>
  File "VFSImporter", line 153, in load_module
  File "/Users/rdb/pandaworker/panda3d-1.7.0/built_cmu/direct/showbase/DirectObject.py", line 7, in <module>
  File "VFSImporter", line 153, in load_module
  File "/Users/rdb/pandaworker/panda3d-1.7.0/built_cmu/direct/showbase/MessengerGlobal.py", line 5, in <module>
  File "VFSImporter", line 153, in load_module
  File "/Users/rdb/pandaworker/panda3d-1.7.0/built_cmu/direct/showbase/Messenger.py", line 8, in <module>
  File "VFSImporter", line 153, in load_module
  File "/Users/rdb/pandaworker/panda3d-1.7.0/built_cmu/direct/stdpy/threading.py", line 28, in <module>
  File "VFSImporter", line 153, in load_module
  File "/Users/rdb/pandaworker/panda3d-1.7.0/built_cmu/pandac/PandaModules.py", line 14, in <module>
  File "VFSImporter", line 153, in load_module
  File "/Users/rdb/pandaworker/panda3d-1.7.0/built_cmu/pandac/libpandaphysicsModules.py", line 2, in <module>
  File "/Users/rdb/pandaworker/panda3d-1.7.0/built_cmu/pandac/extension_native_helpers.py", line 79, in Dtool_PreloadDLL
ImportError: dlopen(/Users/greg/Library/Caches/Panda3D/hosts/runtime.panda3d.org_96a0ec538744def6/panda3d/cmu_1.7/libpandaphysics.dylib, 2): Symbol not found: _setcontext
  Referenced from: /Users/greg/Library/Caches/Panda3D/hosts/runtime.panda3d.org_96a0ec538744def6/panda3d/cmu_1.7/libpanda.dylib
  Expected in: dynamic lookup
Wow. I have a MBP (Intel) with 10.5.8. I installed the runtime and went to http://protonode.dogzgaming.com/p3d/pw1.html to check out "Tang". The plugin appeared in the browser as a sort of radioactivity sign while it downloaded "Tang" then the game appeared and worked fine. I closed this page and went on to try "etre". I just doubleclicked on etre.p3d and it started the game.

Now I have looked at my installation and I have libpanda.dylib in the same directory (that hash thing is the same too). So I think we have the same binary... Maybe Panda3D was not tested much on PPC Macs? I'm afraid it's hard for developers to support a platform which you cannot buy anymore.
Yeah,I seem to recall when I tried to install Panda3D for the last Pyweek, it was a 90Mb download. This is less than a YouTube video, but still.

Actually, it's not Panda3D in general that isn't self-contained. It's up to the author of the p3d application. A self-contained installer that holds all the requirements is possible. We just rushed at the end to pack it up and get it uploaded on time. This and we didn't want to bloat the initial download. I absolutely agree that it was unwise of us to explicitly state on the entry page that the runtime would download dependencies automatically. I apologise for that.

Secondly, to answer your question about how much is downloaded from the server, it depends on the list of requirements written up in the package definition (or pdef) file. In the case of ETRE, here is the list:
  •     "morepy" - A collection of the default Python modules (this is required because our game is programmed in Python, and it's not shipped in the core runtime by default because Panda3D is a C++ engine with users who don't want to use Python as well).
  •     "panda3d" - The engine itself. Remember that the runtime is merely supposed to be the bootstrap to get a p3d application running without forcing the user to have to wrestle with the SDK; and as I said, the distributor (e.g. rdb and I) could have self-contained it, but then it would have been a bloated download just to get the application.
  •     "fmod" - An audio library; used for Win32 and Darwin based platforms because Panda3D's OpenAL implementation showed issues on these platforms.
  •     "openal" - An audio library; used for other platforms (Linux, BSD, etc.) because Panda3D's FMOD implementation showed issues on Linux.


You can find more information on these (and other) packages as well as the p3d packaging system at https://www.panda3d.org/wiki/index.php/Referencing_packages. Again, I apologise for the lack of forewarning.

As for the issues specific to OS X, that's out of my scope of expertise; sorry. rdb may know more about this due to his greater familiarity with the core engine.
Er, I mean *to not explicitly state on the entry page that the runtime would download dependencies automatically. Sorry about that.
Actually, it's not Panda3D in general that isn't self-contained. It's up to the author of the p3d application.

Oh, I have no problem with the game not including the Panda3D library. My disappointment was with the "Runtime" downloadable from the Panda3D site, which it claims "provides everything you need" to run Panda3D games. This turns out to be highly misleading.

But it turns out that Panda3D seems to be a complete non-starter on 10.4 anyway. I tried compiling it from source, and got a pile of undefined library symbols.

The Panda3D site is pretty unhelpful when it comes to system requirements for MacOSX. There is no mention I can find at all of what version of MacOSX you need to either run or build Panda3D. There are sections in the manual about building from source on Windows and Linux, but none for MacOSX. Mac support still seems to be something of an afterthought.
Although I see your concern about the misleading "provides everything you need" on the website, it is still true in an indirect way - the installer may not install everything, but the runtime itself does make sure that the user has everything necessary to run the game. We used this terminology to indicate that this is the only thing the user has to install manually.

We have many reasons to distribute the runtime like this, the most important one being that we can update the Panda3D installation (at http://runtime.panda3d.org ) at any time. The user will hopefully never need to update the runtime package itself, as the runtime updates itself by downloading patches from the website when a game is ran that requires a more recent version of Panda3D.

The runtime itself should be displaying a progress bar an an indication that it is downloading required packages. If that is not the case for you, it may be caused by a bug that will be fixed in the upcoming version.

If we had time, we'd have used the utility shipped with Panda3D that stores all of the dependencies in a single installer package. But given our time-frame, uploading a .p3d package seemed like the most straightforward way to share the game, and to cut down on the download size.

Also, while it is true that our main focus is Intel OSX 10.5 and above, we do test the runtime on 10.4 and PPC machines - it surprises me that you ran into that particular error, and I don't believe I've seen it before.
I'll investigate more about that particular error, although that's not going to help for this pyweek. But still, thanks for reporting it. We do care about 10.4 and PPC versions of Mac OSX, and we try to do everything necessary to make and end-user experience with Panda3D as pleasant as possible.

There is documentation in the actual source archive for building the SDK on MacOSX. I did not realise that the Panda3D manual did not contain information about this - that I will fix. On the other hand, compiling Panda3D on MacOSX is more trivial than on other platforms, that is probably why there is little documentation about it on the manual.
For the record, after installing the XCode Developer Tools and extracting the source archive, compiling the Panda3D SDK is as trivial as:
python makepanda/makepanda.py --everything --installer
That will generate a .dmg file in the current directory that contains an Installer package.

About your linker errors; feel free to visit the Panda3D IRC channel (on FreeNode), report the errors on the forums or at the bugtracker on LaunchPad. It would be greatly appreciated as we can use that information to improve Panda3D.