This is because Petri-Foo references external files. So for a saved session to be portable, external files need to be incorporated into the session in a way which doesn't unnecessarily multiply disk usage, nor require hand-editing by the user in order to use the session after transfer to another location.
Note that these two requirements almost contradict each other but in fact represent two different states of a session: its working state and its archived state. While the project is unfinished, in a state of being worked on, the external files are represented within the session on the file system by symbolic links rather than by having been duplicated byte-for-byte within the session.
However once the project session has reached the end of its working life and is ready for its archival state, the user simply (on *nix systems at least) issues the tar -h command. The resulting archive file will then contain copies of all external files rather than links to them. The single file can then be transferred to another machine on the other side of the world where the session data and files can be extracted without unnecessary worry about file system paths.
But now I want to go on a slightly different tack away from these technical concerns to more subjective ones. I'll start by mentioning it took some effort to make it all work.
I recognise I'm starting to face problems head on that perhaps a year ago I might have put off or eschewed in favour of probably easier tasks. In particular, at concepts which have required me to really look and identify what should be happening, and, when and where it should be doing so.
Funnily enough, that is actually a staple of how I spend my time when programing so is nothing new but rather I feel I've reached a new level through doing so.
Soon after the initial release of Petri-Foo first featuring NSM support - which you can probably guess I was quite proud of - I became very frustrated with Linux Audio. During the same weekend I presented a talk about JACK to my local Linux User Group which I felt went very badly. I had only half the presentation planned out and those plans fell out from beneath me shortly after I first opened my mouth. Several people had absolutely no idea what I was talking about and the general consensus seemed to be that using Linux for music production/recording/etc was far too complex and proprietary solutions on more mainstream platforms were the best option.
So amongst other things I felt for the million-billionth time in my life sorry for myself once again. I can't be bothered to go into the exact reason why, I don't want to dwell on it because I didn't dwell on it for long because a day or two later I quickly forgot all about it because I discovered a bug in my code. The kind of bug which would have given anyone who downloaded Petri-Foo the impression I was speaking out of my arse about NSM support. Damn.
Luckily that bug was easy to fix and a new release was made. Then a few days later another bug, but this time the far trickier variety. But again, today it is fixed and a new release made.
Shortly before all these frustrations took hold I decided I would try to improve the situation around session support in Linux Audio by adding support for NSM to JACK Rack (another program written in the C language). I made some much needed changes to get it compiling again and through much I have learnt about The GTK+ Project recognized basic mistakes in the user interface. Adding the basics for JACK-Rack to support Non Session Management wasn't nearly as difficult as for Petri-Foo.
Here's how it can be tested out:
git clone https://github.com/jwm-art-net/jack-rack git checkout nsm-support ./autogen.sh ./configure make sudo make install
I posted about my efforts to the jack-rack-devel mailing list and after a few days and a few more posts received response.
I am pleased to say that I am now offically a developer for the JACK Rack project.