Re: Linux and security
Unlike using Administrator as default account, sudo still requires a password for becoming root.
Of course if you use the default password, that doesn't matter.
61 posts • joined 25 Jan 2022
You couldn't be more wrong if you tried.
C is not low-level, it is not even the lowest common denominator, it is merely the de facto standard, and the great thing about standards is that there are so many to choose from. There are many C standards, and they don't even agree about what should be undefined.
So passing data erases the type, because that is the convention. ASN.1 unambiguously defines structures, but C does not.
And Lisp machines became extinct when an HP Tru64 ran a Lisp VM faster than hardware. Of course the VM had less control over the metal. But with the Raspberry Pi Zero 2 running Lisp with full control of the hardware, Lisp machines might just make a stealth comeback in the embedded space. Either way, Lisp is Turing-complefe, which means it can emulate any other machine.
There are academic open source operating systems that use capability inheritance to restrict child processes.
But no, the architecture is not the point here. The point is that IPC, library calls, and system calls all inherit the insecurities of C, even where no actual C code is involved in either side, because the C conventions are the de facto standard that all programming languages adhere to for interoperability. This is how an Ada process reads an error text from another Ada process as an interger and Ariane 5 explodes, because C inhereted type unsafety from BCPL.
The fact that you have to inline assembler in your C code is proof that C is not close to the metal.
I"ll give a simpler example: The overflow register. All CPUs have one. The PDP-11 had one. In C you have to write an if-condition that explicitly checks for overflow, and do so in such a way that the compiler recognises it as something it can replace with a check of the overflow bit.
Speculative execution is taking advantage of the superpipelining in every RISC machine (or in the case of AMD and Intel, the RISC core in the CISC machine), parallelism that is already there in the hardware, but not reflected in the software (except in MIPS assembly).
Parallelism is inherently safe in functional languages, and they don't even need the crutches that were invented for C. But it has been thirty years since bare-metal Lisp machines. Erlang is still in widespread use in the telecommunications industry, a functional language that is designed for network-transparent parallelism. But it uses a VM.
Dijkstra observed that people who use goto often make a mess of code. The kind of mess for which the term "spaghetti code" was invented, the kind that breaks flowcharts.
The title of Dijkstra's article was Wirth's idea, I'm told.
Anyway, Dijkstra formally proved that gotos aren't needed for code. Informally, Hoare and McCarthy had done the same. And experience confirms that code without gotos is cleaner.
C is the only reason why gotos are still in use. Even though tail recursion optimisation and function inlining can produce efficient code from small functions, C compilers shy away from refactoring the input just so that the debugger can step through the code line by line, because apparently that is better than proper debug output.
So gotos in C are more efficient only because C compilers are not.
There are fundamentally two kinds of languages: Those that can be interpreted, and those that need to be compiled.
Of course those than can be interpreted can also be compiled.
Machine language is interpreted, and so are BASIC and FORTRAN and bash and python.
Virtual machines like the JVM or .NET or the Erlang VM interpret virtual machine code. Which can be text.
Higher level languages are compiled into languages that can be interpreted.
It was France who gave them that loan to back their colonial scrip with something fungible.
It was France who sent them General Lafayette.
It was France who sold them what they now call the Midwest, Cajuns included.
It was France who gifted them their Statue of Liberty.
And it was France who gave them their Freedom Fries.
You might be on to something here.
Have you heard of cash money? It is anonymous, difficult to trace, widely accepted, easy to carry.
Crypto is inherently traceable, which wallets holds which coins, not just what amounts but the individual, unique, items, is public record, so every transaction is also visible to anyone who cares to look.
Human drivers cause a huge number of accidents, but that is considered normal and acceptable.
Robot cars can be much safer than human drivers and still not be accepted. Robots are expected to honour the First Law, while humans are not.
So by insisting that robots are 100% safe, we are continuing to keep the number of car accidents high.
"Enough eyeball make all bugs shallow."
The problems are the same, but there is a lot more testing, more code reviews, and more proposed patches than any company by itself could afford to do.
Sharing code helps. There are reasons why X was released for free. And XFree worked a lot better than the previous commercial release that RedHat had licensed and continued to use and patch for years.
But that goes against the medieval thinking of keeping the advantage of knowing something your competitors don't.
Some countries do censor their internet. Saudi-Arabia for example routes its entire inbound traffic through a firewall that censors out all the porn (and who knows what else).
Sure, the problem with censorship is the loss of autonomy, but in international law the government has the right to do whatever they want to their own people as long as it's not torture or genocide.
I remember that showing ads to children was already a huge issue with YouTube. Is Biden demanding a law that already exists?
Does TikTok even show ads to children?
Or is "think of the children" just an excuse for something else? (If so, it is certainly not "personal responsibility".)
The Trade Rep was careful to note that the list [does not] reflect legal violations, government analysis of intellectual property, or enforcement-related matters.
So being listed does not mean you violated trademarks (counterfeiting) or otherwise broke any laws.
Does it actually mean anything at all?
GLX is horrible. You need two drivers, one in the kernel and one in X, to get hardware acceleration, with doesn't work when the client is not on the same machine as the server.
But it is what everyone is using. (Almost everyone. In the embedded space they use hardware acceleration in the kernel framebuffer.)
XGL was a much better solution.
Things would be much simpler if the X server itself was written in OpenGL.
DirectFB3D used to be a thing as well. But the attempt to build X directly on the framebuffer has mutated into just a fallback driver.
Python2 is the fault of RedHat. Python 3000 was a rewrite that is much faster and much more efficient that was supposed to replace Python2 over ten years ago. But too much tooling was written and never ported, so there was pressure to keep Python2 around even after it had been discontinued, dropped, abandoned, support cut, and officially retired. And so there was no pressure for other projects to port either.
GTK2 is different. Originally written for the GIMP, GTK was adopted by GNOME as a free alternative to Qt, and extended. RedHat soon replaced it with GTK-MM and GTK3, pulling in more GNOME-specific (and circular) dependencies. Many projects chose GTK2 over GTK3 because it is faster, more lightweight, and doesn't pull in as much cruft. RedHat have since gutted GTK3 of features GNOME doesn't use, even though other projects do, forcing those projects to port to GTK2, Qt, or GNOME. (And GNOME is actively preventing ports to BSD or any other system that isn't Linux or Windows.)
Virtual machines are not what you think they are.
A sandbox is not (or not necessarily) a VM. A sandbox is a process that is forced to drop capabilities before it starts.
A process is already isolated: It is restricted by user privileges, and it has access to only its own virtual memory. (And so do all the libraries and plug-ins it loads.). It communicates through signals, files, sockets, and sometimes explicitly shared memory.
A sandbox restricts it further by preventing it from opening new files. Or only files contained in one directory subtree.
A virtual machine is a processor, an interpreter, that is not made of silicon wires, but exists only as software. An emulator that emulates a machine that exists only in emulation. Hence: virtual.
A container is run and managed by a shell process that sandboxes it, but it still uses the same machine code interpreted by the same non-virtual machine under the same scheduling by the same operating system. No VM involved.
So far, Huawei is only being investigated for tax fraud. That doesn't mean they actually committed tax fraud. India has a huge problem with tax dodgers in general, most of whom are Indian, so they may as well investigate the Chinese as well, why not.
Excluding Huawei from the 5G rollout does seem discriminatory to me.
Your idea of reciprocal business practices seems like a recipe for war. It seems fair and everything, but only if you ignore that not all macro-economies are equal. The West already doesn't allow investment in China, which is quite alright with China. Now imagine Jack Ma being forced to buy Amazon because if reciprocity.
First off, Russia today is not the Soviet Union, which hasn't existed for 30 years.
Second of all, Minecraft is not illegal in Russia. Blowing up government buildings without a licence is. And intent matters in legal matters.
Third: Do those anti-Soviet games come with instructions for how to build pipe bombs? If so, awesome. And a bit scary.
It can generate Python code from English, and that is nothing short of impressive. It is trained by test cases, which is how software development is ideally but rarely done.
What it does not do is devise a domain specific language to describe the problem in. Nor does it look for the most elegant existing tools to solve a problem. Instead, it makes the same mistake most novice programmers make: It creates a monolithic block of code that does everything in one process in the one language it knows. Not reusable, not maintainable, not provable, and not necessarily correct.
And that seems to be by design. AlphaCode is artificially hacking together one file by increments. It is incapable of solving the more general case, then applying the solution to the specific case. Any tool it writes can't be reused or repurposed.
Edsgar Dijkstra of 'Goto Considered Harmful" fame (and more importantly less famous for Dijkstra complexity, the Dijkstra algorithm, and his proof that recursions can be compiled into loops) said that it is almost impossible to teach someone how to write good code who had previously been exposed to BASIC.
Maybe that's why?
Biting the hand that feeds IT © 1998–2022