Solaris comes with two versions of ls: the BSD version in /usr/ucb/ls, and the SystemV version in /usr/bin/ls. And it turns out that the -g flag has opposite effects. On the BSD version, -g makes it show the group of the file (which is not shown by default), whereas in the System V version, the group is shown by default, and -g hides it.

So the problem must be that your programs are using different paths, so they end up executing the different versions of ls.