dflemstr said:
Hey skeezix, good to see that you're back, finally
The situation with IPKG vs PND was cleared up on the ensuing page, so you don't have to have any worries about that there are angry unenlightened users that have been ignored on these boards
When I presented my system here, I expected it to be pretty rough and lots of people complaining and mentioning issues that I ought to have thought about etc. and of course this was the case, but so far there haven't been any unreasonable complaints and we've been able to have a constructive discussion.
I really think that we should have a session sometime somewhere where we discuss the PND and PXML issues in depth; it seems like a lot of people have found issues with the formats and/or would need to have features that the formats don't provide, so it would be really helpful if we could discuss and solve them all once and for all.
Issues so far (that I can recall without looking through 20+ pages of posts in various threads):
- 1 The current PND format makes it impossible to deterministically tell where the binary (ISO) data ends and the PXML data begins. The same is true for the PNG screenshot
- 2 There is currently no official support for PGP signing of PND packages
- 3 There are potential exploits that can be ...well, exploited with the current PND format, by creating a file that starts and ends with the "<PXML></PXML>" pattern but contains dangerous data, and putting this file in the middle of the PND ISO image
- 4 The ISO format is suboptimal for packages (there are multiple KB that are wasted and the ISO byte alignment makes files difficult to read); so far, the uncompressed TAR format has been suggested as a good alternative
- 5 There are feature requests for libpnd and the PND discovery daemon; for instance, we'd want there to be an index file available in a known location containing all the mounted and discovered PND files along with metadata
- 6 There is no official repository spec for the PND system at the moment; I had to make one up in my PND Manager.
Don't see this as an extra weight lain on your shoulders; the community is happy to help out with any of these issues if you let it.
- 1 -- we debated (endlessly!) various options, as we've talked about before; using zip files, cram files, etc and so on. And just using plain simple .iso, and prepending or appending a header/footer 'table of contents' to let skipping around be easier. (In fact we even implementeed that for awhile.) However, in the end, 'simplicity' won out over going for complxity. The simpler it is, the more we can optimize and extend later, without being 'over commited' to complicated things. Further, with some testing (hey, this is spare time, we only had so much..) we foiund iso's nice and fast, and reliable. (Remembering we have to fight with drivers and speeds and all sorts of nightmare scenarios.) file + append was easy, and also works with zip (since zip comments are just appended to the end), and a few others. so we went with it. Its not perfect, but its a start, and it works. (ie: Like RSS and other standards.. if its heavy, no one will adopt; you start small, gain acceptance and usage, and _then_ you grow and extend.) There _are_ ways to calculate the end (if its an iso you can often determine the image size and such and skip around, but it is not pretty of course.) A reverse rewind is relativelyt easy and generally works.
Yes, there are edge cases, or attack cases, but thats true all the time. The package sites can vet out the bad files perhaps
If the PXML is not appended, and since iso is plaintext format (uncompressed/etc), then a reverse find will _Still_ find the PXML. If theres no PXML at all, the reverse find is I think capped to stop near the end (I think I added that, I forget).. worst case it seeks and fails. (Well, worst case it seeks and finds binary data for an .exe with a PXML parser, but that should fail PXML content validation and be rejected.)
The _icon_ should work okay, but again, it can be tortured. (Screenshots are not handled thia way. For awhile when we had the 'toc' (table of contents) header, we could skip right to screenshots, but we decided (blame me I think
that it was easier to just pnd_mount the .pnd or PXML-dir, and then pick up the screenshots, and then unmount. (ie: Thus putting off the caching of screenshots etc to the consuming applications, which seems wise in this case.)
2 -- an interesting question. Of course, 99.9999999% of the world has lived without PGP signing till this day, and it was added later to existing protocols/etc too. So we don't need to solve every possible problem day zero, either. (And also recall, a few people in their spare time. If IBM and MS can't pull off something, its amazing people sometimes think OSS hackers can in a few hours
Anyway, you've proven yourself, you can help think up something. (Really, you've probably spent as much time on your tool as I have on pnd/pxml myself
)
3 -- exploit in what way? ie: If theres a buffer overrun etc, let me know; as to file format, that sort of thing shouldn't really be any more dangerous than putting the 'executable is rm -rf /' into the PXML. (And if that didn't occur to you the very first day ED mentioned PXML, then you're slipping
4 -- iso is not really wasteful. No one is oging to quible over a very _K_ on a multiGB card. Someone mentioned the minimum iso size was XXXXMB, but they werew qway off. You can have a 20k iso if you want. .iso is very easy to work with by every OS, is easily mountable and so on and so forth. I don't know if a tar (tar is always uncompressed, a container compresses it. .Z or .gz or .bz etc) is mountable, but its an option. The PXML can specify alternative package types, and using 'magic' or any number of techniques .. it should be pretty easy to add to libpnd to handle it. (ie: We've _assumed_ there would be more types, like cramfs and zip and so on, since day one.)
Again, it doesn't have to be 100% super right (there is no true 'correctness').. it has to work, and be a compromise of everyones goals. (Some want size, some want speed, some want ease of condtruction or repacking..)
5 -- If someone wants to make requests.. they shoudl be sending them to me (duh), or offering to make the change (the source has been available publicly since day one.) Since I've not heward of it, there is no request, probably
Certainly, once we 'go live' (or even before, be my guest) I'm going hands off. I had really hoped to pour a few hundred more hours in that I had time for, but this whole economy, layoffs and general life has really killed most of us (myself, vimacs, djwillis, notaz, the core devs, we're all suffering
..
So no way do I want ot be a 'gate keeper' .. people are free to submit patches, or take it right over. We can add permissions ot check in any time, if someone seems to have a clue
Anyway, there 'so far' will be few mounts at once, and _all_ of them will be in a well defined location. (The config files and sh scripts pnd_run etc make it all ovious.. but all mounts will be in consistent locations. The raw ount and the iunioned app-data mount.) The libpnd API includes functions to ask for what these places are. ie: No index is needed, as the filesystem is that index.
In the future, we allowed for the idea (but we didn't code it in yet) to have somehting like a dir that has 'pre-mount' pnds.. say you want to have shared libs bundled together (or a codec pack, say) .. put them in a dir on flash or SD and at boot time, have all those mounted permanently, say. In that case there would be many pnds open at once, but we've not coded that in yet ('worry later' is better than 'take on too much at once.'), and further, it should be as easy as the above.
Right now, however, mounds should be all in one place, and likely only one or two mounts open at once anyway (probably one, the current app), so not a big deal.
But as to requests anyway. fire 'em over.
Most of my interest right now, in what little time I've got, is fixing up some robustness. I mean, theres some lame-ass stuff in there -- the important bit is the API is half useful and half-well-designed. The implementation details might be great, or might be crap in any given spot. Thats okay, we the community have many hands that can improve over time. (It will be included as shared lib so in theory non binary breaking changes should be easy to magicly apply to all apps.)
(Further, since source is all available, I would fully expect peopel to improve as they see fit. Again, it will not be "100% done" on launch, and it certainly will not be "skeezix's baby, hands off". No, we all (the dev team and us, and you guys, doubly so yourself) habve had a hand it in, and we put it out for everyone to hack on
6 -- yep, you are right. I know I've not the cycles for it, and I am very thankfully you're taking the charge. If you've noticed, I've been referring peopel to bug you about it (teehee
--
I hope that doesn't sound like I'm washing my hands of it.
I'm actually pretty good at managing some of these things, and what I'm aiming for her is .. "get it good enough, and reasonably well designed for the future obvious needs". If we over design, you risk the complexity hangfing you, and we really dont' want fragmentation. we want adoption.
All told, I don't evne know if a single person will use any of this though, but I hope it works and people use it
If anyone wants to help with the coding and testing, feel free to hook up. We've really not had the resources to test the hell ouf of this.
I realyt shoudl be working on a public documentation wiki, to copy in these long posts, and to start a 'how to' and 'API manual' and such.
But for now, suffice to say -- the API and suh is by no means perfrect. Feel free to take a look and let me know if you hate my function names, module design, etc. None of it is set in stone, at least unti llaunch day
jeff