• 439 Topics
    439 Posts

    Samba 4.20 is out as the newest feature update to this free software implementation for SMB networking protocol support and others to enhance file/print interoperability with Microsoft Windows systems...

    Via: https://www.phoronix.com/news/Samba-4.20-Released

  • General Blog Content?

    3 Topics
    3 Posts

    It has come to my mind that it has been two years since my internship at M-Labs. And despite the best thing I should do is to keep my mouth shut, I think I owe you an apology. But if you read through this thoroughly, I'm 100% sure you won't think I'm apologetic, and is still full of (bull)shit. It served as my half apology to you and also half venting from me. I'm trying to make some life decisions recently, and this "apology" actually comes to my mind for the last two years. I hope this message could get randomly delivered after a few years. So, if you would like to give me a chance when all the water is under the bridge, then hear me out.

    I initially joined M-Labs as an intern out of my growing interest in Rust, particularly for firmware development, that I continued to keep my work on that today, especially for ESP32-C[236] family. Yep, I'm a closet RISC-V fanboy despite I'm still writing this shit on an AMD Ryzen 3700X (that's a X86 CPU). Unfortunately, there are no good desktop RISC-V chips in the commercial market yet.

    But I did not expect to have to write actual FPGA code in Python myself, as in reality I never got any proper electronic knowledge, even to this day. I actually have no idea how to debug the probes and read the Urukul register physically. But for some reason, I'm scared to speak out on that, because I never know I would end up being an "investment" as you secured the fundings from the university to make that happen. I don't have the right to say no for that, as an employee, right? I'm actually confused on that task, and I'm confused on Qt (especially when PyQt and Nix does not play well with each other).

    It is later that I know that FPGA is signal based, because it has the characteristic of running asynchronously, rather than like a CPU which runs with a synchronized clock. However, it is not necessary for everything to have a clock source, and I only know that at a very late stage. That's why I can't just write a for-loop and siphon the register data like in usual programming that I do not even have my fundamental mindset corrected at that time. And I should have had taught myself immediately about that and speak out for that, looking back in retrospect. I have to agree that I'm a complete amateur when it comes to hardware design, I don't even know how to use KiCad. But I'm still trying.

    Anyway, you ended up rewriting everything I've tried, and that nullified my contributions as an investment that caused you more. Now I just get hate from you and from the uni altogether, forever. I have to say sorry about the troubles I made. I do have to admit I wrote shit and I deserve the hate.

    I also admit I have a strong bias against Python language because I moreso treaded that as a toy language that should never, never be put in production. I'm sorry I still have this poor take today, even if a lot of people are using that for data science, scientific research, Instagram, ya-di-ya-da. Although hating on Python insults a lot of people, I don't care. I actually like Julia more than Python when you introduced that to me on that day.

    Not only Python has the dreadful GIL lock problem, same as the Giant Lock used to be in the Linux kernel, but also that Python ecosystem is clearly fractured and having outdated toolings, that I have to choose between Poetry, Hatch, PDM, or use the old school setuptools and pip...so on and so forth. I do know understood the value of Python, being an easy to learn/teach and simple language, as I also use Python to learn algorithms myself, but I have seen better, in the name of Rust and C#.

    I like Rust and C# because they have a unified tooling, it just gets things done...Sometimes if that tool gets things done nicely but is hard to learn, or being too complex, then use it because it is better for the long term. I'm not someone who lay down foundation on things that are deemed unsuitable and force myself to work onto it. C# gets a lot of hate because of it being a product from Microsoft (to be honest, Anders Hejlsberg is a great language designer), and this is insanely prevalent in the startup world, despite that C# is one of the most productive languages (same level as Ruby on Rails IMO, dotnet also has a pretty nice Task parallelism/async system that is inspired by Erlang and BEAM, but it only works on single process) that startups would have had liked it for a fast product to the market.
     
    I used to say that Windows is better than Linux, and from that point I realized I made a stupid take, and this awkwardness should have attributed me as a Microsoft fanboy. But actually let me refute myself at that moment: I like Windows, but I'm referring to the NT kernel design itself. I don't like the products Microsoft made on top of Windows, so it's like shit (Microsoft software such as Office) piling on top of flowers (Windows NT Kernel).

    I used to engage in Linux kernel contribution, and I did write a few Linux drivers (character drivers, if you want to know) or two before joining M-Labs, but I really hate that Makefiles are 1. tab-significant and 2. too much bash/shell script oriented.

    I also don't like the direction Linux kernel currently takes that I do not think Rust is a sane choice for writing kernel module. I prefer Zig more than Rust in this case because Rust is more comparable to C++ and Zig is more comparable to C. Linus Torvalds famously blasted C++ for their "eventual-uselessness" and hidden stuff that fundamentally contradicts kernel development. That's why I, despite being clearly labelled as a Rust fanboy from this shit post, I would prefer Zig for Linux kernel development, at least Zig has so much less hidden surprises, but I know Zig is quite immature right now, and so it is not the right thing yet, and we are legit left with Rust. (Useless spoiler alert: I used to write game cheats in C++ and C# during my teens day, for 4 years, but I gave it up after C++20, so what I know is C++17 at best and C++11 on average. I also hated myself for not getting something for Bjarne to write for on that day he came to HKU)

    I would also refute that Rust provides safety with this jarring example that is all, written, in, safe, Rust. There are many fundamental language and semantic holes in Rust, but that is very hard to implement so the Rust team choose not to care at the time being and focus more on practical problems. But those holes can lead to a complete break of trust if we are talking about "language security". Some holes are even related to incompleteness theorems and test the boundaries of math and logic. But alas, no language is perfect afterall, not even Haskell nor Idris2.

    Also, I do know that Linux kernel itself also have some black-magic stuff such as the confusing container_of macro (that thing actually relies on GNU C extension far as I remember), and the whole design of the memory allocators...vmalloc? kmalloc...I would like to have a unified memory interface, because we might get another class in the memory hierarchy pyramid, soon, that is CXL.mem introducing large amount of non-volatile memory to the masses along with PCI-E 5.0 when it is presented in its full form.

    I'm working to do that in my kernel that is written in almost pure Rust (assemblies are necessary evil) from the ground up, internally named Yak ("yet another kernel" or "Yak, another kernel"), but coincidentally it also has something to do with Gnu. I do that in my free time when I'm bored so it must take 10 years to get a working prototype, heh.

    It has too many new unproven ideas such as being "actor" based rather than "process" based (in the sense that there are no more Unix style parent-child tree relation, but rather a DAG relation, no cycles of course), and the idea of "everything is an object defined with an API" (in contrast to Unix philosophy, where "everything is file" but I don't like sending strings to a buffered text stream, because that would likely involve deserializing the data from text to object again) and I want to have WebAssembly code running in "kernel space", as a replicated state machine that virtually synchronize to multiple machines, with JIT compilation powered by, probably Cranelift (to a point I tried to fix the no_std feature and clearly I failed to adapt their complexity as of right now). Again, those ideas are absolutely unproven and definitely take more than 10 years to fruition and I won't open source nor show any progress until it is minimally viable. Or maybe I should get a proper OS design course and finish on writing my own damn buddy allocator first.

    I hope I could loose those ends off that fogs my mind lately. In the end, politics, ideologies and biases, they really are a pain in the ass. I hate that so much but I myself cannot avoid that as well.

    I'm really sorry that I failed to live up to your expectations in the beginning, and ended up causing some equipment damages, and eventually giving me a bad rep for the crew, and of being a laughing-stock and a shame to PolyU, and of course, ashamed of myself. If I reckon, that's because the USB port was inserted in and out too many times on that Eurorack box, and I do not realize that caused permanent board damage.

    I really thank you for giving me the opportunity to experience different techs like FPGA, Nix/NixOS, Rust firmware development and DSP/control loop. I learned a lot. I also really thank you and PolyU for sparing me so I can have my career. It is also your experience given to me that I know I should not engage too deep down on hardware development, that my optimal bottom lies on firmware development as well.

    Also, I like how you started out with DSP, which is somewhat related to DJ equipment and demoscene 😛