Comments by "" (@grokitall) on "Brodie Robertson"
channel.
-
The fundamental issue here is that you have an important maintainer (linus) slightly advocating for rust for linux, and blocking c only code which breaks the rust build, and a less important maintainer (christoph) basically saying he wants to burn that whole project to the ground.
This basic incompatibility affects the basic survival of not just the rust for linux project, but also those c coders who for reasons compile the kernel with the rust flag set to off.
Calling for a definitive answer to what the truth is is a long overdue request, and the faliure of linus ang greg to address that issue will continue to cause problems until it is resolved.
As was said in the thread, it is a basic survival issue for the rust for linux project, and for those getting their c code bounced for rust incompatibility.
Stating that in the end, the only solution in the absence of such an answer from linus is to try and submit directly to linus and get the answer that way is basically just stating the truth about how to deal with a maintainer who is just obstructing code for personal reasons.
Given that the maintainer has publically stated he would like to burn the entire project to the ground, when breaking code in the project is already getting c code patches bounced, it just strikes me that refering this to the code of conduct guys seems fairly obvious, as this level of hostility towards other contributers, the late nacking for non technical reasons, and so on seem like the sort of thing they should have an opinion on if they are to be of any relevance.
While there are valid issues about the inclusion of rust code, that is not what is happening here. It is not about the quality of rust code in the kernel, but the existence of such code, which by now seems to at least have implicit support from linus. The technical question of not having the wrapper duplicated in every driver is basic programming, and the undesirability of this has been accepted practice for well over a decade.
Having such code exist was responded to by christoph basically telling the contributer to go pound sand, rather than giving a constructive suggestion as to an alternative location which would be acceptable.
Almost nobody came out of this looking good.
The maintainer got away with being toxic about a decision which in theory at least seems to have already been made by linus.
The code of conduct guys got away with ignoring at the very least a request as to if the behaviour of the maintainer was in scope for them to consider.
Linus and greg got away with refusing to address the core question of what is the status of rust code in the kernel. Either it is a first class citizen, and christoph should not be blocking it, or it is not, and linus should not be blocking pure c code for breaking it. You can't have it both ways.
69
-
53
-
16
-
14
-
12
-
11
-
10
-
10
-
10
-
10
-
9
-
5
-
4
-
one of the main reasons for the dislike of systemd is the mentality of the developers, starting with leonard and continuing through his fanboys. first, he identifies potentially valid problems. he did this with avahi, with pulseaudio and then with systemd.
then he get the bit he is working on to be "dev complete", where it works on his machine (in a way that is deliberately incompatable with the alternatives) , and doesn't care if it works on anyone elses machine, and relies on his fanboys to get it to work on anything else, while he completely loses interest in it.
this bit is then excused as being optional, and thus it doesn't matter that is incompatable, until one of the higher levels of stuff has a hard dependency on it, and suddenly the alternatives are squeezed out of the mainstream ecosystem, making it harder to remove it when it needs replacing.
also, when they do something that causes problems for some other project, well that is ok, because we won't fix it because it in our code.
these and other behaviours are just some of the reasons that people don't trust the systemd developers and the fact that redhat has not made any efforts to tone down these bad behaviours is why people don't trust redhat about systemd
4
-
4
-
4
-
4
-
4
-
3
-
This is the actual reason for the regulation.
Unlike the us, the EU recognises that climate change is a thing, and that most power is currently generated from fossil fuels. The best way and the cheapest is to not waste the power in the first place.
Using a TV as an example, cheap tvs used to just turn off the tube when you put it on standby, wheras expensive ones did it properly, leaving just the remote control unit turned on, so it could turn the TV back on. The difference in power usage could sometimes be as high as 80% of the peak usage when using the TV, which is a lot of wasted power you have to generate.
The same types of mistake were made with multiple generations of devices, including satellite TV boxes, fridges, home automation tech, etc, and to fix this they made this series of regulations basically saying that when you don't need to be wasting power, you should not do it if you do not need to.
The issue with the kde and gnome suspend flag seems to come from conflating 2 different use cases under the same flag.
The first case is the one relating to power usage and sleep, hibernate and power off. The default should be to reduce power usage when it is not needed, but is currently used as a flag to turn autosuspend on and off.
The second use case is where no matter what you are doing, you need to force power off due to running low on battery power. This applies both to laptops and to any desktop or server running with a decent ups, and gradually degrading functionality can extend the time needed until forced shutdown is needed. An example would be to disable windows whole drive indexing on battery power, thus extending battery life.
This second use case should have the default be forced shutdown for laptops and for desktops and servers on battery power, and is irrelevant to both on mains power.
By conflating the 2 different use cases, you just end up with the currently broken understanding of what the flag should do, and the related arguments about the defaults.
3
-
@kirglow4639 i don't dispute that the description i give does not apply to all of the rust team, only to too much of it, and even more so to the wider rust community.
it is this lack of understanding of the level of work involved by the wider community, and their toxicity at getting push back which i am calling out.
also there are a toxic subset of developers who do fit the problem child model i pointed out, and the rest of the rust community have either been conspicuous by their absence when these people are called out, or completely miss the points being raised against them and come back with resposes that while pointing out valid good points fail to address the issues actually raised.
a simple example of this is when the author of bcachefs was called out for ignoring how the timings of the kernel development process worked, most rust developers were silent, and the few who could be bothered to comment ignored the issues raised and either were just saying that the code was brilliant because it was in rust, or that the work the developer was doing was great, neither of which had anything to do with why the guy got called out in the first place.
if your community fails to accept that when building on top of other peoples work you need to learn how to play well with others, it is hardly surprising when that toxic community is not looked upon favourably by those other people.
3
-
@kirglow4639 so you are saying the bcachefs maintainer did not do a large code dump of new code extremely late in the release cycle, causing him to get called out by linus, and that lots of rust people came out against him and in support of linus?
or what about the rust in linux maintainer who quit, because while the real work was great, the political garbage was not worth putting up with, and the rust community was not helping fight back against it?
what about all the people in the threads around multiple videos here claiming that despite not being rust programmers, the c kernel maintainers should just go into the rust binding and fix them just like they do with the c code they actually write?
not to mention all of the people who say gathering the lifetime information is so trivial that it is not worth them doing it themselves, because it is only documentation, even though that information is not needed in c and takes quite a bit of time to collect?
or how about the vitriol poured on ted tso for pointing out that at kernel scale, the rust code is a minority use case, and most of the work will continue to be done on the c code, which might break the rust code as it will not be part of the stable apis, and that the rust coders will need to fix it because most of the c maintainers don't write rust?
all of these and more crop up repeatedly in these threads, but not a single voice from the rust side ever speaks up to say that the c maintainers might have valid points, or that the hard core rust advocates might be being less than fair to the c maintainers.
this is not setting up a straw man, just observing that the rust community in these threads when seeing a problem with adding third party rust code to the c kernel seem to expect the c maintainers to do all of the work, even when they don't know rust and the things they want are not something that matters in c, and then seem surprised when the c maintainers quite reasonably say that they don't write rust, and that what they are asking for is a non trivial amount of work.
3
-
@kirglow4639 i won't ask you to cover any points about most of the cases, but if you have any knowledge of any comment by any rust contributer who thinks that the bcachefs developer doing a huge dump of new code right at the end of the merge window is anything but perfectly fine, i would be pleased to hear about it.
as to lifetimes, documentation, and api changes, the problem is that the rust community is approaching them from only a rust perspective.
lifetimes are only of interest to rust programmers and compiler writers, so it is not really a c thing. the documentation being asked for is largely for how the rust semantics would work with the c code, so again their is a fairly significant mismatch.
api changes in c are generally looked down on, and the level of resistance is proportional to the number of callers in the surrounding code. the more callers the less the desire to change the code. however then general method to do api changes in c is first to point out what the problems are in the existing code and why in a convincing manner, then to come up with a better api which can be wrapped by the existing api so that the existing code still works and does not need changing all at once, and then be better enough that other users find it preferable to the prior api and use it instead.
this does not seem from the comments i have seen to be the way the rust developers try and get improved apis.
note: i am not saying that the apis could not be better, or that the documentation could not be improved, or that extra tests could not be written to make how the existing apis are supposed to work clearer, only that from what i have seen the rust developers do not seem to be engaging with the c developers in the way that the c conventions usually have such interactions work, and if they did, it might work a lot better. after all, one of the purposes of testing is to document and clarify how the interface actually works.
3
-
@kuhluhOG yes lifetimes exist in every language, but rust seems to need them to be known at api definition time for every variable mentioned in those apis, unlike just about every other language. when you put this constraint on another language just to get your type system to work, it does not come for free.
i do not doubt that it is possible to write kernel code in rust, nor do the c maintainers, in fact some people are writing a kernel in rust, and good luck to them.
people are also writing code for the kernel, but when you can't even get a stable compiler to work and need to download the nightly builds to get the code to even compile (according to one of the compiler devs st a rust conference), and you need an unspecified amount of extra work to even be able to start doing work on the unstable internal apis, there naturally arises the question of how much work and who has to do it.
as to the problem with the drm subsystem, i've not seen the thread, so i don't know if it was done as a discussion around "this variable is used this way here and an incompatible way there", or if they just went and fixed the more problematical one for them to work in the way that made it easier for the rust developers, and then did a big code dump with little prior discussion.
if it is the second case, it is the same issue of not playing well with others except on your own terms, and the resulting problems are deserved.
if it is the first, then the issue should be raised on the usual channels, and initial patches proposed, with ongoing work to figure out if those patches are the best fix to the identified problems, just like with any other c developer.
i just don't have enough context to determine if it was the rust devs, the c maintainers, or both talking past each other, and thus do not have a right to an opinion on the details i do not know.
3
-
3
-
2
-
i think this whole thread misses a basic point about developing large systems. in such systems you want a stable public api, and a flexible private api. this is further constrained by the in tree code, so that if you break it, you find out and fix it. with out of tree code, you have exactly the same problems you get with any long lived unmerged branch, that the ground underneath it changes over time, and like with the large snowflake block everyone is afraid to touch, it eventually gets broken because it is effectively being run as a long lived fork of the main code base. the only solution to this is to work hard to move more of the code into the mainline branch, to get all of the benefits and reduce the costs of maintaining it out of tree.
this out of tree cost is further agravated for rust in that the bindings for the unstable private apis require an additional layer of future proofing semantics which the core c code does not need yet. for c (and most other languages) the idea of did that change break anything within the existing code determined at commit time is good enough, and those extra semantics the rust people want are only added as they are discovered by breaking code with the next change.
the linux kernel usually does an exceptional job of providing a stable public api, but what the rust people are basically asking for is to make the private api a stable public api as well, and quite understandably the maintainers are saying that it does not make sense to do so, but feel free to do the work yourself, but don't be surprised if it breaks sometimes.
to the maintainers, every piece of code not written in the core language of the project is effectively acting as out of tree code, so if you want to play in their sandbox, you get to enjoy the additional work that goes with it.
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
1
-
1
-
no, the major question is can they do anything about it without shooting themselves in the head. all a backup checker needs to do is checksum every file, and export that audit report to a non rhel machine. this is a good idea for security auditing anyway, so banning it would be very difficult. so would banning any non rhel machine from the network.
once you have this audit database, you can do the same for any other distribution, and instantly flag up any differences, which from a technical viewpoint is no different from comparing todays and yesterdays reports, so they cannot easily ban that either.
once you have the list of files which is different, you can decide if it matters, and just tweak your patch list until you get the same checksum. as this bit is not being done on rhel, they have no say in the matter.
1
-
1
-
An example of the difference would be to keep the screen turned on when playing a movie, but turning it off if doing computation or drive indexing without the need for a display. This lets the monitor go into standby, and also stops the graphics card from burning energy it does not need to use. Screensavers used to be about avoiding screen burn on tube based displays, but are now either about inactivity wallpaper or power saving depending on your option settings.
Similarly, cpus have different power levels, depending on what level of usage is needed. You can step those levels down if you are barely doing anything, stepping things back up if you start a cpu intensive task.
This means you could walk away from the computer when it started to do a task which was a cpu hog, but did not need the screen, and after a wait, it would blank the screen and let the monitor go into standby, and then when the task finishes, it can move the processor into a lower power mode. When you come back and move the mouse, it can turn the screen back on, waking up the monitor, and you can check if it is finished. You could even have it automatically power off when it is done.
1