public static function sw_operating_system()
 {
     if (!PTS_IS_CLIENT) {
         // TODO: Figure out why this function is sometimes called from OpenBenchmarking.org....
         return false;
     }
     // Determine the operating system release
     if (phodevi::is_linux()) {
         $vendor = phodevi_linux_parser::read_lsb_distributor_id();
         if ($vendor == null) {
             if (is_readable('/etc/os-release')) {
                 $os_release = parse_ini_file('/etc/os-release');
             } else {
                 if (is_readable('/usr/lib/os-release')) {
                     $os_release = parse_ini_file('/usr/lib/os-release');
                 } else {
                     $os_release = null;
                 }
             }
             if (isset($os_release['PRETTY_NAME']) && !empty($os_release['PRETTY_NAME'])) {
                 $vendor = $os_release['PRETTY_NAME'];
             } else {
                 if (isset($os_release['NAME']) && !empty($os_release['NAME'])) {
                     $vendor = $os_release['NAME'];
                 }
             }
         }
     } else {
         if (phodevi::is_hurd()) {
             $vendor = php_uname('v');
         } else {
             $vendor = null;
         }
     }
     $version = phodevi::read_property('system', 'os-version');
     if (!$vendor) {
         $os = null;
         // Try to detect distro for those not supplying lsb_release
         $files = pts_file_io::glob('/etc/*-version');
         for ($i = 0; $i < count($files) && $os == null; $i++) {
             $file = file_get_contents($files[$i]);
             if (trim($file) != null) {
                 $os = substr($file, 0, strpos($file, "\n"));
             }
         }
         if ($os == null) {
             $files = pts_file_io::glob('/etc/*-release');
             for ($i = 0; $i < count($files) && $os == null; $i++) {
                 $file = file_get_contents($files[$i]);
                 if (trim($file) != null) {
                     $proposed_os = substr($file, 0, strpos($file, PHP_EOL));
                     if (strpos($proposed_os, '=') == false) {
                         $os = $proposed_os;
                     }
                 } else {
                     if ($i == count($files) - 1) {
                         $os = ucwords(substr($n = basename($files[$i]), 0, strpos($n, '-')));
                     }
                 }
             }
         }
         if ($os == null && is_file('/etc/release')) {
             $file = file_get_contents('/etc/release');
             $os = substr($file, 0, strpos($file, "\n"));
         }
         if ($os == null && is_file('/etc/palm-build-info')) {
             // Palm / webOS Support
             $os = phodevi_parser::parse_equal_delimited_file('/etc/palm-build-info', 'PRODUCT_VERSION_STRING');
         }
         if ($os == null) {
             if (phodevi::is_windows()) {
                 $os = trim(exec('ver'));
             }
             if (is_file('/etc/debian_version')) {
                 $os = 'Debian ' . php_uname('s') . ' ' . ucwords(pts_file_io::file_get_contents('/etc/debian_version'));
             } else {
                 $os = php_uname('s');
             }
         } else {
             if (strpos($os, ' ') === false) {
                 // The OS string is only one word, likely a problem...
                 if (is_file('/etc/arch-release') && stripos($os, 'Arch') === false) {
                     // On at least some Arch installs (ARM) the file is empty so would have missed above check
                     $os = trim('Arch Linux ' . $os);
                 }
             }
         }
     } else {
         if (stripos($vendor, $version) === false) {
             $os = $vendor . ' ' . $version;
         } else {
             $os = $vendor;
         }
     }
     if (($break_point = strpos($os, ':')) > 0) {
         $os = substr($os, $break_point + 1);
     }
     if (phodevi::is_macosx()) {
         $os = phodevi_osx_parser::read_osx_system_profiler('SPSoftwareDataType', 'SystemVersion');
     }
     if (($break_point = strpos($os, '(')) > 0) {
         $os = substr($os, 0, $break_point);
     }
     $os = trim($os);
     return $os;
 }