Running Windows-only projects on Linux, using Wine

StefanR5R

Elite Member
Dec 10, 2016
6,204
9,429
136
If a Distributed Computing project provides only a Windows application, but you have hosts running Linux, you could
  • either virtualize Windows,
  • install a virtualization solution on Linux (KVM, Xen, Virtualbox...)
  • buy Microsoft Windows
  • install it onto a virtual machine
  • boot the VM and proceed as on a regular Windows host (i.e. install the Windows version of BOINC, attach to the project, run tasks...)
downsides:
license costs; an additional host with its OS and applications and everything needs to be administered
  • or run BOINC via Wine,
  • install Wine on Linux
  • download the Windows version of BOINC
  • run its installer using Wine
  • start the Windows version of boinc using Wine
  • proceed as on a regular Windows host (attach to the project, run tasks...)
downsides:
a separate client instance needs to be used; GUI communication with the client may be laggy
  • or run the science application via Wine within the native Linux BOINC client.
  • requirement: The project needs to permit the anonymous platform mechanism
  • install Wine
  • for projects which require .Net, install Mono
  • attach the Linux client to the project
  • either copy the required science application files from a Windows host which is already attached to the project, or download these files from known URLs
  • copy these files into the project directory
  • create a little wrapper script in the project directory
  • write an app_info.xml which describes the files and application
  • restart the client
  • request work, run tasks...
downsides:
the anonymous platform mechanism is poorly documented; if you don't have a Windows host where you can copy the files from, you need to ask somebody for the download URLs and certain other information about the Windows application version found in client_state.xml

A variation of the third method is employed when yoyo@home's evolution@home is run on Linux. evolutio@home on Windows is already a wrapper project. Hence, yoyo wrote a little more extensive wrapper for evolution@home, which combines the functionality of the original native Windows wrapper with the embedding into Wine when run on Linux.


Step-by-step Example

I am now explaining the third method by the example of Acoustics@home. This project provides a native Linux application version, hence, none of the following is required to run Acoustics@home on a Linux host. But I tried the Wine approach while exploring a current performance problem with Acoustics on Linux.

Step 1:
Attach the Linux host to Acoustics@home.
Maybe run some tasks; complete them and set the project to no-new-tasks.​

Step 2:
Install Wine.
I have Linux Mint 18.3, which provides Wine 1.6.2 as package.​

Step 3:
Copy or download the necessary application files.
Acoustics@home's current SSPEMDD v0.18 application uses one exe and two data files on Windows:
sspemdd_0.18_windows_x86_64.exe
ac_modes_R7km_dtimes1.txt
ac_modes_R7km_spmag1.txt


The two data files were already there from when I ran some native Linux tasks. I copied the sspemdd_0.18_windows_x86_64.exe binary from a Windows host.

Download URLs for all these files can be looked up in client_state.xml of a Windows host that is attached to Acoustics@home.​

Step 4:
Copy these files into /var/lib/boinc-client/projects/www.acousticsathome.ru_boinc/.​

Step 5:
In this directory, create a file called "sspemdd_wine_wrapper.sh" with the following contents:​

Code:
#!/bin/bash

exec /usr/bin/wine /var/lib/boinc-client/projects/www.acousticsathome.ru_boinc/sspemdd_0.18_windows_x86_64.exe

Step 6:
Still in this directory, create a file called "app_info.xml" with the following contents:​

Code:
<app_info>
    <app>
        <name>sspemdd</name>
        <user_friendly_name>SSPEMDD-Wine</user_friendly_name>
    </app>

    <file_info>
        <name>sspemdd_wine_wrapper.sh</name>
        <executable/>
    </file_info>
    <file>
        <name>sspemdd_0.18_windows_x86_64.exe</name>
        <executable/>
    </file>
    <file>
        <name>ac_modes_R7km_dtimes1.txt</name>
    </file>
    <file>
        <name>ac_modes_R7km_spmag1.txt</name>
    </file>

    <app_version>
        <app_name>sspemdd</app_name>
        <version_num>18</version_num>
        <api_version>7.9.0</api_version>
        <file_ref>
            <file_name>sspemdd_wine_wrapper.sh</file_name>
            <main_program/>
        </file_ref>
        <file_ref>
            <file_name>sspemdd_0.18_windows_x86_64.exe</file_name>
        </file_ref>
        <file_ref>
            <file_name>ac_modes_R7km_dtimes1.txt</file_name>
            <open_name>ac_modes_R7km_dtimes1.txt</open_name>
            <copy_file/>
        </file_ref>
        <file_ref>
            <file_name>ac_modes_R7km_spmag1.txt</file_name>
            <open_name>ac_modes_R7km_spmag1.txt</open_name>
            <copy_file/>
        </file_ref>
    </app_version>
</app_info>

I copied much of this from the contents of client_state.xml of a Windows host.​

Step 7:
Make sure that the data files can be read by all, and that the wrapper and exe are executable by all:
chmod a+r /var/lib/boinc-client/projects/www.acousticsathome.ru_boinc/*
chmod a+x /var/lib/boinc-client/projects/www.acousticsathome.ru_boinc/*.{exe,sh}


(Alternatively, you can set ownership of the files to boinc and restrict access permissions to boinc.)​

Step 8:
Restart the BOINC client:
sudo service boinc-client restart

Check boincmgr's event log that it says "Acoustics@home ... Found app_info.xml; using anonymous platform", and that it doesn't show any errors for Acoustics@home.​

Step 9:
Allow new tasks for the Acoustics@home project. You should now receive tasks, and they should show up in boincmgr's task list with the application name "Local: SSPEMDD-Wine 0.18". Complete them, and go look up later on the Acoustics@home web page whether the tasks validated correctly.​

Done.

Edit,
in this case I measured 8 % increased run time of the tasks when running on Wine and Linux, compared to running natively on Windows on the same hardware.
 
Last edited:

biodoc

Diamond Member
Dec 29, 2005
6,299
2,239
136
This is an excellent tutorial Stefan and thanks for sharing all your work. :)
 

zzuupp

Lifer
Jul 6, 2008
14,865
2,319
126
Pardon my paranoia: Is this just PPS and not PPSE / PPS Mega?

I'm setting myself up for just PPS, but I usually split 'em.
 

Ken g6

Programming Moderator, Elite Member
Moderator
Dec 11, 1999
16,454
4,294
75
Pardon my paranoia: Is this just PPS and not PPSE / PPS Mega?

I'm setting myself up for just PPS, but I usually split 'em.
Yes, it is. It's also the wrong thread. ;)