Become a MacRumors Supporter for $50/year with no ads, ability to filter front page stories, and private forums.
Maybe get a hold of this Jonathan Walters chappy. He claims to have got Classic running on a G5 under Leopard already, although what "work" actually means in this context isn't exactly clear. This came from the Action Retro account on Youtube.
View attachment 1932604
Let's try to get ahold on him. If he is telling the truth and is able to get classic to work on Leopard, that would be great. If he isn't, we just got to keep on trying.
 
  • Like
Reactions: Project Alice
I still don't think its possible.
i believe it would work if you patched in the needed symbols to leopard's binary, as i mentioned in my other post. people have been doing similar stuff to old windows versions for many many years (people were making wrappers like this for windows 2000 as far back as 2005 or so)
 
i believe it would work if you patched in the needed symbols to leopard's binary, as i mentioned in my other post. people have been doing similar stuff to old windows versions for many many years (people were making wrappers like this for windows 2000 as far back as 2005 or so)
I agree with you, but there is difference between the windows world and Mac world.. I don't think its out of question, just someone needs to test it. Tell me what needed symbols are needed.
 
It is not just the SYMBOLS, but the Apple private entry points providing specific services to the Classic environment. These might link all the way to kernel services.
I suspect they became tedious to maintain and not worth the effort.
 
  • Like
Reactions: Doq
That's probably why I'm so hung up on it. It might be more feasible to reimplement Classic from the ground up. Perhaps adding some features back that Classic removed like, perhaps, a proper desktop/fullscreen mode?
 
  • Like
Reactions: AdamBuker
It's been an age, but I once hacked a PowerPC app (out of necessity as I didn't bring the CD for a game of mine on some stupid vacation I was dragged into as a kid so I hacked the game to bypass the protection check), and I remember it as being trivial. I mean so trivial that I had previously not known how to use gdb or assembly and figured it out in maybe an hour. Every such check (or a cluster of checks which is likely here) will boil down to a branch if equal or branch of not equal which, IIRC (it's been decades), meant flipping a 0x40 to 0x41 or visa versa in POWER machine code.

I don't have a PowerPC based Mac but suggesting a fix will require source code strikes me as premature, especially since these days hackers not only have disassemblers but full blown decompilers.
 
It's been an age, but I once hacked a PowerPC app (out of necessity as I didn't bring the CD for a game of mine on some stupid vacation I was dragged into as a kid so I hacked the game to bypass the protection check), and I remember it as being trivial. I mean so trivial that I had previously not known how to use gdb or assembly and figured it out in maybe an hour. Every such check (or a cluster of checks which is likely here) will boil down to a branch if equal or branch of not equal which, IIRC (it's been decades), meant flipping a 0x40 to 0x41 or visa versa in POWER machine code.

I don't have a PowerPC based Mac but suggesting a fix will require source code strikes me as premature, especially since these days hackers not only have disassemblers but full blown decompilers.
There is a gigantic difference between bypassing a CD check and tweaking a core part of one version of an operating system to work in another version, and it's not as simple as flipping a few bits around.

The Classic component makes many, many calls to core OS frameworks-- some of which are very different and maybe even nonexistent in a different version of the Mac OS. That's not to say that source code would be required, but it would be a monumental-- perhaps even unimagineable task without it.
 
The Classic component makes many, many calls to core OS frameworks-- some of which are very different and maybe even nonexistent in a different version of the Mac OS.
Is this known for sure or just an assumption? Apple has a nasty habit of doing version checks that I've had to bypass in the past.
 
Is this known for sure or just an assumption? Apple has a nasty habit of doing version checks that I've had to bypass in the past.

Literally from the OP:

More specifically, it's looking for several special symbols in the ApplicationServices binary that it can't find, because the one that shipped with Leopard doesn't contain them.
 
I managed to run classic in the development versions (beta versions) of leopard, I believe it is possible to play with exchanging files with the beta version, but unfortunately I can't do that because I only have notebooks, and that would require a desktop with a second hd to not be extremely laborious and tedious .
 
Few month ago i try to reverse frameworks. Globally all classic-environment specific functions are replaced with stripped down versions, stubs which does nothing, or unconditionally signales about failure, few are removed completely. At least CoreGraphics dependency (partially) must be reimplemented, because of it communicates with WindowServer and some things are not implemented at WindowServer side. WindowServer cant be simply replaced at runtime like libraries. Other required frameworks, i thnik, can be replaced at app-level with older versions from Tiger.

With few hacks and stubs (which return success) im able to run and debug TruBlueEnvironmet, it even does something. I not found how exactly app launching are works inside it, so it still useless, but works. :)

Classic Startup crashes somewhere inside AE framework, even with replaced with older version around at some place.

C:
#include <stdio.h>
#include <mach/port.h>

/* --------- Bindings to ApplicationServices --------- */

struct CPSConnection;
typedef struct CPSConnection CPSConnection;

extern int _CPSGetCurrentProcess (CPSConnection *c);

// while present it are non accessable?
// it is just a wrapper to a Mach Port RPC, so it can be regenerated?
//extern int _CGSCheckInNewProcess (mach_port_t port, TODO...);

/* --------- Wrapper Impementations --------- */

int CPSGetCurrentProcess (CPSConnection *c) {
  fprintf(stderr, "Wrapped CPSGetCurrentProcess!\n");
  fflush(stderr);
  int res = _CPSGetCurrentProcess(c);
  return res == -600 ? 0 : res;
}

// task --- ???
// c --- connection
// copyFlag --- ???
// name --- buffer for name
// nameSize --- size for name buffer, strlen(name)+1.
// type_id --- file type (TruBlueEnvironment pass "APPL")
// creator_id --- ??? (TruBlueEnvironment pass "bbox")
// out1 --- ???
// out2 --- ???
// out3 --- ???
// out4 --- ???
int CPSRegisterChild (void *task, CPSConnection *c, int copyFlag, int flags, char *name, int nameSize, int type_id, int creator_id, void **out1, void **out2, void **out3, void **out4) {
  fprintf(stderr, "Wrapped CPSRegisterChild! name=%s\n", name);
  fflush(stderr);
  *out1 = (void*) 1000;
  *out2 = (void*) 2000;
  *out3 = (void*) 3000;
  *out4 = (void*) 4000;
  // TODO
  // _CGSCheckInNewProcess
  // TODO
  return 0;
//  return 1006;
}


int CPSIsClassicRunningInAnySession (void **data) {
  int res = 1003;
  *data = NULL;
  return res;
}
Code:
# skip installation of exception handler which brokes gdb
# note: this addresses are specific to latest Tiger TruBlueEnvironment
tbreak *0x5e006b20
command 1
  jump *0x5e006b2c
end
Bash:
#!/bin/sh
set -e
gcc-4.0 -g -o libWrapper.dylib -dynamiclib Wrapper.c -F/System/Library/Frameworks -framework ApplicationServices
#export X=1
#export DYLD_PRINT_LIBRARIES=1
# LaunchServices grabbed from Tiger
export DYLD_INSERT_LIBRARIES=libWrapper.dylib:../LaunchServices
export DYLD_FORCE_FLAT_NAMESPACE=1
gdb --command=brk.gdb ./TruBlueEnvironment
Older frameworks can be moved into app and relinked unsing intall_name_tool.

Also, someone already run classic-environment on early Leopard beta: https://www.macintoshrepository.org/47774-classic-environment-for-leopard-9a241-
I cant download it and check what hacked there and how frameworks and WindowServer are compatible with latest updated Leopard.
 
Few month ago i try to reverse frameworks. Globally all classic-environment specific functions are replaced with stripped down versions, stubs which does nothing, or unconditionally signales about failure, few are removed completely. At least CoreGraphics dependency (partially) must be reimplemented, because of it communicates with WindowServer and some things are not implemented at WindowServer side. WindowServer cant be simply replaced at runtime like libraries. Other required frameworks, i thnik, can be replaced at app-level with older versions from Tiger.

With few hacks and stubs (which return success) im able to run and debug TruBlueEnvironmet, it even does something. I not found how exactly app launching are works inside it, so it still useless, but works. :)

Classic Startup crashes somewhere inside AE framework, even with replaced with older version around at some place.

C:
#include <stdio.h>
#include <mach/port.h>

/* --------- Bindings to ApplicationServices --------- */

struct CPSConnection;
typedef struct CPSConnection CPSConnection;

extern int _CPSGetCurrentProcess (CPSConnection *c);

// while present it are non accessable?
// it is just a wrapper to a Mach Port RPC, so it can be regenerated?
//extern int _CGSCheckInNewProcess (mach_port_t port, TODO...);

/* --------- Wrapper Impementations --------- */

int CPSGetCurrentProcess (CPSConnection *c) {
  fprintf(stderr, "Wrapped CPSGetCurrentProcess!\n");
  fflush(stderr);
  int res = _CPSGetCurrentProcess(c);
  return res == -600 ? 0 : res;
}

// task --- ???
// c --- connection
// copyFlag --- ???
// name --- buffer for name
// nameSize --- size for name buffer, strlen(name)+1.
// type_id --- file type (TruBlueEnvironment pass "APPL")
// creator_id --- ??? (TruBlueEnvironment pass "bbox")
// out1 --- ???
// out2 --- ???
// out3 --- ???
// out4 --- ???
int CPSRegisterChild (void *task, CPSConnection *c, int copyFlag, int flags, char *name, int nameSize, int type_id, int creator_id, void **out1, void **out2, void **out3, void **out4) {
  fprintf(stderr, "Wrapped CPSRegisterChild! name=%s\n", name);
  fflush(stderr);
  *out1 = (void*) 1000;
  *out2 = (void*) 2000;
  *out3 = (void*) 3000;
  *out4 = (void*) 4000;
  // TODO
  // _CGSCheckInNewProcess
  // TODO
  return 0;
//  return 1006;
}


int CPSIsClassicRunningInAnySession (void **data) {
  int res = 1003;
  *data = NULL;
  return res;
}
Code:
# skip installation of exception handler which brokes gdb
# note: this addresses are specific to latest Tiger TruBlueEnvironment
tbreak *0x5e006b20
command 1
  jump *0x5e006b2c
end
Bash:
#!/bin/sh
set -e
gcc-4.0 -g -o libWrapper.dylib -dynamiclib Wrapper.c -F/System/Library/Frameworks -framework ApplicationServices
#export X=1
#export DYLD_PRINT_LIBRARIES=1
# LaunchServices grabbed from Tiger
export DYLD_INSERT_LIBRARIES=libWrapper.dylib:../LaunchServices
export DYLD_FORCE_FLAT_NAMESPACE=1
gdb --command=brk.gdb ./TruBlueEnvironment
Older frameworks can be moved into app and relinked unsing intall_name_tool.

Also, someone already run classic-environment on early Leopard beta: https://www.macintoshrepository.org/47774-classic-environment-for-leopard-9a241-
I cant download it and check what hacked there and how frameworks and WindowServer are compatible with latest updated Leopard.
Great to see some progress on this. You mentioned you couldn't download and check , I simply created an account and was able to download without issues. Let me know if you still have issues downloading the file.
 
I managed to run classic in the development versions (beta versions) of leopard, I believe it is possible to play with exchanging files with the beta version, but unfortunately I can't do that because I only have notebooks, and that would require a desktop with a second hd to not be extremely laborious and tedious .

Could you find specific versions of those DPs?
 
Hello All,

To bring back a thread that had some activity - I was recently looking into this myself and I saw that one of the Beta Builds of Leopard, plus this patch would allow Classic Environment to work.

I am trying to run an OS 9 Application on my Power Macintosh G5 Quad.

Maybe one of you guys with more insight would be able to make it work.

Article on Patched Version to Run Classic on OS X 10.5 Leopard:

May require this build - I need to download the test:

Not sure if it has anything that can be utilized merged into the last 10.5.8 or into Sorbet Leopard so this works. That would be great to get this to work in 10.5 - that I won't have to run to my G4 or rely on Sheep Shaver, which doesn't run everything.

Keep me posted if this helps - I'd be great if we can get this running after all these years. Thanks.
 
  • Like
Reactions: andyfrueh
Hello All,

To bring back a thread that had some activity - I was recently looking into this myself and I saw that one of the Beta Builds of Leopard, plus this patch would allow Classic Environment to work.

I am trying to run an OS 9 Application on my Power Macintosh G5 Quad.

Maybe one of you guys with more insight would be able to make it work.

Article on Patched Version to Run Classic on OS X 10.5 Leopard:

May require this build - I need to download the test:

Not sure if it has anything that can be utilized merged into the last 10.5.8 or into Sorbet Leopard so this works. That would be great to get this to work in 10.5 - that I won't have to run to my G4 or rely on Sheep Shaver, which doesn't run everything.

Keep me posted if this helps - I'd be great if we can get this running after all these years. Thanks.
Did this ever make any progress? I've got an iBook I'm upgrading and would like a few OSes to play with. I'd love a Sorbet/Classic combo if it ever gets figured out.
 
Register on MacRumors! This sidebar will go away, and you'll see fewer ads.