Pages

Friday, January 4, 2019

Wine development release 4.0-rc5 is now available for Linux FreeBSD and macOS

Wine development release 4.0-rc5 is now available for Linux FreeBSD and macOS

What's new in this release:
  • Bug fixes only, we are in code freeze.
The source is available now. Binary packages are in the process of being built, and will appear soon at their respective download locations.


Bugs fixed in 4.0-rc5 (total 14):

  32218  LTSpice: Objects not resized when the window is resized
  32221  LTspice: component drawing issues when moving
  33719  comctl32:propsheet custom window proc test failure
  34334  MetaTester 5 never sends or receives data
  38721  Resident Evil 5 Gold Edition (Steam) fails to run
  39959  Growtopia v2.20->v2.14 fails (was v2.11 fails) to  run with unhandled exception on x86-64 (2.09 & 2.13 did run ok)
  44485  Delphi 7 debugger generates new exceptions by itself
  45719  comctl32:treeview test_right_click depends on mouse pointer position
  45917  battle.net launcher and mouse position on high DPI monitor
  45984  Skyrim Special Edition does not get past loading screen on high core count or high memory systems
  46266  tzres is constantly being loaded/unloaded when TimeZone information is queried.
  46328  Installer for Tanglet 1.5.3 crashes at target directory selection
  46352  TreePad X Enterprise 12GB (single user) v7.17.0: Generates Error on Startup
  46353  TreePad X Enterprise 12GB (single user) v7.17.0: Horizontal Ruler/Scale Is Different on Startup and Margins Are Different on Open Database

Run Microsoft Windows Applications and Games on Mac, Linux or ChromeOS save up to 20% off  CodeWeavers CrossOver+ today.

Thursday, January 3, 2019

Working on Wine Part 1 The Wine Ecosystem

Andrew Eikum a CodeWeavers employee and Wine developer is writing a series of post to introduce people to Wine usage and development.

About This Guide


This is a series of guides intended to introduce software developers to the Wine ecosystem. It will cover what Wine is, how to use Wine, how to debug Wine, how to fix Wine, and what to do with your fix once you've made it.

The guide will be published throughout January.
  • Part 1 describes what Wine is and provides a short description of various popular forks of Wine.
  • Part 2 describes Wine's build process.
  • Part 3 describes how to use Wine as a developer.
  • Part 4 describes how to debug Wine in general.
  • Part 5 describes Wine's source tree layout and how to edit the source.
  • Part 6 describes how you can send your work upstream.

 

What is Wine?


Wine is an open source reimplementation of Microsoft's Windows operating system on top of various Unix operating systems. It primarily targets Linux and macOS, but can also be run on other systems like FreeBSD, NetBSD, and Solaris. What this means for users is that they can run software that was made for Windows on other operating systems.

Wine does not contain any Microsoft-owned code, so there is no need for a Windows license to run Wine. Instead, the Wine developers have rewritten components of the Windows operating system such that software run in Wine will think it is running on Windows, even though it is actually running on Linux, for example.

As a simple example, consider the Windows CreateFile API. On Windows, an application could call:

    CreateFileA(
        "C:\\some_file.txt",   //lpFileName
        GENERIC_WRITE,         //dwDesiredAccess
        0,                     //dwShareMode
        NULL,                  //lpSecurityAttributes
        CREATE_ALWAYS,         //dwCreationDisposition
        FILE_ATTRIBUTE_NORMAL, //dwFlagsAndAttributes
        NULL                   //hTemplateFile
    );
 
Wine will take that CreateFileA call and turn it into a Unix open call:
    open(
        "/home/aeikum/.wine/drive_c/some_file.txt", //path
        O_WRONLY | O_CREAT,                         //oflag
        0644                                        //creation mode
    );
 
The file handle will be returned back to the application, which can then write to the file with a similar implementation mapping WriteFile to Unix's write. Of course the actual implementation of CreateFileA in Wine is far, far more complicated than this (consider the path conversion, for example), but this gives you the gist of what Wine does.

Wine Forks


Since Wine is an open source project, anyone is free to make copies of it and modify it to suit their needs or the needs of their users. There are hundreds of Wine forks, but a few of them have gained prominence and are described here.

"Upstream" Wine


Website: https://www.winehq.org/
This is the "official" version of Wine, from which all other forks are derived. When someone refers to "Upstream" Wine, they are talking about this project. Wine is primarily focused on correctness. Wine contains extensive unit tests which demonstrate the behavior of Windows, and requires that most patches provide tests. All patches must pass the existing tests to be accepted. There is also a strong focus on code quality. Wine is a very large project (it is literally an entire operating system, including a GUI), so technical debt is strongly avoided to keep the project maintainable going forward.

Wine Staging


Website: https://wiki.winehq.org/Wine-Staging
However, Wine's strict patch acceptance requirements means that lots of patches that are unproven, wrong, or dangerous, but useful for users today, would languish in private forks or on the bug tracker. The Wine Staging project (also spelled "wine-staging") is an attempt to gather and maintain these useful patches so users can easily take advantage of them. The Wine Staging community also works to upstream these patches into Wine, so their benefits become available for all Wine users and forks, while also lowering Wine Staging's own maintenance burden. It can also serve as a "testing grounds" for patches which are difficult to prove with unit tests before they are accepted upstream.

CrossOver


Website: http://www.codeweavers.com/
CrossOver is a commercial fork of Wine sold by the CodeWeavers company. It contains many patches that are application-specific hacks and not appropriate for upstreaming. CodeWeavers also maintains an application compatibility database which will pre-install some software components and otherwise modify the Wine environment so that certain applications work better. However, CodeWeavers strongly prefers to implement features correctly and send that work to upstream Wine. CodeWeavers employees perform a significant portion of the work done on Wine.

Proton


Website: https://github.com/ValveSoftware/Proton/
Proton is a fork of Wine created by the Valve software company, which is integrated with their Steam software, a major video game and software distribution platform. Proton is focused on providing a seamless experience for Steam users to run Windows titles on Linux. Like with CrossOver, most of the contributions to Proton are also sent to upstream Wine.

Other forks


There are many, many other forks of Wine. Some are packaged with commercial software and sold as macOS and Linux software. Others are one-off forks created by users for a specific application.

Developing for Wine


Wine isn't perfect, and it's likely you will run into an inadequacy or a bug in your day-to-day Wine usage. Perhaps you are interested in fixing Wine so it will run your application or game, or maybe your employer would like to use Wine and pay you to fix it. This guide will introduce you to how you can build, debug, and fix Wine, and how to send those fixes upstream.

Full Article

Run Microsoft Windows Applications and Games on Mac, Linux or ChromeOS save up to 20% off  CodeWeavers CrossOver+ today.

Wednesday, January 2, 2019

Q4Wine 1.3.11 has been released for Linux and Mac OSX

Q4Wine is a Qt GUI for Wine. It will help you manage wine prefixes and installed applications. It currently supported on Linux, FreeBSD and Mac OS X platforms.

Q4Wine was initially written by Alexey S. Malakhov aka John Brezerk. General idea comes from WineTools scripts which were initially written by Frank Hendriksen.



General features are:

  • Can export Qt color theme into wine colors settings;
  • Can easy work with different wine versions at same time;
  • Easy creating, deleting and managing prefixes (WINEPREFIX);
  • Easy controlling for wine process;
  • Autostart icons support;
  • Easy cd-image use;
  • You can extract icons from PE files (.exe .dll);
  • Easy backup and restore for managed prefixes;
  • Winetriks support;
  • And more: Explore it!;
 Changelog for 1.3.11 :

Fixed:
  • Display of Valve Proton in Processes view BUG-138;
  • Improve all dialogs of choosing files BUG-139;
  • Allow Stop Wine action to kill Valve Proton in Processes view BUG-138;
Updated:
  • Code cleanup: drop Qt4 support;

Run Microsoft Windows Applications and Games on Mac, Linux or ChromeOS save up to 20% off  CodeWeavers CrossOver+ today.

Tuesday, January 1, 2019

Phoenicis PlayOnLinux 5.0 - Alpha 2 released

Hi everyone!

We wish a happy and successful year! For this first day of 2019, we are glad to release the second alpha version of Phoenicis PlayOnLinux 5.


A new wine builder

We have rewritten from scratch our winebuild platform. To make it short, it is more reliable, more transparent, easier to setup and cross-platform compatible. Any project that needs to use wine could now potentially use it and take advantage of the 1828 different builds. (We admit that some of them are outdated, though).

The winebuild project is open source, uses containers. You can install it on your machine in no time if you want to build wine by yourself.

Support of new wine distributions

Speaking about wine builds, we now support 4 wine distributions: 

  • Upstream wine builds are vanilla and unmodified wine (1)
  • Staging wine builds are the wine builds patched by wine-staging
  • Dos support wine builds contains wine and dosbox. (See the next feature)
  • CX contains a wine version patched by codeweavers

We plan to support proton in the next weeks.

All these wine build can be compiled directly through https://github.com/PhoenicisOrg/phoenicis-winebuild/.

 

(1) Except the very old versions that have a specific suffix is their names, like 1.5.3-heap_allocation_v2-avoid_deadlock, but we are going to move them anyway.

DOS Support

Winebuild now provides dos_support distribution. The way these wine binaries works is very simple: Wine launch script has been modified to detect if the given .exe is Win32 or a DOS executable. If it is a DOS executable, it will set-up a dosbox configuration that will behave consistenly with wine:

  • mount drive_c as C: on dosbox
  • if a autoexec.bat file exists inside the prefix, it will run it
  • support of custom DOS configuration per prefix
  • ...

The script framework has also been modified so that you can tweak some dosbox settings directly from a script. Here is an exemple of "advanced" script

1
2
3
4
5
6
7
8
9
wine.run(wine.prefixDirectory() + "/drive_c/The Elder Scroll 1: Arena/Arena106.exe"); // Arena106.exe is a w32 fine, wine will run
 
wine.dosbox()
    .memSize(64)
    .renderAspect(true)
    .cpuCycles("max 95% limit 33000")
    .renderFrameSkip(1);
 
wine.run(wine.prefixDirectory() + "/drive_c/The Elder Scroll 1: Arena/ARENA.BAT"); // ARENA.BAT is obviously a MS-DOS file, dosbox will run

 

GoG support

We've added a way to add a web browser view directly inside script wizards. Thanks to this feature, scripts can now authenticate to any website.

Phoenicis can automatically download and install GoG games from your account, as POLv4 used to do during the past years.

 

A complete demonstration video of gog.com support: https://www.youtube.com/watch?v=Fopp-x9Fz3g&feature=youtu.be

Also, we have made a script pattern for all GoG games: it has drastically simplified them from POLv4. The script are so much easier that we believe that they will be a lot more maintained.

POLv5 script POLv4 script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
include(["engines", "wine", "quick_script", "gog_script"]);
 
var installerImplementation = {
    run: function () {
        new GogScript()
            .name("Teenagent")
            .editor("")
            .applicationHomepage("")
            .author("Quentin PÂRIS")
            .gogSetupFileName("teenagent/en1installer0")
            .category("Games")
            .wineVersion(LATEST_DOS_SUPPORT_VERSION)
            .wineDistribution("dos_support")
            .executable("TEENAGNT.EXE")
            .go();
    }
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
[ -z "$PLAYONLINUX" ] && exit 0
source "$PLAYONLINUX/lib/sources"
  
GOGID="teenagent"
PREFIX="Teenagent_gog"
WORKING_WINE_VERSION="1.6.2-scummvm_support"
  
TITLE="GOG.com - Teenagent"
SHORTCUT_NAME="Teenagent"
  
POL_GetSetupImages "http://files.playonlinux.com/resources/setups/$PREFIX/top.jpg" "http://files.playonlinux.com/resources/setups/$PREFIX/left.jpg" "$TITLE"
  
POL_SetupWindow_Init
POL_SetupWindow_SetID 1214
POL_Debug_Init
  
POL_SetupWindow_presentation "$TITLE" "Metropolis Software" "http://www.gog.com/gamecard/$GOGID" "Pierre Etchemaite" "$PREFIX"
  
POL_Call POL_GoG_setup "$GOGID" "e5e3a8cd9bbbcec5a956d1f41281b4af"
  
POL_Wine_SelectPrefix "$PREFIX"
POL_Wine_PrefixCreate "$WORKING_WINE_VERSION"
  
POL_Call POL_GoG_install
  
POL_SetupWindow_VMS "1"
  
cat <<_EOFCFG_ > "$WINEPREFIX/drive_c/GOG Games/Teenagent/teenagent.polcfg"
[teenagent]
platform=pc
gameid=teenagent
description=Teen Agent (DOS/English)
language=en
guioptions=sndNoSpeech lang_English
_EOFCFG_
  
POL_Shortcut "teenagent.polcfg" "$SHORTCUT_NAME" "$SHORTCUT_NAME.png" "" "Game;AdventureGame;"
  
POL_SetupWindow_Close
  
exit 0

 

We are planning to add tons of GoG games in the library so stay tuned!

Installation of verbs directly inside a container

You can now install verbs directly from a wine container.

Standalone packages

  • We are now providing standalone packages that can work on any distribution without the need to install JDK runtime. These packages also remove all the feature that we don't need from the JDK. In the future, there will be probably two sorts of packages, but we want to make things easier for you for now.
  • We now provide macOS packages
  • We also support flatpak

 

 

I'd like to thank once again all the developers that helped us during the past weeks, plata, madoar, and also all those of you that contributed by reporting bugs, suggesting improvements, or tested phoenicis-winebuild.

Our next goals is to focus on prefix management (change of wine version inside a prefix, add debugging tools, etc...) and performance optimization.

If you have any suggestion or encounter any bug, we encourage you to come in our Github page: https://github.com/PhoenicisOrg/. This version is still at alpha-stage, so please be indulgent.

I also take the opportunity of this news to also announce you that PlayOnLinux and PlayOnMac 4.3.4 has been released. They have been updated to support the new winebuild system, and the different windows of the application have been made resizable. It should fix the HDPI issues some of you were encoutering. We continue to maintain these versions until you are 100% satisfied with POLv5

Download packages:

 

Stay tuned, the best is yet to come!

Run Microsoft Windows Applications and Games on Mac, Linux or ChromeOS save up to 20% off  CodeWeavers CrossOver+ today.