macOS kernel programming bounty to revive SmoothMouse (PAUSED)

The discontinuation of SmoothMouse seems to have upset many people. Now that the pointer lag is fixed in the newer versions of macOS, I was hoping our users would find other 3rd party mouse drivers more useful for they provide more acceleration controls than SmoothMouse. Some switched without any complaints—others, however, hated everything they tried. (Probably a minority, but as a someone from a minority of those who complained about the lag before SmoothMouse came out, I can relate).

Like I’ve said before, we can’t just move things here and there to make SmoothMouse work in macOS Sierra. I mentioned that Apple had deprecated IOHID system calls, but it’s actually just a tip of the iceberg. We’d have to throw away a lot of essential code, yet we’d have nothing to replace it with. When you need to do something like getting raw coordinates from a mouse, you end up in uncharted waters—there’s no documentation, no code samples, nobody knows anything. The only way out is to find someone who can dig deeper than we can imagine. Namely, a genius hacker.

Hackerman from Kung Fury

To make SmoothMouse reliably work in Sierra and subsequent releases of macOS, we need to find new ways to:

  1. Read raw x—y coordinates from connected mice and trackpads and tell one device from another;
  2. Suppress the “system driver” if necessary, i.e. prevent the events from a given device from reaching the default driver and moving the mouse pointer;
  3. Inject pointer movements with relative coordinates without incurring a performance penalty, breaking games and macOS accessibility features (such as shake-to-find and screen zoom).

It’s very likely that what we need is impossible, but I’m going to try my luck and offer a small bounty—the first person who finds these solutions and sends a proof-of-concept will be awarded $500+$300+$200=$1000. The person who forwards this task to the genius who gets the bounty, will also get $50.

Update (February 2017): we’re resuming R&D on our own and pausing the program until further notice. Please email me if you have questions. 

Obviously the solutions need to be useful for and applicable to SmoothMouse development. If a solution requires ripping the OS apart (patching system files etc) or works only in some specific versions of macOS, it is of no use for us.

Until it happens, please consider the project frozen indefinitely.

If you’d like to chip in to raise the stakes please let me know. For any inquiries don’t hesitate to email me.

Relevant open source code: Mouse Movement RecorderIOHIDFamily, Karabiner Elements, Seil.

Update #1: thanks to Seph Soliman, who agreed to contribute $300, bringing the total up to $800.

Update #2: thanks to Nick Aldwin, who agreed to contribute $200, bringing the total up to $1000.

Update #3 (February 2017): we’re resuming R&D on our own and pausing the bounty program until further notice.

This entry was posted in SmoothMouse and tagged . Bookmark the permalink.

18 Responses to macOS kernel programming bounty to revive SmoothMouse (PAUSED)

  1. Pingback: macOS kernel programming bounty to revive SmoothMouse

  2. Miguel says:

    I wanted to know what values in acceleration and sensibility were changed in your application called SmoothMouse when you put “Like in Windows”, like for example: “0.50 acceleration 1500 sensibility”
    Please, now im using an application called SteerMouse and i don’t know what values change so it feels the same as “Like in Windows” cuz doesn’t feel the same.

  3. Uli says:

    First of all, a big thanks for all the hard work! As a confessed Snow Leopard user, SmoothMouse is one of the most essential pieces of software I use.
    Because it fixes the only two serious bugs in Snow Leopard, mouse jitter on slow movements and mouse pointer lag.
    Two questions:
    Does any of the alternatives address these two issues?
    Is there a older version of SmoothMouse that works on Leopard on PPC (G5)?

    • Dae says:

      Hi Uli, thanks for the feedback! The answers to your questions: no & no. I’ve actually never owned a PPC Mac and the first version of SM was released in late 2012.

  4. Daniil says:

    Hi! Can you send me acceleration and sensivity settings for “Like in Windows” profile please? I’m giving CursorSense a try.

    • Dae says:

      I’m sorry but “Like in Windows” is not something you can describe with just two numbers. It is a function which uses the curve (looks like this) to look up the on-screen pointer velocity given the physical velocity (x and y combined). The curve has a varying slope that changes as you move the speed slider. It’s very hard to reproduce all of this in another application without knowing how it actually works inside.

  5. Charlie Hayes says:

    I think I’ve tried all the alternatives but I still can’t get a “like in windows” movement =(

    ControllerMate obviously has the ability to replicate it but without a preset or solid foundation to base one on, It would be extremely difficult to reproduce.

    • Denzel says:

      look up the following. These have been really simple to implement yet REALLY effective.

      For starters, i don’t think full-on apps Sterrmouse or CursorSense can really give the “quick yet accurate feeling” we’ve all been looking for in Sierra na High Sierra.

      And while I’ll admit Steermouse comes close, and although these recommendations are old, they have been working much MUCH better for me as of late as far as a quick easy fix. In order:

      1) MouseFixer 2

      My current favorite. It’s simple: install, reboot, and you you’ll notice a huge difference. It can even run alongside other stuff like steer mouse or SS Exactmouse Tool with no issues AND it starts on startup.

      BUT, make sure to set you tracking speed high in system prefs before you install (or set sensitivity via Steermouse/Cursorsense with Acceleration at 0) because once you mess with it after it all reverts back. It do this, you can use this in Terminal:

      defaults write .GlobalPreferences

      NOTE: don’t go negative for this terminal command (-1). higher the better imo.

      2) killmouseaccel

      In your terminal:

      First download the script called killmouseaccel:

      curl -O

      Next, turn the script into an executable:

      chmod +x killmouseaccel

      Then, run the script:

      ./killmouseaccel mouse

      Voila. You have freed your cursor from the chains of a bad acceleration curve! Again, once you mess with systems pref tracking speed itll revert back.

      3) Decelerator ($0.99)

      This one surprised me, but it actuality worked quite well on it’s own. Again, set your system prefs tracking speed high first, then disable acceleration (or set sensitivity via Steermouse/Cursorsense with Acceleration at 0).

      I might post more later.

      • Charlie Hayes says:

        These don’t allow you to chose a windows acceleration curve which is what I think a lot of people want (myself included)

        • Denzel says:

          You won’t get that without making your own curve from scratch via ControllerMate unfortunately. Windows has a sharp exponential curve while Windows has a sigmoid curve. Most acceleration apps are going to give you a linear curve (and not a sigmoid curve) which is why the (window-like” acceleration option isn’t present. It takes more than just removing acceleration altogether.

          On top of that, even just removing acceleration alone has its issues as some system prefs changes or settings can affect how the app goes about removing it or how effective the “removal” is.

          Example: SteerMouse takes whatever acceleration curve is presently active on you mac and bends it based on the perimeters you set. Meaning, if I have my standard tracking speed set at 3 (highest) then run Steermouse and set acceleration to 0, theres a “drag” to the cursor’s movement as Steermouse is both scaling my current settings and locking in the 0 i’ve set. However, if I set my tracking speed to 0 then set acceleration to 0 in SteerMouse, this drag is much less noticable.

          My favorite option though seems to be “mousefix” as its linearity feel the most 1:1-esque, it’s simple activate and and you can then use the “sensitivity” option in SteerMouse/Cursorsense to speed up/slow down how fast the cursor moves (leave Acceleration 0, don’t run other accelkill apps)

          And why am I bothering with all this? I love playing FPS games with a retina screen, in that, if you set up a gaming mouse just right, you get this “double-pixel accuracy” or rather a 2:1 pixel tolerance when aiming versus a 1:1 found in Boot Camp or Windows. Its complicated but.

Leave a Reply

Your email address will not be published. Required fields are marked *