Libinput's bus factor is 1 (2019)
who-t.blogspot.com
who-t.blogspot.com
this should be a problem of Red Hat management. I'm sure they are very much aware Hutterer is overwhelmed (what with blog posts, talks even, and all), but they won't hire anyone to work with him.
In that blog post, there's a call to share the load but do it as free labor:
"Anyway, I'm largely writing this blog post in the hope that someone gets motivated enough to dive into this. Right now, if you get 50 patches into libinput you get the coveted second-from-the-top spot, with all the fame and fortune that entails (i.e. little to none, but hey, underdogs are big in popular culture)."
I believe if that position came with a Red Hat paycheck, finding a #2 wouldn't be such a problem.
Not saying that these IBM jobs are from the Red Hat part of IBM, but not the best time to hope they will hire more.
Not that I want this to be true! I writing these comments from a laptop that I special ordered without even a Windows license since I planned to only run Linux on it.
Red Hat doesn't make much if any money on desktop, yet as you mentioned RH does employ people to work on it. It's already largely a charitable service to the community. As much as I do wish they'd hire more people and make the touchpad amazing, it seems a little entitled to criticize them for not digging even deeper into the charity pockets.
Go big or go home?
Now that they have a deal with Lenovo to have Fedora preinstalled on their P-series laptops, I do think they have a vested interest in creating a market-worthy workstation OS.
I just hope people won't be writing in about it, "Nice try, but palm rejection on the touchpad sucks camel's balls!"
https://bill.harding.blog/2020/05/17/linux-touchpad-prelimin...
The closest I have seen is the Snowpad[1] but it's been discontinued by the maker and they pulled down the source as well.
I'd try duplicating it but it used the Microchip MTCH6301 and it's been marked `Not recommended for use in new designs.` I'm hunting for an easy to use alternative if anyone knows one. I may still take a stab at the MTCH6301 just because of how easy it looks to use.
Also: Can you recommend some reading material as an introduction to using a capacitive digitizer? I am planning to use one in an upcoming project (either one from a tablet glass replacement or a stand alone one) and really have no idea what to look out for yet in terms of communication with my Linux board (bonus: Something about DIYing one because I need a special format, but I guess that's especially hard because it's supposed to go on to a screen).
- Control over the size/shape of the sensor pad.
- Control over communication (i2c/spi/usb)
- Ability to explore gesture behaviors and expose simplified interfaces to the OS.
- Control over click feel/behaviors by customizing snap switch style, mount, and locations.
- Control over the touch surface finish. (Did you know you can laser cut glass screen protectors? Why are none of these touch pads glass outside of macbooks?)
- Open documentation on all of the above.
As for reading material I can't recommend anything as a summery (see my last bullet). Manufacture design guidelines are probably where you should start.
Case in point: MTCH6301: https://www.microchip.com/wwwproducts/en/MTCH6301 Microchip Sensor design guide: http://ww1.microchip.com/downloads/en/DeviceDoc/FAQs%20-%20S...
- Mechanics (a good surface, sensing)
- Robustly designed state machines to track states even before your finger lands.
- Math (to deal with finger acceleration, stabilization)
- Feedback! Mechanical clicking, piezo, weight actuation, etc. I cringe when I see projects lacking feedback.
As a teaser here's my messy breakdown of the macbook trackpad states, based on things done back around 2008/2009 (http://blog.sendapatch.se/2009/november/multitouch-on-unibod...):
enum RawTouchStateOneValues {
TOUCH_STARTED_STATE = 1, // initial touch started state - i.e. first frame of a touch. warning on this state: StateTwoValues seem invalid here
TOUCH_HOVERING_STATE = 2, // multi-frame: typically occurs when a touch is about to land.
TOUCH_LANDED_ON_PAD_STATE = 3, // usually single-frame, but can occur multiple times if a touch hovers and returns (from state 6,2,1) - you can also go here from state 6, which means a hanging touch can 'return'
TOUCH_ON_PAD_STATE = 4, // typical duration of a touch - moving around on pad
TOUCH_LEAVING_PAD_STATE = 5, // usually single-frame -
TOUCH_LEFT_NOW_HOVERING_STATE = 6, // multi-frame: occurs when a touch occurred but then left pad (state 5), and is now hovering
TOUCH_ENDED_STATE = 7 // single-frame: touch finally ends
};
enum RawTouchStateTwoValues {
TOUCH_DETECTED_ALTSTATE = 0, //state only seems to occur on initial touch (stateOne's TOUCH_STARTED_STATE), which I filter out
TOUCH_RESTING = 1,
TOUCH_NON_RESTING = 2,
TOUCH_NON_RESTING_AGAIN = 3,
TOUCH_THIRD_TOUCH = 4,
TOUCH_EDGE_REGION = 5, //only observed on magic trackpad - seems to occur when starting at the edge.
TOUCH_SIXTH_TOUCH = 6,
TOUCH_GROWING_FROM_EDGE = 7, //both cases 12 and 7 seem be used for palm-rejection scenarios
TOUCH_EIGHTH_TOUCH = 8,
TOUCH_NINTH_TOUCH = 9,
TOUCH_TENTH_TOUCH = 10,
TOUCH_ELEVENTH_TOUCH = 11,
TOUCH_COMING_FROM_EDGE = 12 //both cases 12 and 7 seem be used for palm-rejection scenarios
//other states observed but unknown - 4 (seems to consistently occur when I have three fingers down.
// likely occurs in certain pad regions)
//
};Luckily, for those using desktops who still want to use a trackpad, the Magic Trackpad works really well out of the box too. And there are not many other options in the market.
I used to prefer trackballs from Logitech, but current models are nowhere as smooth as those from the 1990s and early 2000s.
As a former Mac user, I can also recommend whatever is in the HP EliteBook I'm using now.
Firms running Linux on servers can pay their employees to contribute to open source.
But a peripheral input driver? Ubuntu had a shot at being "Desktop Linux" but it didn't pan out.
Especially when remote desktop on Linux is not very good. (I've only used VNC and XRDP) not to mention a lot of extra packages.
It's here: https://web.archive.org/web/20101222190833/http://www.micros...
It is annoying in other OSes that you have to jump through hoops to disable that stuff.
I would argue that it does enhance the precision if it's correctly implemented. (I haven't used Windows in a decade, so I can't comment on that point.)
Example: on a laptop, move the cursor to the bottom left corner of the screen. In one very slow continuous swipe, drag your finger from the bottom left to the top right of your touchpad. How far across your screen do you get? In my case, I get only about 1/3 of the way across the diagonal.
Assume I have no acceleration feature on my touchpad driver. This means I have two options to make the touchpad usable. Either (a) I can get used to dragging across the entire touchpad 3+ times to get the cursor across the screen, or (b) I can turn the touchpad speed way up. Suppose I do the latter.
Now suppose my cursor is 10px away from some target and I want to hit that target with a quick movement on the touchpad. Because of the very high speed required by the previous change, my accuracy is greatly reduced. I have trouble hitting small targets with tiny movements on the touchpad.
On the contrary, acceleration gets me the best of both worlds. With one quick swipe, I can get the cursor all the way across the screen. This is the "expected" behavior most people have for a laptop the first time they pick it up. On the other hand, when I'm trying to hit a small target with a slow cursor movement, I have a much easier time doing that. This feels like "enhanced precision" to your average user - the cursor moves more slowly and accurately when I need it to.
Different input modalities deserve different affordances.
Apple’s Magic Trackpad is over 6 inch, the latest MacBooks have a trackpad of over 5 inch.
I think mousepads are mostly an artifact of pre optical & laser mice, if someone uses one today it's either because they have a glass desktop or they want wrist support.
Or they just want a good surface where the mouse glides smoothly, without any rubbing or scraping or pits that affect tracking..
I've never had a desk that felt good without a pad. I imagine glass would be smooth as long as it's clean.
Even the original Mac, with its 512 pixel screen width, had a setting that enabled mouse acceleration (fairly rudimentary. It doubled distance travelled when the sum of horizontal and vertical displacement exceeded 6 pixels).
I think the discussion is more about tuning the acceleration curve than about whether to have one or not, for both mice and trackpads. There probably isn’t a single answer that suits everybody, either.
Acceleration works much better on trackpads though.
1:1 is all I ever wanted.
Now I’ve just gone over to Apple’s trackpads for 100% of my cursor needs.
[1] http://download.microsoft.com/download/B/1/0/B109F931-70E2-4...
Apple is very opinionated about all the parts of User Interfaces (including inputs), it's great if you agree with their opinions.
https://downloads.steelseriescdn.com/drivers/tools/steelseri...
The trackpad, it's the opposite.
Years ago I had this argument with a coworker, and I tried to take the position that the Windows curve is better for games. He politely disagreed, I implied that he was a casual gamer, and he gently told me of the year his Quake III team won the world championship. We spent the next while watching demo videos of him doing 360 noscopes with the rail gun against a target in the air.
I handily lost that disagreement.
(I think libinput breaks that -- or at some point did break it -- and I solve it by removing libinput. Coincidentally, I started having issues with my trackpad when someone somewhere made libinput the new default. I fixed that by removing libinput)
Is there something else you'd like to see?
I have never even noticed a difference, let alone registered a preference.
That's the mentality of the Freedesktop-Redhat-Gnome-Poettering-Wayland-whichever-comes-next crowd.
Take a piece of software that's been working for years and fulfils pretty much every need (after a couple of decades of bug fixing and feature completing), declare it deprecated, and propose/impose a replacement that you push as 'better'. Better for what, in which way? It doesn't matter, just say it is 'modern' and the present system if a messy pile of cruft. Don't forget to make 1 or 2 blog posts which will be pasted as the definitive authoritative reference on the subject each of the 1000 time someone raises a problem with the new tool or its approach.
If you want to make the tactic more efficient, first become the handler of the present system and then 'actively' stop maintaining it and refuse to add the few features that new usages may demand, so that that you can justify your claim of deprecation.
Then you just have to spend 10 to 15 years getting your brand new toy to an equal condition as the former, and achieve feature parity. When you are done, the super lean and clean model you advertised 10 years before has become the same kind of old farts' mess you ranted against, sometimes more messy because you started by actively fighting against the extensibility which, according to you, was the root of all the mess in the older tool, in order to impose a clean, reduced set of functions, so you had to resort to dirty hacks to add the requested functions. After boasting the first couple of years from conference to conference, don't forget to whine all along the next decade when real and boring work and rework has to be done to reach feature parity.
Then, you're finally done, pick another part of the ecosystem (that users had voluntarily picked because they like it or because it was doing the job well for their use case) and repeat the same procedure.
> declare it deprecated, and propose/impose a replacement that you push as 'better'. Better for what, in which way? It doesn't matter, just say it is 'modern' and the present system if a messy pile of cruft.
with your's
> the synaptic codebase was a mess without tests whatsoever
EDIT3: also see the section on this ArchWiki page: https://wiki.archlinux.org/index.php/Wayland#Input_grabbing_...
Edit: also, even breakage for users that can be fixed by adapting to the next technology (e.g., evdev -> libinput, or X Windows -> Wayland) still costs users time.
EDIT4: Note that I am not saying X Windows is "good", but the fact is Wayland's design is hostile to a lot of things that work with X Windows, instead of Wayland improving on X Windows. So how could I be content with Wayland possibly replacing Xorg?
Hutterer is surely not some evil genius nor is he part of a conspiracy; but I think that Red Hat's (or, now, IBM's) business model indeed may present some adverse incentives to software maintainers: I think Red Hat's main source of revenue is from support, but they deal in open-source software - which should be (in principle), and actually is, much easier to modify, adapt, fork, just plain use without paying Red Hat. Thus it it is necessary to have almost all relevant software maintainers on your payroll, but that is not enough, to protect their business their software needs to be "safe" from forks, that means making it unnecessarily (from a technical standpoint) complicated and reinventing everything so only your employees are familiar with the code. I am sure Red Hat employees would let the technical and power user perspective prevail given a sufficient and independent cash source, but alas, they are in IBM's employ and don't want to get fired and do want a periodical raise; so it is hard for me to believe that they don't do what is good for their employer's business.
I am not comfortable airing speculation like this given that some people will feel hurt, but I am in real fear for open-source and Linux (because, what could I use instead ...), so there's my opinion. EDIT5: my child commenter correctly pointed out that my speculation about programmers employed at companies with certain business models is FUD-y, because of the lack of evidence and appeal to fear. I guess the only thing I can say about that is that my fears are honest, I am not aiming to harm Red Hat or anybody I just observed a pattern, but have no proof, of course. Otherwise, aside from my "FUD", the core idea I was trying to get across was to think about how the design choices in creating open-source software or protocols that have the potential to become monopolistic may affect us as users. I.e., please do not accept breakage just because of some undefined "modernity", as a lot of people in fact do. Also, I think there may be some systemic societal problems that I am not smart enough to propose a solution to if Red Hat is really bad for open-source. In other words, maybe another open-source business model is needed?
EDIT2: I rambled too far off the primary topic here (libinput), so let me just say that libinput very well might be the best we can have given the requirement to support both mices and other, less efficient, input devices; and also both X Windows and Wayland. Not that I'm happy about those requirements, obviously.
This is par for the course. Open source does not have any warranty, it can break or be deprecated at any time. I don't care to discuss Wayland right now, if you don't want to use it you don't have to.
>If two Linux processes are owned by the same user there is no point in restricting what one can know about the other.
This is wrong on several levels. For example, namespacing and SELinux policies still work even when processes share the same user, and there are valid reasons why you would want to do that.
>I am not comfortable airing speculation like this given that some people will feel hurt, but I am in real fear for open-source and Linux
Please do not allow yourself to succumb to FUD that is spread on social media. This type of speculation comes up constantly in these threads and it's completely unfounded. Sorry. It's open source, anyone can pay for support/warranties for it from any company that they like, or you can not pay for support from anyone at all. It's your decision.
There is no relation between open-source licensing or culture and careless breakage. Even if there was, what would be the justification for it (Red Hat's behavior).
> This is wrong on several levels. For example, namespacing and SELinux policies still work even when processes share the same user, and there are valid reasons why you would want to do that.
I know about cgroups, namespacing, SELinux and how they could hypothetically provide other means of privilege separation than users and groups already provide; but I don't see how that applies to Wayland. I doubt anyone has actually set up a system with sandboxed untrusted processes in a way that would justify the Wayland security model. The way I see it, Wayland will over time gain even more extension protocols than X Windows has to accomodate things that were not thought out during the design phase. I also doubt the user namespace implementation in the kernel will be solid enough for secure usage for many years. Or that compositor and application programmers will understand the security implications of their software on the possible security models well enough for users to actually have a usable and feature-complete system where the Wayland-implied security model could shine.
There is no relation between open-source licensing or culture and working software either. Go take a look around on github and you will see tons of broken, outdated and unmaintained software. (I am not saying there is anything wrong with this, eventual death is a fundamental part of any product lifecycle)
>I doubt anyone has actually set up a system with sandboxed untrusted processes in a way that would justify the Wayland security model.
There already is one, called Flatpak.
I said "a system", making a sandboxing program like Flatpak is the easy part. Also, why is it that neither https://flatpak.org nor https://github.com/flatpak/flatpak mention security or "secure"? I think that is because Flatpak is not meant for running untrusted/malicious processes (without using additional protection; such as a virtual machine, another OS user, or another physical machine). I am not sure why that is, but it may be because, as I said, it is simply too complicated to think through everything while satisfying relevant security models, or because Flatpak programmers know that for real security you do not want user namespaces in your Linux (attack surface increase, etc.).
Also, even if Flatpak and the kernel were perfect, if you want to sandbox a complex application with only Flatpak; using the app and configuring its sandbox would then be an impractical nightmare for either administrators or users. See the article linked here about the problems with Flatpak-sandboxing complex real-world programs: https://news.ycombinator.com/item?id=18180017.
And this comment is also informative: https://news.ycombinator.com/item?id=14409234
Basically, for real secure and robust sandboxing I think one needs to use the Chromium setuid + seccomp + multiple processes approach. This implies thinking about security while designing the program, and it being open-source; so it is only applicable to trusted software that deals with untrusted data, or executes Javascript or something. So, if a program is designed with security in mind (e.g., Chromium), Flatpak provides nothing beneficial. On the other hand, if one needs to execute real-world untrusted software, it again seems it is necessary to use another user account or another machine.
I think you have made a lot of wild assumptions from reading those posts you linked, and those assumptions don't apply to everyone. Regardless of your feelings on Flatpak/Wayland in certain applications, they are being used for security purposes right now. The Chromium security model also makes a lot of assumptions and only applies to certain applications.
People complain about Systemd the most; but I fear Wayland more, it will be horrible for power-users if it pushes out X Windows.
* do not want just the big Windows-like inefficient and bloated Gnome and KDE desktop environments. And also for those that like or need having various "desktop environments" to switch between.
* like to programmatically grab and inject input events. I.e., AFAIK you will not be able to implement atbswp for Wayland environments using pure Wayland, if at all. Even if you do succeed (by depending on a Wayland extension, working with specific compositors or talking directly to the kernel), it will be more difficult than for X Windows.
Quoting my comment from this thread, near yours:
> Wayland compositors, unlike X Windows window managers, are complicated to implement and on top of that the Wayland protocol standardizes little. This hurts the Wayland compositor ecosystem (again, as compared to X Window managers), and the lack of standardization hurts users directly, too (because then we have to rely on compositor-specific features, thus being tied to that compositor implementation). Last time I looked there still was not any prevalent solution to injecting or logging input events, and even capturing the screen (screen shot) was dependent on the specific compositor implementation. Remember the excuse for ditching X Windows? It was X having too many extensions to the standard. But even that is better than not standardizing on expected features at all.
> Note that I am not saying X Windows is "good", but the fact is Wayland's design is hostile to a lot of things that work with X Windows, instead of Wayland improving on X Windows. So how could I be content with Wayland possibly replacing Xorg?
Also see these (sub)threads:
https://old.reddit.com/r/wayland/comments/85q78y/why_im_not_...
You mean using linux to connect to remote PCs? What are the issues you are facing?
I've been happily using remmina (it does use something else for the actual RDP connection IIRC) on Ubuntu to connect to headless Windows box via RDP for CAD/ECAD work for the last year or so.
The windows box is in local gigabit network though.
Having a remote Linux box that I want to get a remote desktop into.
Remmina is really good, I agree.
Abstracting hardware as an open-source API is definitely a more painful job then other kind of projects like a web project. It's because you have absolutely no control over how the hardware works, and each hardware vendors work differently.
The worst moment is when the maintainer receives a reaction like this: "Oh it doesn't work on my hardware. Plz fix it". How the hell to fix it when the maintainer doesn't have the hardware? But there are people complain and criticize that the maintainer doesn't do the job for them. You can easily see these kinds of cases in desktop related project like Sway Wayland compositor. (mainly because of Nvidia of course.)
Replace 'hardware' with 'browser' and you are in the same situation.
As someone with a degree in embedded systems engineering, I have a lot more sympathy for hardware quirks than browser quirks. Hardware can't easily be updated, browsers can.
> It is often not fun at all.
I'd rather spend weeks researching a hardware bug than spending hours on SO to find CSS hacks to make some browser render my page properly.
I would too, but only if it is my hardware. But for other guy's hardware who want to use your project? I will loose an interest if it is a free job.
At least web browsers work in the same way in many cases. Of course there are some cross-browser incompatibilities but workarounds are not as hard as hardware.
I wondered how a single person can verify, fix and test issues related to touchpads on a number of different laptops. Either Hutterer has a room filled with hardware or the people opening the issues become testers of the fix.
I looked at the closed issues and it's probably the latter case. This means that there is an extra filter compared to the Linux projects I raised issues to: know about issue trackers, find the issue tracker, be able to test a fix.
On the software development side, this looks like a difficult project to keep running because the interactions with so many occasional testers.
Both of them were back at work after a week, one of them had problems with their arm for a while longer but this risk is way overblown.
But yeah, I don't even walk out in front of vehicles that I'm not certain will stop when I have a green light and they have a red light. This surely pisses some drivers off when I stop in the middle of the road waiting for them to stop. They seem to be like "I'm not going to kill you and I'm offended you act like I will".
Obligatory: https://en.wikipedia.org/wiki/Hans_Reiser
I'd buy a bus with my winnings and put the lottery factor into effect for my former coworkers.
Example from the lwn article:
> The xf86-input-evdev driver is in maintenance mode at this point. The last commit was in May 2018 and, since the 2.10.0 release four years ago, there have been a total of 19 commits.
Maybe that's actually a sign that it's good enough and doesn't need major adjustments? But here it is presented as if it is a problem.
I say this not to criticize, but only to point out that the driver is not "done". I am incredibly impressed with Peter Hutterer's skills that things work as well as they do, given that he's essentially the only person working on it. It could use more eyes and hands.
I'm curious what hardware and drivers you've tried. I'm using a fairly large Synaptics touchpad on a Dell laptop with the xf86-input-synaptics driver. It's so good that I literally had to test it just now to see if it was possible to fool it at all. Even very light touches with the edge of my palm are unable to convince the driver to click. I can't move the cursor at all. At least in my case, it works perfectly... maybe I'm just lucky. (Or maybe the new libinput driver is still not up to snuff.)
Unless he's planning some way to get that context and implement it later, that pretty much makes libinput unusable for me. Relying on every individual program to implement their own kinetic scrolling guarantees it'll act differently across all of them - or just be nonexistent, as is the case now.
IIRC, the one bug introduced by the synaptics way of handling it is if the mouse is moved from one window to another during the period while it's still scrolling, it then scrolls the newly-focused window instead. This annoyance is so extremely minor I simply do not care.
https://anarc.at/blog/2019-10-16-bus-factor/
Cynics have also suggested the average is closer to zero, but I still have hope that we at least need buses for a catastrophe to happen. ;)
Good idea!
But with all these little issues that cause problems for individual users on all the different scrollpads and touchpads and other non-standard hardware, nobody knows the true harm it may cause and how many users decided to get a Mac or even Windows because some esoteric hardware they owned just wouldn't work, but could have been fixed with just a small patch had the developers been available. This will become even more true as WSL2 becomes a more viable alternative.
Personally, my 'jumpy' touchpad on a new Dell Latitude I'd purchased a few years ago was my final straw in using Linux for development work. It was nearly useless with several different distros without an external mouse, and after getting used to Macbook's touchpad, I just couldn't rationalize using Linux when the touchpad is something I use so much.
Fonts are another one of these issues that I think could be solved more easily than even a few years ago - several important patents have expired and Google and others donated very high quality fonts to the community. Unfortunately, there just isn't the amount of paid developers working to ensure that things look good out of the box on every monitor, and so fonts often look horrible, especially to new users who are coming from Mac and Windows, where the issue was solved by full time UI experts a decade ago.
BTW, the jumpiness is probably configurable, see https://wiki.archlinux.org/index.php/Mouse_acceleration
For example (if you want to use X Windows), when I do
xinput list
I get ...
⎜ ↳ ETPS/2 Elantech Touchpad id=15 [slave pointer (2)]
...
and then I would do xinput list-props 15
and play with "Coordinate Transformation Matrix", or "libinput Accel Speed" for speed and acceleration.I suppose Github and other repositories would be an ideal place to do that since they already have visibility into commits.
Also previous experience burned him, when he said yes way too often. What if Stroustrup would not have been that notorious yea sayer?
Perhaps we wouldn't have to deal with C++ in the first place? His tactics were part of what made the language popular.
Eg they still import modules via (automated) copy-and-paste.
Do you have a bus number of one because nobody cares, or because nobody cares enough to put up with the code (or worse, you).
You have to entice people in sometimes, and many of us are great at other things but terrible at this.
The worst one, my recommendation was to get rid of it and do something else. I worked on making it more approachable but it was slow going and thankless work, as the previous maintainer had tried to do (he swapped out a grammatically unsound DSL for a set of functions and macros in Python)
When I had succeeded in getting the bus number on my other responsibilities above 3, I left. And this is when one of my coworkers noticed that all but one former team member were associated with this code when they left, so maybe we should listen.
I think the takeaway from this is sometimes it's you, sometimes it's the situation, but unless you change something, nothing will change. And even if you do change something, you can't always win. I strongly believe starting over is the last resort, but it is a resort.