ScottRitchie

Revision 118 as of 2008-07-19 09:10:38

Clear message

ScottRitchie

I'm Scott Ritchie. You can usually find me on Freenode IRC or the [http://ubuntuforums.org/forumdisplay.php?f=313 Ubuntu Wine forum] as YokoZar. I also have pages on [https://launchpad.net/~scottritchie Launchpad], [http://wiki.winehq.org/ScottRitchie Wine's Wiki], and [http://en.wikipedia.org/wiki/User:Scott_Ritchie Wikipedia]. I also [http://yokozar.livejournal.com/ keep a blog], which should be syndicated on Planet Ubuntu. I am a MOTU, and my chief interest is maintaining the Wine package and everything that is related to it which, these days, is a lot.

I want good, usable Wine software. Users shouldn't even need to know they're running Wine. My goal is to help make Wine easy and effective enough to be an official supported package in Ubuntu. Like most developers, however, I make myself useful throughout the entire project, doing everything from [https://bugs.launchpad.net/~scottritchie/ filing bugs] in other packages to drafting entire blueprints.

How I got to Ubuntu

After some bad experiences attempting to contribute to Debian, I was pleasantly surprised when [wiki:JeffWaugh Jeff Waugh] came directly to me and asked me to sign up for Ubuntu. That was back in the Hoary days, and I've been directly helping ever since. In the past, my contributions had mostly been making the Wine packages at winehq.org, however now I do far more. Making Wine work just right for the user involves improving many different parts of the system, and now that I am a MOTU I can work on all of them directly.

My three major tasks for Intrepid

Right now, these are the three most important things for me to do in Intrepid. If I succeed at my goal of getting community sponsorship to work full time on Ubuntu, this is what I'd be working on.

  • Getting Wine to be the best it can be for Intrepid. Most Wine development by others upstream has been on compatibility and functionality, however there is a ton of stuff we can do to improve usability and polish. See my Wine todo list below.
  • Implementing ThirdPartyApt by using OpenSuSE's OneClickInstall framework. No one else is working on this.

  • Improving 32-bit compatibility on amd64 by slowly replacing the tremendous hack that ia32-libs is with individual lib32-foo packages. Wine is the chief user of ia32-libs at this point, so if we want Wine to be well supported this is infrastructural work we'll have to do first. There are a few specific bugs in launchpad which may be worked on by others, but most of the packages in ia32-libs have no one interested in migrating them.

Other work

  • Building packages for games for the Spring engine. Spring isn't in Intrepid yet, but the packages are available for Hardy through a [http://spring.clan-sy.com/wiki/SetupGuide#Ubuntu launchpad PPA I created]. Once I make a package for a freely distributable mod so user's will have something to actually play upon installation, I'll upload it to Intrepid.

Current Wine Goal

Most of the needed upstream work for BetterIntegratedWineSpec is being tackled, most notably the ability to configure Wine and remove software from the command line. What we need now is for someone to design and make the Gnome applets (as well as modify gnome-app-install). Griswold (author of reg.exe) and I are going to collaborate on a bzr branch of Wine for Intrepid. I'll be writing the gui elements, while he does the background reg.exe work to make console configuration a reality. Fortunately, most of our work is easy to branch and won't likely conflict with anything done upstream, so whether or not Intrepid ships Wine 1.0 or a later version we'll be able to include it and have a much more usable gui for Wine in Intrepid.

Neat ideas to think about doing at some point

  • If any of these tasks is interesting to you, please feel free to start on them. I'd like to help you, or at least provide moral support on IRC. If I somehow get enough time to work on Ubuntu, these are all tasks I might take on myself after finishing the major tasks above.
  • Integration of Gmount-iso
    • Dialog could be redesigned in some good ways to make it explain things
  • Using lzma compression for things apt-get fetches (eg Packages.gz))
    • Doing apt-get update for the main and universe repository now requires downloading over 5 megabytes. We could probably cut that down to 4 with lzma, saving our mirrors a ton of bandwidth. This isn't so much an issue with smaller repositories like wine.budgetdedicated.com or launchpad PPAs, which typically only have a handful of packages and thus a few k for Packages.gz.
  • Proper apt-torrent integration, communicating with a daemonized transmission torrent client using D-bus magic.
    • Even our massive servers can't handle the bandwidth on beta release days, much less the full release. Mirrors in less internet-enabled countries are even worse off.
    • Daemonizing transmission and being able to eg cap bandwidth usage using D-bus calls would be an awesome feature anyway, since then other applications could slow it down if they needed to claim bandwidth.
  • Modifying migration-assistant and Wubi to migrate installed Windows applications into Wine
  • Cleaning up packages-arch-specific. Selecting what arch to build for should be done through proper control files, not a workaround elsewhere. One way is to just fix whatever control files we need to in Ubuntu and stop using P-A-S.
    • Packages-arch-specific was made in Debian because a lot of Debian packagers didn't actually know what arches their packages worked on. This is much less of a problem for Ubuntu, since we only support a handful of arches that are reasonably easy to test on, especially for supported packages. In Ubuntu, we also don't shy away from patching a package "belonging" to someone else. The end result is that we could simply start ignoring packages-arch-specific, and then patch the control files if there's any resulting build failures.
    • As for the advantage this gives us: sometimes the only reason a package doesn't build on a specific architecture (for instance, zsnes) is because of an entry in this file. zsnes was recently patched to allow it to build on amd64, however the process for removing it from P-A-S required a substantial extra work.
    • There may also be a benefit to simply allowing the build daemon to attempt to build something and have it fail; alternatively, launchpad could output "package x not built for arch y due to listing in P-A-S file" - however, some packages do build successfully for the wrong arch but instantly segfault.
    • It seems like Intrepid is ignoring P-A-S for Wine, as launchpad now reports build failures on sparc and ppc. This is the right way, but I'm not certain if it's due to Wine being removed from PAS or PAS being ignored in general.
  • Have a coherent "preferred email client" setting somewhere. Similar to a default web browser, we should have a default email client that (for instance) Firefox launches when you click an email link.

Detailed explanations of major tasks

One Click Install from SuSE

  • Not so much "one click" as it is "one file" - an ISV would provide one XML file that will give instructions that work on SuSE, Ubuntu, etc.
  • This is actually the continuation of the ThirdPartyApt spec that I resurrected from Dapper. It is still unimplemented.

    • As it stands, the installation instructions on [http://winehq.org/site/download-deb this page] are too complicated - a user must first identify his Ubuntu version, then run two terminal commands, and then make sure he runs them again when he upgrades distro versions six months later. A user should be able to simply click a link in FireFox, enter his password, and have it all be set up for him. It also took me as a repository maintainer quite a bit of time to figure out how to set that up - as we encourage more and more ISVs to create their own repositories, setup should be made more standardized and clear.

    • I would need to implement this myself. Jerome can't do the code anymore, and the spec has been differed since 2 years ago. Fortunately, I know python and can build on the work he did with GApti.
    • It would be neat to have repository "dependencies" - eg the WineHQ APT repository could depend on the universe repository (so the user would be prompted to enable universe), or it could depend on backports, etc. We should note in the spec the various "reserved" names that a repo could depend on that we'll automatically recognize (namely, Ubuntu ones, or if we build a list of recognized "official" third parties).
      • This could also be related to the key-signing idea discussed at the spec.
    • Google has graphical versions of the instructions here: http://www.google.com/linuxrepositories/ubuntu704.html

    • They also have text similar to what I have: http://www.google.com/linuxrepositories/apt.html

    • It should be as simple as downloading a single file and double-clicking it. That will then prompt for the password and tell the user it is adding a key and downloading particular repositories (also warning that this could be a security issue if they're untrusted), as well as installing a particular application (eg Wine or Google Desktop)
  • Instead of creating an entirely new filetype ala ThirdPartyApt, we can simply use the existing SuSE XML-based file. They've expressed willingness to extend the spec if we need to, however right now the only lingering difference between what we called for and their specification seems to be whether we force signing of the entire file using the same key as the repository. Not doing this allows someone other than the repository owner to create an installer file, which may actually be a good thing.

  • An Ubuntu proof of concept implementation already exists
  • With Ubuntu support, an ISV could provide 1 file that would install the appropriate repository/packages for both SuSE, Ubuntu, and whomever else supported the standard.

KillingIa32Libs

  • ia32-libs was created as a temporary workaround for apps like Open Office before there were working 64 bit versions, however it hasn't gone away and, because of Wine, won't ever go away until no one wants to run 32 bit Windows applications.
  • Currently, libraries in ia32-libs must be updated by hand, and the whole bundle must be downloaded whenever there's any change. Worse, there's no automatic process to force updates to the 32 bit version when a security bug is found. When the openssl vulnerabilities occured, for instance, ia32-libs wasn't updated until over a week later after I discovered it was still vulnerable. More annoyingly, every user had to download a 100+ megabyte update just to fix the one package.
  • When I contacted them privately during the Prague developer summit, Colin Watson and Pitti both agreed that while toolchain changes may be best in the long run, they're not going to happen as no one's been working on them for years. The best solution is to make separate 32 bit packages a la lib32asound2.

Wiki pages that should be written up

  • OneClickInstall - Should explain the why (link ThirdPartyApt) as well as the specifics of OneClick which, ironically, isn't really one click so much as it's one file.

  • RemovingIA-32-Libs - Basically a long todo list with every package and (hopefully) a list of workers.
  • Apt-Torrent-DBUS - A feature request to be written, maybe even turnable into a blueprint
  • Ignore-Packages-Arch-Specific - Fairly straightforward. We should at least have some explanation of PAS in the wiki, as few even know it exists.
  • Migration-Assistant-Wine - Input is needed to help explore this idea. Which applications are portable, compatible with Wine, worth taking data from, and not replaced by a free equivalent that we can import that data into?

WineTeam

As the man responsible for Wine in Ubuntu, I'm sort of like the figurehead of the Ubuntu Wine team. [wiki:StephanHermann Stephan Hermann] is the other MOTU member, who occasionally uploads various Wine fixes as well. There are about 50 people who have joined the WineTeam, however I'm still trying to figure out a good use for them other than sending them upstream to post bugs and keep the AppDB current.

Good ideas someone else should code unless I get a lot more time:

  • Update manager and Synaptic should warn if removing ubuntu-desktop (unless kubuntu-desktop is still installed)
  • OneClickInstall - Benjamin Weber of OpenSuSe contacted me regarding this in lieu of 3rd party apt: http://en.opensuse.org/Standards/One_Click_Install

  • EmuleViaWine - A spec to integrate eMule as a regular application in Ubuntu, powered by Wine

    • Easily doable by me after scons gets a nice way to convert from visual studio builds to winelib
  • JabberAccountCreation - We should make it very easy to create a Jabber account when first starting Pidgin

  • MouseConfiguration - It should be possible to allow disabling of x11's left+right = middle click feature from the Preferences->Mouse panel

    • -- this is harder to fix than a simple bug, since currently this is controlled by the xorg configuration file rather than the desktop environment, and so a new freedesktop.org standard to change it on the fly needs to be drafted and implemented. -- Still, a bug should be filed.
  • UsefulDisksManagerSpec - a spec to beef up the disks manager applet to include error checking and other features

    • -- obsolete since the disks manager has been removed, although it should probably come back in some form (with these features Wink ;) ) In any case, there should be a way to graphically run fsck, mkfs, and the partition manager from the system menu.

Todo list:

Wine todo list:

  • Usability:

    • Build the [:autorun: Autorun] support into the Wine package
    • File association with Wine applications can be made much easier: https://bugs.edge.launchpad.net/ubuntu/+source/wine/+bug/243390

    • Warn the user if DirectRendering isn't true (ie, 3d things will run very very slow)

    • Consider moving the "Browse C:\ Drive" from Applications->Wine to places. Ask desktop team for feedback, and also figure out how this is done (places isn't a "normal" menu)

    • Wine should have a special launcher script - it needs to set the working directory of the program correctly after double-clicking an executable file. Most windows apps expect the working directory to be where the application resides, but Gnome's (and I think KDE's) default behavior is to set it to ~/
      • Debian Bug#420207 has a user script that can be modified for this purpose
      • We should use the full path (without switching the directory) when running off a CD, so it can be ejected if needed (eg, multiple install discs)
    • Wine needs to have a command-line option to test if it's configured yet (IE, there exists ~/.wine), and if not then run Wine's first-time configuration. This way scripts can test if Wine's been setup.
      • This script, then, needs to be included in the "Browse virtual Windows drive" option created on the menu when installing Wine so that it'll be there. Ideally, it should also tell the user what it's doing and why it's taking so long (eg: "winecfg is creating your virtual windows drive, please wait")
    • There needs to be a way to tell users they don't have a Windows font installed and that things look broken as a result (eg, steam and tahoma.ttf). We could either include a free replacement font (if available), or treat some of these fonts like restricted files (eg msttcorefonts package). Either way, something other than displaying blank text needs to happen - even an ugly font is better than nothing.
      • this could be done through changing a default registry entry for Wine to add a replacement for tahoma.ttf...but which font is a good replacement?
    • Get usability reports from people on the forums to provide a developer guide for improving Wine usability
    • Browsing the forums, it seems that a very large number of new users expect to be able to "run wine" after installing it. They look for the Wine icon, and expect it to open some program that they can then open executables from. There are several solutions to this that should be done:
      • The Wine package description should make it clear that the user will now be able to open Windows executables by double clicking
      • Winecfg, or its replacement, should have a nice front page explaining this, as well as a brief overview of winecfg's purpose.
    • Wine uninstaller (and perhaps winecfg) should have an option to completely nuke ~/.wine
      • Wine uninstaller needs to properly clean the .desktop files for removed Windows apps (this is an upstream bug)
    • Take the initiative and get an official review at openusability.org for the layout of whatever replaces the current winecfg
    • Integrate the fancy icons posted to the mailing list by another user earlier (also need to upload a zip file somewhere since the archive is dead). Already using one of them for the Launchpad branding Smile :)

    • It's a bit unclear what to do with the handling of disk images - eg .iso files. Linux can mount them (with terminal commands), but it's quite a nontrivial task to make them act like a mounted CD in Windows (eg, with Daemon tools). This should be point and click for Ubuntu AND Wine.
    • The new Wine control panel applet being made could have a checkbox for "Launch Windows Applications configured to run at startup when you log in." This way someone could have eg Steam launch as soon as he logs in like it does in Windows. This in turn would run wineboot on login as one of the gnome init scripts. It would be nice if it were clear to the user that safe mode was a way of disabling this if things got really bad.
  • Documentation

    • Updating the content of the Wine User Guide itself is largely done, however live contextual help needs to be provided elsewhere (such as Winecfg)
      • Some documentation changes will need to be made as Wine 1.0 approaches, however, as more and more things like msi installs "just work"
    • Wine's changed a bit too: double clicking apps should just work, except for this bug in nautilus in edgy: [http://tuzakey.com/~scott/wine-without-mime.png] and an issue with setting the working directory properly.

    • The Wine documentation also needs to be moved into the right places. Currently it's in a separate package upstream and isn't even included in the Wine packages in Ubuntu. This is ok, since most people just read the manual from winehq.org, but we'll need to actually integrate the docs properly if we want to support Wine.
    • Need to convert Wine docs to XML (they're sgml at the moment), which is a blocker for using the scrollkeeper OMF standard and porting to the standard freedesktop help format.
    • Create a graphical means of running [http://kegel.com/wine/winetricks winetricks], a small script of temporary hacks that can help make Wine more functional until things are fixed upstream. Probably the simplest thing to do is just include the script and wrap it with a quick python gui, and make that launchable from winecfg (or its replacement).

  • Winecfg:

    • Should have checkboxes for enabling .desktop files for more obscure Wine functions (say, regedit or control panel)
    • Warn the user if they try to use an existing Windows drive/registry that it will probably not work and also break.
    • Winecfg needs a pretty through redesign, as it has some annoying usability issues such as tabs referring to other tabs. I've got a sketch outline on my notebook of what a new winecfg would look like, I should digitize and spec it out soon.
    • Need to separate logic of winecfg (eg command to change audio drivers) from the program itself. These can all be converted into terminal commands since all they do is modify the registry in some predictable way. Then any application can properly reconfigure Wine, such as winecfg, a custom install script, a new user interface, or a system control applet.
    • Then, we can make a new config program in a toolkit native to the desktop environment, like in GTK. The configuration applet could then even be launched from System->Preferences->Windows Applications

    • There also needs to be a fonts configuration tab to organize font aliases, along with some default ones like for tahoma
    • The drives tab needs to make clear to the user that it's dangerous to simply treat a windows installation as a drive in Wine, both because applications might not work (due to missing registry entries) and because Wine might mess with it. Installing applications "fresh" is better.
    • Winecfg (or it's replacement) needs a checkbox to use OpenGL for the DirectDraw renderer (still experimental, but speeds up 2D an awful lot).

    • I should be able to right click an executable file and adjust its settings directly in winecfg. Right now, to do this, I have to open winecfg and find the executable by hand, the long way.
  • Other:

    • Check whether it's a good idea to include the Wine Gecko stuff in the package somewhere rather than have Wine get it off the internet (we could put it in, say, /usr/share)
    • The integrated eject function when you push the CD eject button needs to call the wine eject program if Wine is locking the disk (so the wineserver can release it, otherwise Linux's eject won't work)
    • Get community help in making a full-fledged Ubuntu Windows theme, to use in Wine (when Wine's theming support starts working fully). In the interrim changing the default colors to match the Ubuntu default theme is a partial step, although things will get ugly when a user changes his Ubuntu theme.
    • A very useful (for Ubuntu) app would be eMule, however compiling it in Winelib so it builds on Ubuntu will be a bit hard as it's built in MSVC normally and there currently is no "simple" MinGW build. eMule would be a great candidate for inclusion with Feisty + 1, both for its utility and as a demonstration of how other windows programs can be seemlessly moved into Ubuntu - see EmuleViaWineSpec.

    • The pptview package needs to be available on amd64 arch now that Wine is

Miscellaneous tasks for myself:

  • Nano, not vi, needs to be the default text editor for console programs throughout universe. A good example is mutt - a fairly intuitive program, until the user attempts to send an email with it and then gets dumped into a command line vi editor, where I myself couldn't even figure out how to save and quit after about 20 minutes of work.
  • Write up a howto on setting up a third party repository, since I run the most popular one. ISVs will want to know how simple this is, and what kind of work they can expect maintaining it. I envision a day where I can download the latest Doom 3 from an APT repository, and have it work perfectly after entering in my CD Key.
  • Write up a post on the eMule forums detailing the argument for weighted random queue answering and an increased preference for peers who have uploaded more. I'm convinced that the overall speed and health of the network can improve significantly by two relatively simple changes, however it may require a well written argument and a mathematical model to convince the developers.
    • Also explain how I'd be the eMule maintainer and the ideas (and obstacles) behind an eMule for Ubuntu. It might need to be run with special privileges to use eMules pinging feature, for instance. Also needs to be configured to not check for updates and to scan the user's .wine folder for its configuration every time.
  • Pidgin-OTR needs to have a "automatically end private conversation when the person you're talking to ends it" feature, and it needs to be on by default. There's no point saving the session key once you know your partner has gotten rid of it, and this will reduce some of the "sending encrypted data when it's unexpected" problems. Also think about automatically forgetting it if the person has logged off and stayed off for an hour or so.
  • Evolution really, really needs to disable ctrl+enter as a shortcut for send email. ctrl+enter is the hotkey for "new line, same paragraph" in Pidgin and OpenOffice, and this "shortcut" can have nearly catastrophic consequences. Clicking send is not that difficult and, more importantly, the user will need to use the mouse after finishing an email anyway.

  • It would be really neat if Pidgin had a feature where if you didn't read a message it would store it for when you log back in and show it to you. On many occasions I've heard an IM beep but didn't read it because I was in a full screen game, only to have something crash or my computer get turned off without ever reading the message. After that point the only way I can tell what it was is to search through EVERY log of someone who might have contacted me.
  • Get bacula on the add/remove programs list.
  • GnuNET is a completely unusable mess at the moment, but is extremely promising software technologically. It's been that way for years - academics write papers about how great the protocol is theoretically, but no one can actually use it because the software sucks.

Other interests

  • I've been teaching myself Python for the purpose of conducting my own research into mathematical analysis of different [http://en.wikipedia.org/wiki/Voting_system voting systems]. I plan to develop this research further as I head into grad school, and publish results as they come. I even see myself writing a book at some point, albeit that's around 4 years into the future.

  • I've recently graduated college, and am actively searching for work. There's nothing I'd love to do more than work full time on Ubuntu, Wine, and supporting users at this point. I'm completely willing to work pursuing bounties for the specs I've created.
  • I enjoy reading and writing short essays. Powerful writing is like a clear interface. You stop noticing the words, and instead just get the ideas.

Somewhat finished tasks with more work left to do

I have a giant penboard in my room with a todo list on it. It's constantly full, and I never erase things until they're done or at least copied to one of my wiki pages. Sometimes something is done but might require followup; in that case it goes here.

  • (./) .msi files need to be launched with Wine by default (fixed in Wine package, but also depends on shared-mime-info)

  • (./) Spring package is made (but not uploaded to Intrepid)

Unusual Ubuntu tasks I've done that I want to remember

If it's something Wine related in Ubuntu, odds are I'm responsible for getting it done. But, like all Ubuntu developers, I occasionally dabble in other areas that I often forget about. This is a partial list of those things.

  • (./) Discuss the merit of having a "mute shutdown sound" checkbox when shutting down (if there is one)...or at least having no shutdown sound by default.

  • (./) Get community help making a free replacement to the tahoma.ttf font, like what Red Hat did with some other Microsoft fonts here: http://www.alldaycoffee.net/story.php/125

  • (./) Amd64BitWinePackage - my attempts at making a 64 bit Wine package that can run 32 bit apps.


CategoryHomepage