First things first, the title says ďwhy I donít like the hermes PayloadĒ so this has nothing to do with Hermes himself. I donít know him, I never spoke to him, so I donít know what kind of person he is and so I have no opinion on him personally.
Now, I want to make some things clear, Iíve seen a lot of people criticize me for Ďbashing Hermesí, and many people seem to think that Iím trying to say ďIím better than himĒ or something. Also, it looks like I created some confusion with my comments from my previous blog post. So I want to apologize and make sure there is no confusion anymore :
When I said that the hermes payload is Ďdangerousí, people misunderstood me.. no it is not specifically dangerous for your PS3, it wonít brick it or anything, the only Ďdangerí there is, is that it could (in some situations) crashÖ then youíd need to reboot, thatís it.. so donít freak out about his work being harmful or anything, because as far as I know, itís not!
Some people also told me ďgive credit where its dueĒ, and I want to do it, Iíve always given credit to people, every time I achieved something, I gave credit to those who helped me achieve it. Iím not looking for fame here (if I did, I would have announced PL3′s release 3 weeks ago when I created it) Iím just having some fun in my free time doing something that I like. Hermes did contribute some nice things, and I appreciate what he did, mainly he figured out how to fix the controller issues with some games, that was something very difficult to fix and Iím surprised at how fast he came up with a solution and it was a smart solution and all I can say is ďgood jobĒ. The other stuff he did in his payload, I donít like that much, and thatís what I want to cover in this post..
I may have been Ďharshí, but I donít see the point in trying to be diplomatic, Iím a programmer, not a politician. I donít like his code, and I speak my mind, Iím being honest, and Iím not trying to criticize him without any reason, as far as I know, Iíve stayed respectful and thatís all that matters to me.
To those who donít want to know about all the technical details, let me Ďconcludeí here by saying that if the hermes payload works for you, then good, use it, Iím not telling people to stop using it, Iím not saying that PL3 works better either, maybe his payload works better in some situations, maybe not, but overall, the userís choice should always be ďwhatever works for youĒ. The PL3 initiative is about having a standard repository for payloads, and having a common code base for everyone to work on, so in the future, PL3 might evolve faster and have more features, or maybe it wonít, the thing to note is that itís better for payload developers to base their work off PL3. But again, this is meaningless for most users, apart from maybe clearing up the confusion about all these payloads and nobody knows which one to use.
Also, I talked about PL3, which is a common repository for contributors to work on, people seem to have nicknamed it ďkakarotoís payloadĒ or ďkakarotoís pl3″, but I never said it was my payload, PL3 is PL3, itís not all my work, and if you look at the commit log, you will see that Iím not the only contributor to it. PL3 itself integrates patches and solutions provided by Hermes, Waninkoko and Mathieulh, I improved some of their patches to make sure it works better for non-3.41 firmwares, but itís still credited to be their work. PL3 is not my payload, PL3 is a payload repository for everyone. Also, PL3 as a project is a repository containing multiple payloads (default one, development one, dump_lv2, dump_elfs, etc..).
PL3 is not perfect, nothing in the world is perfect, so it might have bugs, it might not work for some people, who knows what might happen. But I never said that it was perfect, so people should stop thinking that I said that. Itís written more cleanly, itís better in terms of the infrastructure behind it, but thatís the only thing I can vouch for.
Also for those complaining about me adding a donate button to the blog post, I donít see how thatís relevant, Iím not begging people for money (and I havenít received any donations in the last ~3 weeks just so you know). If you donít want to donate, then donít, no reason to bitch about it. Iíve put the button there so that people who appreciate the work and want to donate something have a way of doing it. I asked for donations before because I needed to buy a PS3 for development, I already raised enough money to buy it, so I donít need any more donations, so Iím not asking people for donation money anymore, as simple as that.
Anyways, here are the more detailed/technical explanations on the reasons why I donít like his payload :
First, the code is not clean, itís unmaintainable. The fact that he gives his source code in .rar files instead of a git fork is the biggest issue I have with it. And yes, that does not matter for users, it only matters for developers. The problem with his method of delivery is that you have no way of knowing what he based his code off, so itís hard to figure out what he changed.. also, when you find out his base, and do a diff, you get a huge diff for everything he did, all in one shot, and then you have to reverse engineer it to understand what he patched. Thatís complicated and annoying for developers! For those who follow my twitter, you can see how many commits I do, I always like having ďsmall commitsĒ because each commit becomes independent, self explanatory and easy to review. It also makes things easier to integrate, if you want a specific thing, you just merge/cherry-pick that single commit, instead of copy/pasting code, and editing it to remove the clutter. The other reason I like git is that if he used it and I merge a commit from him, then the code stays credited to his name in the commit log, it allows me to have his code without Ďtaking ownershipí of his work, it allows everyone to be credited for what they did, and I think itís the first thing to have for an open source and community project.
The reason why I said his code could crash is because his payload got too big and couldnít fit anymore in the allocated memory we have in the kernel (1296 bytes), so he decided to just move the code to a random position (0x7fff000 I think). This means that his payload will work as long as no application, game or kernel allocates memory which Ďrandomlyí ends up in that area.. if it does, then the payload would get overwritten and the kernel will crash. The proper way of doing it (PL3 does that) is to allocate memory during the initialization of the payload, copy the functions we want in that memory that we own, and write those functions to be position independent so they would work no matter where they are placed in RAM.
Another reason is the way his syscall8 works, I tried to read his assembly and reverse engineer it, and I seriously was lost and couldnít understand what was happening.. there are no comments (youíll notice that my payload has a comment on almost every instruction), so how can I integrate his syscall if i donít even know what it doesÖ if at least it was on git, I could see the commit messages and understand what each chunk of code did, but he doesnít use git, soÖ
The way he fixed the controller issue was also not very good, he patched two offsets to jump to a function that decides on some kind of enum on what response to return and you controlled that with his own system call 8.. why do something like that? it makes the fix dependent on people using this new syscall, and itís useless when you can just patch it directly to return the right value.
I also didnít like the fact that his code became a mess that is 3.41 independent, and it would have taken a huge amount of work just to try to make it work again on 3.15. I already spent time cleaning up the payloads and making them work for older firmwares, so why fork and write code that doesnít integrate that, it just makes collaboration harder.
Thereís also the whole syscall 35 versus 36 issue, but that has nothing to do with his payload since I added sc35 after he released his payload. Itís not about his payload being bad because it doesnít support it, itís simply about PL3 having a Ďsuperiorí (if I may say so) system call. What it means for users? nothing at the moment, maybe it will be used for doing fancier stuff later on, maybe you can map a game to your bluray and a different game to /app_home, that could be useful for users, but for now, itís simply more flexible and cleaner code.
There are many other small things that I didnít like, but it mostly just summarizes to ďthe code is not clean and itís unmaintainableĒ and ďhe doesnít use gitĒ. Like I said, if you donít care about that, then I see no reason for you not to use his payload. It doesnít mean either that heís not skilled, it simply means that he may lack experience in code sharing and experience in open source. But that doesnít make his work any less valuable.
I hope this clears things up a bit. I criticized his work, said what I thought of it and people over reacted, I wanted to make sure people didnít misunderstand me, and didnít think I donít respect Hermes for what heís done already. Everything else is just drama and people trying to get attention.
If this post stirs up even more trouble, then so be it, I donít think I have much more to say. I said what I think, people should take it or leave it. I do not however tolerate people insulting me for no reason at all. So please, criticize me all you want, just stay respectful.