At some point in the past, when I was still thinking that Glest can be packaged in a sane way, I had a conversation with upstream developer martinho on the Glest forum (they call it board) about them integrating a patch in order to support big endian machines.
After some messages on their board, it was clear that they don't want to integrate any patches and started to throw out random fake arguments against the integration of my patch and other patches.
When he figured out that I replied and debunked all of his fake arguments, he went on and actually removed my posts from the forum. It was so weird since I have never seen that kind of behaviour before and some of his posts and other people's posts were replies to my posts and things didn't made any sense after the deletion.
At that moment I have managed to save one small bit of the conversation via Google's cache, but now I have finally decided to make it public.
Note: Back then, I kept this post private in the hope that I was maybe too involved in the conversation at that moment to make a rational decision about it, and hoped things would get better in time. They didn't. Meanwhile they migrated to another forum software and they said they lost most/all(?) of the previous content from the old forum.
Here is the conversation bit I managed to save.
Original text is in italic font. Regular font is for my current comments for clearing up the context of the discussion. The text retains the BB syntax and [quote]-d text is martinho's own words.
[quote="martinho"]thebohemian, eddyd,
I think you guys are missing the point, this is not the place for any [/quote]
Congrats, you are avoiding to answer the points I have raised.
[quote]
- The Glest project is made by a bunch of friends for fun, we ask for nothing, we answer to no one. So I beg you not co complain, because it is out of order.
[/quote]
In that case I don't see the point of the "development" forum. care to explain?
And, from my PoV, these are your users you're arrogantly dismissing.
The following was a reply to my request to add big endian support through a patch I provided at that time. The patch wasn't complete to actually make glest work on BE machines, but it didn't broke little endian support at all. He was trying to argue that there were no valid big endian machines on which the game would run. Integrating the patch would have made my life a lot easier in continuing the work on the patch.
[quote]
- Our target plarforms are PCs running Windows (I'm responsible for this) or Linux (matze is the boss here). We don't care if Glest doesn't run in a big endian dishwasher with Solaris.
[/quote]
Linux on PowerPC is a viable platform. So is Mac OS X on PowerPC.
I made the mistake of saying that some parts of the code where not that clean and could be improved. More on that below.
[quote]
- One of the keys of Glest success is how extremely clean our code is. Bringing random people in would break this, and we are not going to do it. [/quote]
So you are the only keepers of true knowledge of clean code? Hahahaha!
There were at least 3 patches that provided this through word/double-word swapping. I don't see how embedding the patch can affect the unity of the code.
BTW, you are aware you can "carve" people into coding in your style before accepting in, aren't you?
I suggested using int8, uint8, int16, uint16 in order to make sure that the parameters are of the expected fixed size since plain char, int, long, long long have different sizes depending on the architecture. The usage of int and int16 was inconsistent and I also suggested using always the numbered variants.
I said the approach that was then taken in code was not portable and that was the reason for the proposed change.
[quote]
- Glest has been coded with portability in mind, some of your comments about portability are really naive (compilers don't care if you declare function parameters with fixed byte length, they just use whatever is the fastest int in the platform). Fixed length data types are used when needed,
[/quote]
What? When did I say anything about that? I said the code uses inconsistently "int" and "int16" and should use the later always because the code assumes the sizes on i386, which are not always applicable - see long on amd64.
If you mean that I can't enforce the width of the parameter, then you should know better, those types are defined in a platform dependent way to be platform independent. Yes, there are cases where [b]on the stack[/b] the size of the passed data is bigger (they might be padded), but that is transparent to the functions and, in spite of that, the functions will see the proper values for the parameters.
Also, the packing behaviour is compiler and architecture dependent, and some compilers produce the weirdest packing (if you are allowed access to such docs, look for Green Hills compilers' for V850 and you'll be stunned).
Please, don't make a fool of yourself by trying to discredit me, just not to loose face.
Later he just removed my posts not to loose face.
As a sane programmer, I made my patch to do the swapping only on big endian platforms, and the code was enabled in through the precompiler, so there was no performance hit on the little endian arches.
Of course, any more-than-newbie programmer would agree that having two data sets for a single game is stupid and is better to do the swapping in the application itself to avoid space wastage and maintaing an alternate big endian data set.
[quote]
no more, no less. About endianness, we don't care. If we wanted to fix the problem anyway, the right way is to do the byte swap in the data, this is how it is done in commercial games, since it is more efficient.
[/quote]
You just proved how much bullshit you can deliver in one phrase just for the sake of winning an argument. All portable games and all applications that have data files prefer to do swapping on the spot just because swapping the data on the disk (or providing BE and LE data) is plain stupid and inefficient from a disk and bandwidth PoV.
For Glest, swapping the data after reading from disk is not even affecting performance in a manner that could be significant or noticed, not even for a processor running at 500MHz, since that would be done only on load, once, and just for the bits of data which are relevant; these are mostly headers, since the actual data, in most cases, is just a long byte vector. This translates in not more than 3 or 4 instructions in assembler (an init, an exchange, an increment and/or a loop instruction), and that would happen before starting a game, which is dead time anyway and wouldn't be noticed unless the data would be huge (order of hundreds of MB or GB) and the whole data set would need swapping.
Even if the data itself (not headers) represents data which needs to be swapped, that is still irrelevant in terms of speed.
BTW, the reason that in commercial games it might be done like that is because there the games are distributed in a package per platform anyway and having two data sets is not an issue since they are using the same amount of CDs/DVDs, but doing the same for a game like Glest would mean doubling the storage used and it would increase the complexity for a release, not to count the confusion of the users.
I still doubt commercial games do this, but I might be wrong.
14 comments:
Your post is useless by this point on.
[quote]
- The Glest project is made by a bunch of friends for fun, we ask for nothing, we answer to no one. So I beg you not co complain, because it is out of order.
[/quote]
You're probably confused regarding FOSS. If I have a project and I don't give a fuck about you you're free to fork the project.
Your attitude is just childish. "te spun"
"The Glest project is made by a bunch of friends for fun, we ask for nothing, we answer to no one. So I beg you not co complain, because it is out of order."
Wow, this sounds just like XFree86 :)
You're probably confused regarding FOSS. If I have a project and I don't give a fuck about you you're free to fork the project.
I am not confused, is just I wish they stop the bullshit arguments and plainly say something like:
"we are not accepting any patches, we're just using GPL and publishing it because we want to prove we're cool".
They had a "Development" section in the forum, but I concluded it was done to discourage actually the creation of forks by giving a false sense of openness.
EddyP
To the question if commercial games do that kind of swapping in data/loading:
I don't know any current commercial game doing this. There were some in the past. Take a look at the stuff which scummvm supports. Some have completely different data formats for a specific architecture and some have only smaller changes. Sometimes scummvm isnt (or wasn't) able to detect these differences and you had to say which version of the game it actual is. Most of that issues are currently workaround-ed by using md5sums for such "horrible" data files to detect the real architecture.
Maybe there are some entertainment systems around which just mmap their files from a rom and do the byteswapping of the original files.
Nevertheless a horrible discussion. Not always the nice way you stated your point but definitely not the good way they handled it.
Some projects are simply not suitable for packaging: It's their prerogative to not accept patches, however silly it might seem to others.
I can confirm that both the Unreal engine and the Quake III engine (extremely well-respected commercial game engines, licensed to numerous companies other than their original developers) have architecture-independent data sets. Both use the same resource files in the Mac OS port (big-endian powerpc) as in the Windows original and the Linux port (little-endian i386).
The open-source variants of Quake III, such as ioquake3, also work fine on 64-bit platforms (after a few rounds of exactly the sort of porting you're trying to do).
You might find them difficult to deal with, but my respect goes to them because they are not calling you 'dick' on their blogs.
Blah. Until they bother fixing their fubared network code so self-compiled clients no longer lose sync and crash in a network game or update their renderer to use OpenGL 2.1, why get upset with them?
Eesh, they still think its alright to use GL extensions that over half their user's video cards simply do not support. But hey, that is "free" software for you and we are all entitled to fix their screw ups for our own needs or wants, right?
Anon: You might find them difficult to deal with, but my respect goes to them because they are not calling you 'dick' on their blogs.
Yes, since being a coward, hypocrite spine-less person which doesn't accept defeat in a reasonable argument deserves more respect than being honest.
Some projects are simply not suitable for packaging: It's their prerogative to not accept patches, however silly it might seem to others.
Yes, I agree, but at least say that, instead of pretending to be open and accept patches. I saw multiple posts where people are encouraged to make modifications to the game, but I know of no such modification being integrated back into the code, except the Linux port stuff.
What do you expect from game programmers?
Eddy
If they do not want to integrate your patches, or anyone else's it's their prerogative. Your note they are using GPL to just prove they are cool is also not valid because GPL does not bind them to accept any community patches. Development forum they have might be all for if you want to make a modification for your "own" purpose, you can ask questions there. Or even if it is otherwise, you can choose not to go there.If you don't like any of this, you can complain but calling them really bad names and that too in myltiple posts, is nothing more than childish.
And remember, they wrote the program, you just wrote a few lines patch (that wasn't even complete)
If they do not want to integrate your patches, or anyone else's it's their prerogative. Your note they are using GPL to just prove they are cool is also not valid because GPL does not bind them to accept any community patches.
I called him dick because he erased my comments when he lost the argument.
How can everybody overlook that important part?!
If you are still interested in packaging this game could you do the byte order swap of the data as a one off post-install step? Then the data could stay the same for all architectures up until it got installed, and upstreams code wouldn't need to be patched. Just a suggestion, I don't know if it's a good one (or possible)!
Of course you still have the problem that upstream might not accept other necessary patches to get it working on different architectures.
BTW I know of MapServer which does the byte-swapping on the spot, not by creating different data sets for different architectures.
Post a Comment