The Future of Gaming, Join Me

Hello,

I am currently a CS CE dual major in college and I have been using Linux for about the last 8 months because of its wonderful use with CS style applications. I stumbled on the video below and I talked with around 20 students in my classes and 14 of them agreed to help make this a possibility when it comes to being a wrapper that was talked about. I just want some input and general suggestion on what we should include or exclude. We want to engineer a way so that that when you launch a game it will open basically a VM running a heavily stripped windows and or even partially forked windows that will on launch only open that game all other non mission critical systems will be killed. The system will no phone home and report that it has been basically destroyed it will load drivers that it needs through a different window where you basically can select the files and drag and drop them into the virtual C drive and they will be installed for you. The windows system will basically be encapsulated into a few separate systems every game that you run will be a separate capsule. There will be a capsule that will allow you to get to the desktop if you really need to tweak something that the settings provided to you is just not cutting.

I would like to make a project like this my thesis as it will involve advance system calls and other things and I need some input to begin research to help bring the power of gaming to the hands of every user alike.

4 Likes

Soooooooooooooooooooooooooooooo wine? You're making mwine but a VM?

Can I suggest a better solution with QEMU integration and windows 10? You would have to buy windows 10 but you could run it all through SystemD containers for apps and games. Past that................ It would be a legit install, and basically you would be making the whole passthrough process seemless. On top of that you could fandangle driver input to use linux drivers if you wanted, but only the FuryX would really benefit from that...

Your idea is solid, and I like it, but you're making it a bit too complicated from a design aspect. On point of being a linux tool, using QEMU as your ground basis will enable a lot of solid features and since its built into the kernel, and since SystemD is on most systems (except a few strays like netrunner rolling, I has the busiest of boxes), you have just your code to work with there. Containers could be used to load the game on a low enough level in the OS that load times would be snappy and all you have to do is a framework and install sequence.

This idea would also work well with apps like Taverner (look it up on github), and a project I am working on called basix, which are essentially game file, mod, and save managers for linux. I haven't played with taverner but I think you have to point out individual games. With basix it will pool your steam files and search your home directory but I'm not done with it yet so I'm not going to upload it quiiiiiiite yet :P

Neat idea though. A few of my thoughts. Might save time, might not. GLHF!

Edit: I'll bug test for you if you like :D I'm only handy for lua and python and I imagine you'll be using C for the most of it.

Edit 2: If you use windows 10 as your base you have DX12 and you can figure out all the spying and block it all.

Well windows server core is already a thing, if you were to do this, that is where I would start.

As already pointed out Wine provides the bare essential libraries needed for gaming so an examination of how that works would be next.

1 Like

Put it on git and Ill happily throw in some commits.

Whatcha gonna be using? Im guessing C/C++ and maybe some sort of Microsoft API Visual Basic?

I will most likely be using a mix of c and c++. after looking into it further I think QEMU is a great tool that can be used for this situation. I will look more into windows server core I am basically looking for a version of windows that can be stripped and modified to our needs and one that could possibly no longer matter if the product key exists? windows 7 is being killed next year and all skylake chips being produced have on a hard ware level a binary bit that says oh this is skylake on windows 7 and it will cause the hardware to run slower and also the system will bluescreen more often. If they stop caring about windows 7 and make it obsolete who is to say we cant just take code that is deemed obsolete and reuse it?

Can you link to a source on that? I'd be surprised to see that Intel would actually do something that stupid. I can see Microsoft not implementing new more efficient hardware optimizations that are available on skylake and only implementing them in W10 or something. Intel doing that is like saying "nah, my car only really needs three wheels. I'll take off the passenger front wheel and only make right turns."

Also as it has been pointed out to me this will be granting the users the freedom from microsoft spyware it will not be providing free software. This will be essentially a wrapper that will send windows boot time arguments that will command it to do what we need it to do it will be be necessarily modifying the code of a windows install and redistributing it. I will work with others on creating a windows side installer that goes into the virtual hardware that will command the install to be cut off from MS and that will provide the users the means of freedom they are seeking

yes using Ubuntu is a grab bag for everyone I am simply using it because it is an easy distro for people to move in to and I plan on porting this tool for other distros as well. So far I have set up QEMU and I am testing with windows XP on 4 different systems for the maximum compatibility. I am testing on a i5-6600 with 32 GB of ddr4 ram and a MSI m3 gaming motherboard. I am testing on a HP compaq with a proprietary MOBO and a intel core 2 duo e6550 and the same system again with a e8400. I am testing on a intel i3-4130 with a asus b85m-g mobo and 8 gb of ram. I am doing this to sample a rough estimate with a good part of the user space. I plan on getting a hold of an FX-4300,FX-6300,FX-8350 soon to do some further testing for both teams. I am currently using a Nvidia GTX 980 across all systems as well as a nvidia gForce 7800GS to test to see if this is possible on extremely old cards. I am currently using Windows XP to test to see if a legacy OS is able to function properally and then I plan to move up to windows 7 (Vista is dead). Then I plan on moving to windows 10, because a majority of people are moving away from windows 8.1.

To address the question before of using two outputs for the system. Yes in my testing right now I have to use two inputs and put them into a simple hdmi switch for one of my monitors. I have the LG25UM57 which allows me to split the screen in half down the middle to display both inputs at once. I want to try and find a solution in order to nest the VM window inside of your host window but allow for the iGPU to be used to process the host os and the video card to be used for the guest. This will most likely add more latency to the host os while running the guest as more system calls will need to be made in order to have the iGPU process the images and then send the result over PCI to the Video card to then output the image. I don't think that would work properly as the physical card will be passed to the VM I want to try and find a solution to this issue and I am open to any ideas as I will test all of them and provide documentation on my findings which will be attached to the git page when the software begind development beyond indepth testing.

One thing that would be fantastic if someone could figure out how to create a script that would pass the kernel a boot time argument for the IOMMU enable on team red it is amd_iommu=on on team blue it is intel_iommu=on at boot time. This will need to run one time so ideally the user will install the packages needed and then on the next reboot this script will run once to enable all everything necessarily so the end user does not have to deal with this in order to get the software working with ease. I will figure out how to automate on the next boot(until a solution is found for multiple video sources being dynamically changed) the necessary GPU configurations will be set up based on what the user configured with the front end. on boot the primary gpu will be used as the host gpu and the secondary gpu will not be allowed to be initialized and the drivers for such GPU will be blacklisted to prevent issues.

I wouldn't advise tangling with Microsoft on something like this, it's a good way to end up with a bunch of wasted effort if they come to shut you down. Canonical has only been able to make a little headway thanks to them being well settled into the cloud market before MS got there.

Personally I think requiring two adapters and monitor input switching is fine until the industry makes it happen from the metal up, which is where we're headed with the whole cloud thing anyway.

NVIDIA is pretty much the last holdout trying to sell their overpriced workstation cards by the thousands for cloud gaming platforms, but I suspect they'll relent after a few more big services make their initial purchases. Especially since Canonical has to put pressure on them for their own purposes.

But we could definitely use a noob friendly way to get KVM/qemu working until then. Especially peripheral sharing, the nvidia hacks, and a good built in whitelist firewall for the privacy stuff.

Will you be open sourcing this?

Do you have a git Hub that others can contribute to?

Make games that run on linux and I will buy them.

This will all be opensource with a few exceptions I will be attaching the GNU license with this along with a document giving all of the original contributes credit as I believe that giving credit where it is due is the correct thing to do. I have a wide range of testing platforms I am just working on setting up a automated way to perform this. THIS SOFTWARE DOES NOT COME WITH A COPY OF WINDOWS. You are responsible to provide your OWN iso. YOU CAN GET IT FOR FREE FROM THEIR WEBSITE. It is illegal for me to distribute any form of windows. It is legal to distribute a wrapper for windows that will tell it to boot in different ways and to host it that is perfectly legal. My software will just make the process easier for the end user and will not directly modify any part of windows as that is illegal. I WILL BE WORKING ON A WINDOWS SIDE APPLICATION that you can run within your VM in order to put up physical securities that will do things as blocking the ports and messages that windows could be trying to harvest from you AKA SPY WARE. Once I have this completed I want to release this to the world to give the joy of linux and the power of gaming to the rest of the world as I have found the greatest experiences in it. PM me if you want to be added to the GIT page next week. If you are reading this far into the future and still want to help please PM me as I want to see this project grow until the WINE project is large enough to replace this patch. I have no issue with WINE it just isn't cut out for gaming. My solution is designed for CAD and Gaming.

So I don't think there is any way to air mate setting settings being changed in the bios but in your honest opinion would enabling Intel/amd virtualization be to hard of a task for the common user? It is just one setting and I also found that you can write a script that updates your grub configuration and rebuilds it to enable iommu on boot. The script will read your hard ware to see if hey you have Intel or hey you have amd and it will set the necessary settings. The front-end will present the user with all of the video output options to select from and on next reboot make the changes needed. I want to also make this process reversible in case users change their minds or hardware. What features as end users would be the best in your opinion and how can I make this tool as easy to use as possible also how would you like it if you're dual booting and I could use your already existing second image and boot that? So you could run the two os's in parallel just jail windows. Or would users rather have a way to package up all of the data on their other drive or partition and create their own VM out of it? I want this to be as modular and user friendly as possible so any feedback is nice to hear also I would like to confirm that in Ubuntu 16.04 this is completely possible as I have just manually did everything in under 15 minutes on a fresh install and I am seeing literally native performance

Just a couple more thoughts for you @spit4520

Have you looked at Vagrant? It is used in the dev world to quickly create, start and stop VM's. It can run quite happyily on Linux and integrate well with Virtual Box and VMware Workstation.

Have you also looked at the capabilities of VMware workstation? It is entirely possible to run older games (even some newer) ones on the virtualised GPU - especially if the hosts GPU is powerful, like a 980. This capability is availble in the free version of VMware Workstation although useful features such as snapshots is not.

If you combine these two tools (Vagrant and VMware Workstation) you might be able to quickly deploy a first version of your project on a ubuntu desktop. Granted it will be using some propritary software (VMware) and you won't have the full power of a passed through GPU but you could deliver something in your first project sprint that might help you generate more interest and even attract more support.

Good luck with the project.

2 Likes

I will look into it thank you for the suggestion

If the people who are interested in the project could post a list of their computer specifications as well as their Linux branch and any other things you feel are important I will start building configuration files for your systems and such

@Windell I am running into issues where I am unable to get the system to boot because of x-vga not being supported. I have read that this is a kernel feature, but I have no idea how to properly enable it when I rebuild my kernel. Also the script that you used does not seem to work in my configuration I have follow the guide you created as well as the one on arch's website and a few other sources. I am using Ubuntu 16.04 and the video card is being stubbed on boot and later I am running a scripts:

`#!/bin/bash

modprobe vfio-pci

for dev in "$@"; do
vendor=$(cat /sys/bus/pci/devices/$dev/vendor)
device=$(cat /sys/bus/pci/devices/$dev/device)
if [ -e /sys/bus/pci/devices/$dev/driver ]; then
echo $dev > /sys/bus/pci/devices/$dev/driver/unbind
fi
echo $vendor $device > /sys/bus/pci/drivers/vfio-pci/new_id
done`

this takes in a parameter of the pci address of your video card, the video card audio device if it applies goes in a separate call

0000:01:00.0
0000:01:00.1

the output of dmesg | grep pci-stub before the script is run is as follows:

[ 1.948339] pci-stub: add 10DE:13C0 sub=FFFFFFFF:FFFFFFFF cls=00000000/00000000
[ 1.948458] pci-stub 0000:01:00.0: claimed by stub
[ 1.948462] pci-stub: add 10DE:0FBB sub=FFFFFFFF:FFFFFFFF cls=00000000/00000000
[ 1.948517] pci-stub 0000:01:00.1: claimed by stub

the output of dmesg | grep vfio is as follows:

[ 2.184989] vfio_pci: add [10de:13c0[ffff:ffff]] class 0x000000/00000000
[ 2.184992] vfio_pci: add [10de:0fbb[ffff:ffff]] class 0x000000/00000000
[ 587.473968] vfio-pci 0000:01:00.0: enabling device (0000 -> 0003)
[ 587.474099] vfio_ecap_init: 0000:01:00.0 hiding ecap 0x1e@0x258
[ 587.474114] vfio_ecap_init: 0000:01:00.0 hiding ecap 0x19@0x900
[ 754.940131] vfio_ecap_init: 0000:01:00.0 hiding ecap 0x1e@0x258
[ 754.940138] vfio_ecap_init: 0000:01:00.0 hiding ecap 0x19@0x900
[ 9938.206735] vfio_ecap_init: 0000:01:00.0 hiding ecap 0x1e@0x258
[ 9938.206743] vfio_ecap_init: 0000:01:00.0 hiding ecap 0x19@0x900
[10508.083762] vfio_ecap_init: 0000:01:00.0 hiding ecap 0x1e@0x258
[10508.083769] vfio_ecap_init: 0000:01:00.0 hiding ecap 0x19@0x900

the contents of /etc/default/grub

GRUB_DEFAULT=0

GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=10
GRUB_DISTRIBUTOR=lsb_release -i -s 2> /dev/null || echo Debian
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash nouveau.blacklist=1 intel_iommu=on pci$
GRUB_CMDLINE_LINUX=""

the contents of /etc/initramfs-tools/modules

pci_stub ids=10de:13c0,10de:0fbb

The contents of /etc/modules are as follows:

vfio
vfio_iommu_type1
vfio_pci
pci_stub
kvm
kvm_intel

Any input is good input at this point

For all who are interested the Official Git Page is located Here: