I am a software architect at CCP Games. Work on the launcher, Wine support, graphics engine and other random stuff for EVE Online, usually low level. This blog details some interesting things I run into at work, as well as new things I'm trying out in my spare time. Lately I've been picking up new programming languages - Erlang/Elixir, Go, Swift whereas most of my work in the past is in C++ and Python.

Subscribe to this blog

Follow by Email

Search This Blog

Posts

The EVE launcher downloads a version of Wine that is built from CCP's own fork of Wine. This fork lives on GitHub at https://github.com/ccpgames/wine.git. If you want to build this version yourself, here are some instructions to get you started.

Wine has quite a few dependencies we have to fulfil before attempting to build. The first one is Xcode - if you don't have that already installed, get it from the App Store. Note that after installing Xcode you need to run it once to accept the license agreement before being able to use it in the build scripts later.

The other dependencies are easiest to get via brew - get it from brew.sh if you haven't already. Wine already exists as a brew recipe, and we can use that to pull down the dependencies.

First, though, we need to get XQuartz:brew install Caskroom/cask/xquartz

Then to get Wine and its dependencies:brew install --devel wine
This takes an hour or so, just so you know.

EVE Online has an ingame browser, and under Wine that browser has issues with opening some websites using https. Those sites work in the game under Windows, so I knew it wasn't a browser issue per se. It wasn't an issue with all sites using https, either, so it wasn't a matter of SSL not working at all, either.

With the help of CCP's security expert, we noticed that the sites that were failing had certificate chains up to a root certificate with a very strong signature algorithm, ecdsa-with-SHA384, and chances were that Wine did not support that particular algorithm.
Now what?
Personally I'm no expert in security algorithms, SSL or TSL or anything like that, so I wasn't sure where to even begin looking at Wine source code to see if this algorithm was supported.

After some digging around I decided to look at the output of the secur32 channel:export WINEDEBUG=+secur32

One issue with the EVE client running under Wine is that when starting in windowed mode, the window would grow by a few pixels every time. I spent some time trying to figure this out and wanted to document my findings here before forgetting all the details.
Rather than digging directly into Wine source code I started by looking at how the window is created in our code. That code is a bit convoluted, to say the least, and largely hasn't been touched in years. But hey, it works, right, and if it ain't broken don't fix it.
There are two parts to the story when creating the window - there is the window itself, and the Direct3D backbuffer that is drawn in the window. When the window is resized, the backbuffer is recreated to fit the window. The Python code calls trinity.app.ChangeDevice, which internally creates the window if it doesn't already exist, then creates a backbuffer of the appropriate size.
The window proc for the window handles the WM_ENTERSIZEMOVE and WM_EXITS…

A few months ago I started experimenting with Wine support in the launcher for EVE Online on Mac. We announced this on the EVE forums and players have slowly started migrating over to using the Wine wrapper. I want to use this blog to share my experience with using Wine, and describe my process of finding and fixing issues with running EVE under Wine on the Mac.

Who am I?
If you follow the EVE forums you may know me as CCP Snorlax - I have worked at CCP since 2007, doing all sorts of stuff, mostly low-level graphics and other systems. Lately I've been working on the launcher for EVE - redoing it from scratch with proper support for multiple accounts and logging in to test servers, as well as rethinking the patching mechanism used for updating the EVE client. As I mentioned above, the last few months I've been working on Wine support on Mac.
Before joining CCP I lived in the San Francisco Bay Area - I worked for Electronic Arts (Maxis) on various Sims titles, and even before th…