Пока решил с самодельными байткодами не заморачиваться - распределять надо нативные вычисления, а не виртуальные! К тому же в связи с
пополнением в парке своих PowerPC-машин стал конкретнее продумывать детали реализации. Итак, имеем сеть машин - своих и чужих (выделенных для вычислений с разрешения хозяев). На каждой машине имеется головная программа и набор приложений, желаемых быть запущенными - всё распостраняется в исходниках (возможен вариант с Java - для тех кто побаивается запускать у себя чужие бинарники или собирать незнакомые исходники). На свои машини всё кладётся через SFTP, а на чужие - руками хозяев. Алгоритм работы вычислительной сети:
1) Запускается головная программа, которой даётся имя задачи , которую хочется решать (ну или список задач);
2) Программа обращается к одному из HTTP-серверов, перечисленных в конфигурационном файле, передавая желаемое имя (имена) задачи, пожелания по трафику, идентификатор машины (сети машин);
3) В ответ головная программа получает часть задачи (выделяется из списка открытых подзадач в случайном порядке) - идентификатор выданной подзадачи, имя выбранной задачи, аргументы командной строки для задачи и (возможно) линк на дополнительные данные, необходимые для задачи (объем исходных и результирующих данных не должен превышать пожеланий по трафику, указанных при соединении);
4) Далее происходит вычисление, которое генерирует некий набор данных;
5) По окончании вычисления данные заворачиваются в ZIP для передачи обратно на сервер одним из следующих путей: HTTP POST, короткий HTTP запрос передающий на сервер URL архива на этой машине (в том случае если машина имеет на борту веб-сервер), электронная почта (посылка автоматически или вручную);
6) Только после успешного приёма результата работы сервер вычёркивает эту часть задачи из списка открытых подзадач (в результате возможны ситуации, когда разные машины берутся делать одну и туже подзадачу - но это будет редко, а иногда даже полезно - чтобы сравнить результаты - они должны быть идентичны);
7) Головная программа, передав результаты решения предыдущей задачи (не дожидаясь успешной отправки результатов), идёт за следующей (пункт 2) - и так пока программа не будет остановлена или в ответ не получит сообщение, что список открытых подзадач с желаемыми параметрами пуст.