Fuchsia OS Introduction - <AUTHOR> https://bzdww.com/article/163937/ <comment><USER2> My impression as game developer:

\- Vulkan first graphics interfaces. I mean, OK. Not that I'm in love with this overly complex API, but fine.

\- No OpenGL support. I guess this is where world is moving

\- No POSIX support. Quite a bit of game engines rely on it, oh well, when google cared about developers

\- Nothing about sound (my personal thing)

As game developer working with Android was unpleasant to say the least. For example sound - android has like 4 sound systems, all of them (except simplest one available from Java side) are not fully implemented, and swarming with compatibility bugs across manufacturers and android versions. Oh, not to say that they introduce new one once in a while, with new version adoption slower than a sloth.

I get that Google engineers enjoy rewriting things they don't like, but, come on. Fix existing first. Don't change APIs on us - not everyone has extra million of $$$ to throw on a project to refactor it every time Google decided that they want shiny new thing, which as result is broken too but in different ways. OK. I admit, I exaggerate, but it seems like tough times for game engines (besides super hyped ones like Unity or Unreal, which also has no problem throwing tens of millions).

Note about OpenGL support: I'm pretty sure they'll drag it in by porting ANGLE library which is currently actively worked on. Compatibility layers for Vulkan are getting momentum, but I hope they'll join forces with MoltenGL/VK instead of making their own worse analog.

<comment><USER3> You may want to take a second impression.

\- OpenGL should be a library. This is just going to make OpenGL development easier in the long run. Right now there are too many OpenGL implementations and the differences matter. Running one OpenGL library on top of N different Vulkan implementations is miles better than running on top of N different OpenGL implementations.

\- POSIX can be a library too. It doesn't have to be provided by the kernel. People have been strapping POSIX layers on top of things for ages. This was originally how Mach worked. You can still do weird things on iOS and macOS "below" the POSIX layer (although most POSIX syscalls are just provided by the kernel).

You talk about how hard it is to change APIs… and how much you hate to refactor things every time Google decides they want the shiny new thing. But POSIX is rooted in the 1970s. It sucks. It's about time to try something new. The entire POSIX model is based around the idea that you have different people using the same computer and you don't want them to accidentally delete each others' files. There are a ton of APIs in POSIX which are straight-up shit, like wait(). Sandboxes are unportable and strapped-on, using arcane combinations of things like chroot and cgroups.

Let's give people a chance to try out something new. Unix is somewhere around 50 years old now. OS research is dying out. Make it easier to run untrusted programs.

<comment><USER2> I agree with you, but I do not believe in Google. Google provided worst commercial platform I ever had experience developing for. I had a lot of different platforms in my past - pretty much all consoles, desktop and fringe, like smart TVs or various smartphones released since 99'.

Only Google changes rules of the game on developer. They do not realize that they are make •a platform•, not a product. Stable, comfortable platform that software runs on. I honestly don't give two cents about all their struggles to make "a better OS". OS is to launch apps, and making those apps is a miserable experience, where I have full time people just to keep up with Google 'improvements'. Somehow every other platform is fine. I hardly had to change code written 10 years ago for iOS, for consoles or Windows - not at all! But Google keeps making their own special PhD driven darlings.

<comment><USER4> > But Google keeps making their own special PhD driven darlings.

I'm really sorry that you have this feeling, but this has nothing to do with PhDs. It's impossible to get promoted by bug fixes inside Google, and people are promotion driven.

There were many people who tried hard to fix a lot of bugs, but they usually burn out due to lack of recognition inside Google.

<comment><USER5> It really, really shows. That and documentation. And some periphery work related to larger efforts, especially on any platform that's not the Web. It's the only explanation for how an organization like that can produce so much broken and half-assed software—bad incentives, and probably a serious middle management problem, in that they don't have leverage or motivation to make ICs do "boring" and follow-through work.

Maybe it's working for them from a bottom-line perspective, but it's made their brand as an engineering company _clownish_.

<comment><USER4> The key question is the bottom-line, as you wrote. Management is really hard to scale, but right now innovation is a better prediction of growth than bug fixes, so I think it's not even clear how to improve the promotion process without hurting growth of the company.

I think Google is too big at this point already, but that's an orthogonal question.

<comment><USER5> A non-"rockstar" hiring process and parallel job track (with potential for cross-over) so they can get in people who are happy to do "boring" work on an interesting product might do it. Probably can't be in the Valley or anywhere else ultra-high COL. I think part of the problem is they (seem to?) only staff folks who both _can_ and _are inclined to_ leave quickly if they don't get to do the fun stuff.

Again, though, may not make sense for them from a $$$ perspective. Jank and rough edges galore may be something they're willing to live with.

[EDIT]

How this works in my head:

Manager: Could you take a look at the Android developer documentation? Some of it's badly outdated and have you actually tried using it? A lot of the advice is... kinda bad. Also maybe look at a few of these UI components we had the Summer interns make, they've got bizarre implementations and are difficult and inconsistent to customize. Oh and god have you looked at our issue tracker? Has anyone, actually? Like, ever?

Developer: Hey so have you heard of this place called Amazon?

Manager: Uh I mean how about we start a fourth greenfield instant messaging product instead?

Developer: That's better. Amazon? Who's Amazon?

<comment><USER6> Actually there is little thinking about "Amazon" or other competitor: internal mobility is easy. So replace "Amazon" by "this other team is doing a cool new project", and you can get transferred in a matter of weeks, most of the time without going through a heavy interview process.

And all of this isn't only motivated by "not doing boring tasks", but also because this is what drives promotions / career advancement. So "launch a feature/project, get rewarded, and switch team" seems like a trend, and it does not encourage to think about long term maintenance / etc. (It isn't a generality either, but it is a bit of a trend)

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER7> It's strange how my perception of Google and its software has changed over the years.

When Android was first released I've put it to the same category with Open Firmware & Debian. Now when I see Fuchsia, I reflexively categorize as a pseudo-open source software, where you can see the code but cannot do anything useful on the long run, because it's designed to be downloadable but unusable for casual/research purposes.

Maybe "we put out the source for you to see and start to limit its free use when it matures enough" model gets tiring for me.

<comment><USER8> It's interesting to see that when Android was released, it was fully Open Source.

But over the years they moved all the apps to closed-source, one after the other, even some core elements (play services).

Pretty soon it will be no more open source than iOS (the kernel is open source, yay!)

<comment><USER9> All of the framework is still open source.

</comment></comment></comment><comment><USER10> I really wonder about this kernel IPC hype. I watched a video on React+Redux by Facebook engineers about a week ago, and the reasoning behind creating the things in the first place. Feelings about React+Redux and how they are overused aside:

Redux came first and it happened because the "interaction graph" between various components on the website became virtually impossible to resolve cognitively. The engineers (especially on-boarding engineers) faced troubles understanding how everything worked in concert and, especially, the side- effects of a single change. The nail in the coffin for the engineer was Facebook chat and she was forced to use numbers, instead of lines, to depict interactions because the graph was too dense. Redux forced interaction in one direction, with "back interaction" happening one frame/tick later. Web developers have praised and embraced this architecture.

If you look at the very first image in the article, it moves from a very straightforward application -> VFS -> ext2 -> driver -> disk graph to a [potential] rats nest. It runs counter to the hard lessons that Facebook have learned with complex distributed systems.

Is this why nothing has really come from Mach/Hurd? Up until putting 1 and 1 together a few minutes ago, micro-kernels sounded so clean and elegant. They now seem unwieldy. Perhaps there is exists another layer of architecture that can tame the dependency/interaction graph; isolation really does sound like a good idea, but we need a better way of doing it.

<comment><USER11> > Is this why nothing has really come from Mach/Hurd?

Mach 3.0 was the kernel used in NeXT and the original Mac OS X release. It was quite a bit later replaced with a rewritten kernel XNU, that's basically a hybrid. The reason as I understand it, message passing in the kernel is expensive when crossing user space so often.

I wouldn't call that nothing coming of Mach, it did really well!

Also, I'd say that micro-kernels are closer to the paradigm of react/redux (redux the message bus, react the user space servers) than to a monolith design like Linux.

<comment><USER10> You're completely right, I shouldn't have mentioned Mach.

</comment></comment></comment><comment><USER12> I've heard the following opinion on the internet: "The sole reason Fucsia OS exist is so google can release GPL-free android sometime in the future"

How do you feel, is there anything behind this claim?

<comment><USER13> Regardless of what you think of Google, the reality is Fuchsia and Android have little to nothing in common. While they would certainly rather have a permissive language from the bottom up, they certainly wouldn't have written a whole new OS with that as the primary goal.

Android's platform design would arguably have been considered modern in 2007 or 2008, but it is 2019, and the cracks in Android's capabilities have been widening for a while. Sometimes people still think of Android as "newer" in the operating system space, but it's a decade old!

<comment><USER14> If you're an android dev, you know google basically rewrite the whole SDK for every major OS release. Android 1.0 is unrecognizable compared to Android 28.0 to the point where supporting devices running 1.0 from a 28.0 is a tedious and time-expensive operation.

<comment><USER15> There aren't any API level 1 devices out there though. Supporting, say, Android 4 (level 14, from 2011 so almost eight years ago!) is very straightforward. The fragmentation argument doesn't hold water for most apps.

<comment><USER14> maybe if you have a simple text app, try implementing background sync, modern UIs even db stuff gets really convoluted really quickly. forget about camera/audio support

my current company supports down to only api level 19 and even then it's like having to maintain multiple apps to support apis <23

</comment></comment></comment></comment></comment><comment><USER16> I would not be surprised if Google decides to never launch this. They currently have two consumer facing operating systems and linux (presumably) on their servers. On the server side they use containerized services, are involved with Kubernetes, etc. None of that stuff probably is even close to working on Fuchsia and I don't think server side is a priority with that.

On chrome os, the most significant feature is the newly added ability to run linux applications via crostini. Containerization is of apps is a big topic in general in the linux world with e.g. things like snap.

On Android, they have an extremely large installed base, enormously slow upgrade cycles, and a huge legacy development ecosystem. This ecosystem overlaps with ChromeOS as well since it can run Android apps. And Android can do linux apps as well (though that mostly makes less sense).

Fuchsia would need to play nice in that ecosystem or it will face an empty room problem where all of the key apps have not been ported yet, they have a tiny marketshare initially (thus removing the incentives for fixing that), and OEMs will likely vote with their feet by sticking to the old platforms. Part of that is supporting linux based stuff; which especially on Chrome seems increasingly important.

So, kind of pessimistic that Google has a strategy for making this work. This makes sense as a research project but not as a product strategy currently. Yes Android has issues. Maybe fixing those might be easier than replacing it entirely?

<comment><USER17> "are involved with Kubernetes, etc. None of that stuff probably is even close to working on Fuchsia and I don't think server side is a priority with that."

actually the networking stack in Fuschia, or more particularly zircon the kernel it is optimized around, is written in Go.

Kubernetes is written in go, which is essentially a system for implicitly defining scaled linux boxes on a giant network, and now in the most recent release is allowing for declarative architectures as well, much like how user space services for graphics drivers in Zircon will enable more declarative and optimized use of expensive resources as well (in this case, modular hardware architecture for mobile operating systems, which is what Fuschia was originally envisioned for.)

I'm also pretty sure Google also has experience with mobile operating systems (android), and Fuschia is literally a response of now over a decade of trying to interface android on POSIX in conjunction with multiple chains of monopolized and closed source hardware architectures, being intimately familiar with the evolution of trends in the mobile hardware architectural space, and trying to rewrite a kernel to optimize for that.

"Fuschia will need to play nice...Part of that is supporting linux based stuff; which especially on Chrome..." Chrome had to have an entire team dedicated to resandboxing their tabs to mitigate for spectre and meltdown, which are both results from the unquestioned but growing obscurity due to unquestioned implementations between hardware and Linux integration, which is something that Fuschia attempts to take a step back from, and by doing so simultaneously make it easier for open source development on hardware architectures while optimizing for them.

Still, total site isolation is still an advanced option in chrome that results in a 10% degradation in memory performance so people don't turn it on, if they even know to check for it/what that means (most people don't).

<comment><USER16> Crucially kubernetes uses docker, which uses a lot of low level linux and posix stuff. Kind of an issue if that stuff isn't there. Kernel virtualization on fuchsia could of course become a thing (like it is on Windows and OSX) but so far I've not seen much on that topic. WASM on chromium might become a way out as well of course.

But the bottom line is: Empty room. beautiful OS with an empty app store is kind of a non starter in the current market. Windows Phone found that out the hard way. Also, several other mobile operating systems that did not quite make it or continue to struggle. Sailfish, WebOS, Firefox Mobile, Ubuntu Mobile, etc. Even ChromeOS struggled until they added android support and Crostini.

<comment><USER18> ART will run on top of Fuchsia, it is already being ported, you can check the merge commits.

As we always need to remember Linux fans, the fact that Android uses a Linux kernel is irrelevant to userspace.

<comment><USER16> I have no idea what ART is but I doubt it addresses all concerns I listed above. On Android, there are plenty of native libraries and apps these days as well. I'm pretty sure these don't work as is without a compatibility layer that essentially replicates a lot of linux/posix stuff, which Fuchsia does not implement.

In any case, it wouldn't be the first time that Google walks away after putting lots of development in something. In general, I think they are closer to merging Android and Chrome OS than they are to replacing either with Fuchsia (not to mention convincing OEMs like Samsung to actually use it).

<comment><USER18> ART is the Android RunTime, basically the large majority of Android's userspace.

Those native libraries are forbidden to use Linux specific features, only these APIs are sancioned.

[https://developer.android.com/ndk/guides/stable_apis](https://developer.android.com/ndk/guides/stable_apis)

Since Android 7, Google has been claping down NDK users that try to used anything that isn't part of that list.

Since Android 8, APKs are only allowed to reach for their own internal filesystem and use SAF for anything else. Something that will be further enforced on Android Q, so no luck trying to peek into /dev, /share and similar.

</comment></comment></comment></comment></comment></comment><comment><USER19> I don't know if it's just me, but lately the amount of interesting stuff (articles, software) i come across that sadly is only available in chinese keeps increasing.

If it wasn't for these groups of volunteers that translate them to english (and the other way around, also useful) these projects would be completely unaccessible.

<comment><USER20> Guess we the westerners now experience what other parts of the world experienced for decades.

<comment><USER21> English is much simpler than Chinese.

<comment><USER22> Reading and writing the alphabet, yes. The grammar and pronunciation rules for speakers (not the pronunciation itself)? English is quite a bit more difficult than most people realize.

You can learn Pinyin in a few days, which is sufficient for you to pronounce any Mandarin Chinese romanized into Pinyin. Chinese grammar is fairly simple compared to Latin languages. Whereas English is a rats nest of special-need- to-memorize pronunciation rules.

Most of the real difficulty people experience with Chinese comes from the shock of learning the characters.

<comment><USER23> Coming from Dutch, I found English easier than German. Some people say German is so close, it's mutually intelligible with Dutch: not only is it not, I even find it much harder than English.

At least from my perspective, someone who knows a language very close to another and still found English easier than this other language, English is easy.

Pronunciation is indeed quite a lot of learning by heart, but it's not hard to get used to if you got the rest down. Of course, this might be much harder for Chinese, I wouldn't know.

<comment><USER24> Two things: 1\. As an English-native-speaker who also learned German I find that I can mostly understand spoken and written Dutch through my German. I think part of your difficulty there is that it is closer to your native language where you have very tight internal rules about how the language should be, so get caught up in those differences. On my side my internal rules on German are relatively loose, so Dutch mostly fits in there.

2\. One good-sized chunk of the messiness of English pronunciation (vs. written words) is actually the fault of the Dutch. Prior to the printing press spelling was more an art than a science, and the same transcribed book could be found with different spellings (especially true in different regions). Since the Dutch were the first ones with the printing press, many English books of the time were printed there, and the Dutch printers made some pretty arbitrary decisions on how they thought English should be spelled (e.g. the 'h' in 'ghost'). There was a similar effect from French scribes when they invaded England.

Now my no means were they they only ones to mess up English (read up on "The Great Vowel Shift" if you want a headache), but they did their part.

</comment></comment></comment></comment></comment></comment><comment><USER25> Oh, yes, this is a very carefully thought out project and I love it. I have a hard time trusting Google, but this is clearly the result of some very straightforward, competent, well-directed thinking, and I hope it succeeds.

<comment><USER26> What type of device would you use this in?

<comment><USER25> This architecture sounds like one I would want to use for all of my personal computing devices. I believe this because I did a bunch of experimental hacking three years ago with the objective of designing an operating system with usability and security characteristics that would suit me better than Linux or Android currently do. I didn't make a huge amount of progress toward a working system (you can see what I did here: [https://github.com/marssaxman/fleet](https://github.com/marssaxman/fleet)), but I spent a lot of time reading and thinking as I tinkered. The people working on Fuchsia have clearly thought deeply in similar directions, gone a lot further in the work, and resolved a lot of the uncertainties I encountered.

I won't let Google manage my data for me, but if they can keep their fingers out of the pie I would gladly use a Fuchsia-based system as described here for my laptop, phone, and home desktop.

</comment></comment></comment><comment><USER27> Wonder if the permissions model will make it harder to circumvent DRM that takes away functionality like screenshots. If a super user can't imbue child processes with their capabilities then control won't ever be fully in the owner's hands.

<comment><USER28> Would the sole "solution" to that be recompiling the kernel yourself with that functionality enabled/coded in?

<comment><USER27> We have Android devices that can't be unlocked today. They can carry over the same mechanisms.

<comment><USER29> That is a different beast that even the linux kernel doesn't touch since the kernel is GPL v2. So even the exact same license as the kernel would not have changed the status quo; only something like GPL v3 would have, which obviously a company like google would not touch with a 10 foot pole.

</comment></comment></comment></comment><comment><USER30> "The Unix successor, Plan 9, released the last version in 2002, and its waste heat has been integrated with Go."

I'm not sure if this is a translation gaffe or not, but I'm using it as a new sick burn for sputtering projects.

<comment><USER31> I'm not familiar with Go or Plan 9 to know if there is any connection or not but I am curious.

<comment><USER32> It's my understanding that the Plan 9 compilers were ported to linux and used to compile early versions of Go. Past that, the only connection is that one of the Go project leads used to work for Bell Labs.

<comment><USER33> Plan9 was a network operating system, and with a focus on concurrency a new language Alef was designed with coroutines based on CSP formalism (Hoare's communicating sequential processes). That was redesigned in Limbo language on Dis garbage collected virtual machine in plan9's replacement Inferno OS. Go's goroutines and other choices are next incarnation of these ideas designed by many the same Bell Labs people, not just one incidental lead. Shopping for a light compiler to bootstrap from is peripheral to the design story here.

Fuchsia doesn't share as much of the story but does pick up where in Dante's Inferno the original Unix people tried to abandon the root user to redeem themselves almost 30 years ago. Combined with capability based model last seen deployed in the wild with OS/400 and Burroughs machines before that, it would be the first truly new OS in decades.

</comment></comment></comment></comment><comment><USER34> Can someone with knowledge on the matter explain how Fuschia compares against other microkernels such as RedoxOS and QNX?

<comment><USER35> A lot of performance problems will magically go away with enough money backing it. A comparison with NT (hybrid but shares a lot of similarities) is more apt.

<comment><USER34> I meant structurally, not in terms of performance

<comment><USER35> NT is pretty similar to Fuchsia in a lot ways

</comment></comment></comment></comment><comment><USER36> >File and file system becomes a partial concept (limited to each file system process), so there is no file in the process kernel data structure

>"/" -> root vfs service handle, "/dev" -> dev fs service handle, "/net/dns" -> DNS service handle

Just resurrect Plan 9 already?

<comment> DC-3 This strikes me as an approach quite similar to that of Redox:

> "Everything is a URL" is a generalization of "Everything is a file", > allowing broader use of this unified interface for schemes.

It makes sense to me - not every resource can reasonably be shoehorned into the file-folder abstraction.

[1] [https://doc.redox- os.org/book/design/urls_schemes_resources....](https://doc.redox- os.org/book/design/urls_schemes_resources.html#what-does-everything-is-a-url- mean)

<comment><USER36> When you have everything as a file - to add URL just to point to that file is a simple feature.

</comment></comment></comment><comment><USER37> I'm not sure of this need to remove, or not support, OpenGL these days.

It's not like OpenGL is the greatest graphics API, it's just that it's been used for decades - I personally learned 3D graphics rendering in GL and I still think in GL when I'm compositing a scene in my head.

If I'm going to prototype something, I have historically loved that no matter what platform I'm on, I can pretty much just hit 'compile' and I'll have the same result.

Which leads me to my second complaint - Metal. When Vulkan has come out as the clear choice for next-gen multi-platform graphics technology, Apple, once again, decided to completely invent a proprietary system instead of using the low-hanging fruit that was already there.

<comment><USER38> With Android Q, they updated ANGLE to run on top of Vulkan. OpenGL's rapidly becoming a library, and that's a good thing.

</comment></comment><comment><USER39> VirtualBox bootable .iso would be nice.

Especially since I thought of trying it out and followed Fuchsia instructions[0] only to run into exactly same problem building it that others have reported >3 months back[1].

Also, instructions to download and install jiri with curl under Fuchsia docs don't work either[2] and curl returns '404 not found' instead. Got around this using instructions here [3] only to fail soon after as per above.

[0] [https://fuchsia.googlesource.com/docs/+/a40928d45b43dbf72d5e...](https://fuchsia.googlesource.com/docs/+/a40928d45b43dbf72d5e67244308fd552597849c/getting_started.md) [1] [https://www.reddit.com/r/Fuchsia/comments/a56rg7/issues_when...](https://www.reddit.com/r/Fuchsia/comments/a56rg7/issues_when_update_the_fuchsia_code/) [2] [https://fuchsia.googlesource.com/docs/+/a40928d45b43dbf72d5e...](https://fuchsia.googlesource.com/docs/+/a40928d45b43dbf72d5e67244308fd552597849c/getting_source.md) [3] [https://fuchsia.googlesource.com/jiri/#Bootstrapping](https://fuchsia.googlesource.com/jiri/#Bootstrapping)

</comment><comment><USER40> > The Unix successor, Plan 9, released the last version in 2002, and its waste > heat has been integrated with Go.

I feel attacked. Glad they're picking up seriously on the idea of namespaces.

</comment><comment><USER41> This is some great detail, thanks for sharing.

> A channel has 2 handles, h1, h2, write messages from one end, and read > messages from the other.

This seems like it's bound to be a critical section for many operations. So for one/some of the supported target architectures, what's an example of how channel write/reads look in detail? Do I need to trap or can I write "directly" into pages that the recipient can read? Can messages span cache lines?

I believe that Fuchsia sounds ambitious and it's only through the dedication of mega-tech corps like Google/etc that ambitious efforts like this can succeed. But the world in general, even the tech world, is loathe to accept change. Backwards-compatible layers to emulate the linux syscall layer would probably be a critical transition feature. This allows consumers to phase in the work required as they can stomach it, rather than suffer it all-at-once- or-nothing.

How hard is it to port Fuchsia to a new target? Can anyone point me to a series of commits for a target that does this?

<comment> irq-1 The kernel switch for channel communication seems like a big performance hit just to stop "sharing memory". Why not allow shared memory with negotiation on the communication protocol? The OS software could share memory, but only use protocols that are strict, simple, secure, etc...

</comment></comment><comment><USER42> I really like fuschia, Redox and the other microkernels. However, I am highly concerned about the license change.

About the only upside of the Android ecosystem was the kernel's license, forcing kernel drivers to be open-sourced. This allows mainlining back devices into the Linux tree, which enables a variety of user projects, such as postmarketos.

On the other hand, some of these drivers already acted as a shim to a userspace blob, and having an IPC would at least provide isolation from the blobs themselves, and allow tapping a clear IPC interface for reverse- engineering those. So all might not be lost.

On the sustainability of open source, since this seems to be debated much in this thread, I personally think (and it is a debatable viewpoint) that this ought to be incentivized at a government level (by taxing software/technology sales, and sponsoring open source projects with the proceeds). This would provide a much more robust base on which to provide (proprietary if you want) services upon.

</comment><comment><USER43> Ah, ok, "introduction" as in "Introduction to Fuchsia OS". Which is interesting too, but I initially thought that Google is actually introducing Fuchsia OS now, i.e. presenting plans to replace Android with it. Wishful thinking ;)

</comment><comment><USER44> Any ideas on why they use:

1\. MessagePack (instead of, say, FlatBuffers – am I wrong to think that FlatBuffers are more efficient? (and the format was created by Google))

2\. ELF binaries (instead of, say, taking a clean-sheet approach to executable formats)

Also, on ELF they say: "The loading position of the ELF is random and does not follow the v_addr specified in the ELF program header."

(They're talking about ASLR.) This just highlights for me that a more efficient format is possible, one that doesn't have a virtual address in its headers. Perhaps there are even bigger wins possible with a clean-sheet format.

<comment><USER45> For ELF i would say because its easear to reuse a lot of tools that already deal with the format. Debuggers, linkers, compilers, etc..

My guess is also because its easear to have a bridge with Linux executables, so you can run the same ELF and emulate the linux syscalls somewhere like FreeBSD and now Windows .

I bet they were thinking about running Android stuff more easily, and i dont think there will be much more to gain in designing a whole new executable format, when you compare how much of free tools, code and compatibility with Linux you will have in the end.

</comment></comment><comment><USER46> I had a question about:

"Global file system

In Unix, there is a global root file system"

Why night this be seen as a shortcoming, especially with mount namespaces now? Can anyone say?

<comment><USER47> See the top couple comments on this thread (from within the past month) by q3k:

[https://news.ycombinator.com/item?id=19254828](https://news.ycombinator.com/item?id=19254828)

That should be impossible in Fuchsia.

<comment><USER48> Also with mount namespaces ;)

</comment></comment></comment><comment><USER49> This power management code could use some work: [https://fuchsia.googlesource.com/zircon/+/refs/heads/master/...](https://fuchsia.googlesource.com/zircon/+/refs/heads/master/kernel/syscalls/system_arm64.cpp)

</comment><comment><USER26> It seems like the main point of this redesign is modularity for security's sake. Curious to hear who is asking for this OS, where Google will use it, and what type of system any of the HN crowd would consider putting Fuchsia OS into. Can't shake the feeling that it's somewhat...uncalled for by the market?

</comment><comment><USER50> On the server platform..... On the desktop platform.... On the mobile platform.....

Pick one. Have we not learned from the past that there really is not a one size fits all operating system for all use cases. I am probably alone in thinking this, but bad decisions can be made when trying to get a server OS to run on a phone.

<comment><USER51> Hence the microkernel with pluggable modules. That's the whole point

</comment></comment><comment><USER52> This basically just came across as a GNU/linux hit piece. In my admittedly really limited knowledge wouldn't multiple vectors into the kernel introduce more surface area for attackers? The other problem with this is when is Google going to get bored with it and move on to something else? If they are willing to jettison Android they are willing to jettison anything. Also the line about GNU/linux only caring about servers seems to ignore the amazing amount of work that's gone into KDE, Gnome, Ubuntu, Kali Linux, Mint, etc. all of which are desktop focused and in the past few years have really started to catch up feature wise. Yes obviously there are still issues, and realistically there always will be issues. Windows and MacOS/iOS have issues with thousands of paid programmers why wouldn't a distro built by hundred of part time workers with only a portion of them paid to work just on the OS?

<comment><USER53> Microkernels are often used in high-security/high-criticality use cases because the kernel's facilities are very limited and the surface area is very small (thus easier to reason about and assure). Most complex functionality is performed in isolated processes/tasks with known IPC boundaries (i.e. a random thing can't clobber or inspect the memory of everything else).

We build on top of seL4 for these reasons (among others).

<comment><USER54> > _We build on top of seL4 for these reasons (among others)._

Who's we? I too am down with OTP, especially OTP on seL4. ;- )

<comment><USER55> I believe they're PolySync [0], and I believe they might be referencing "fel4" a Rust-atop seL4 [1] that they've developed which is very cool stuff.

[0] [https://polysync.io/](https://polysync.io/)

[1] [https://github.com/PolySync/libsel4-sys](https://github.com/PolySync/libsel4-sys)

<comment><USER53> Formally of, yes. Now some folks are doing all new things.

<comment><USER35> Can you elaborate?

</comment></comment></comment></comment></comment></comment><comment><USER31> Countdown until someone adds JavaScript support (~ Atwood's law)

<comment><USER14> it already has dart support so it does have js support in a round about way

<comment><USER31> Good to know. I had actually forgotten about Dart. Feels like Google should probably throw in the towel on it, but I haven't been following it.

<comment><USER56> Dart is the basis of the primary UI framework, Flutter. Flutter is also cross platform, and can be compiled for Android and iOS.

[https://flutter.dev](https://flutter.dev)

<comment><USER18> Flutter is being downgraded to an UI Framework among many, after Scenic's instroduction.

</comment></comment></comment></comment></comment><comment><USER57> I wonder how Fuchsia will manage in the regulated world's (medical, aviation).

A micro kernel is a big sell for regulators/QA. Also, being a RTOS.

This would disrupt many big players in the field, such us QNX.

</comment><comment><USER58> I wonder if a big part of Linux success story comes from it's relatively simple to hack on code.

</comment><comment><USER59> Does anyone have any good links to comparisons between Fuchsia and Linux (or other OSs?)

</comment><comment><USER44> Anyone know what programming language the kernel is written in?

<comment><USER56> C++. If you want to read through a huge argument on HN regarding the merits of that decision, check out this thread: [https://news.ycombinator.com/item?id=16813796](https://news.ycombinator.com/item?id=16813796)

</comment></comment><comment><USER60> How do you guys feel about kernel written in C++? Seems strange to me.

<comment><USER61> Seems like a wasted opportunity to write a new kernel and OS that might last another 30+ years in the mainstream in C++. Who knows how many million-man hours will be spent fixing memory bugs in this new OS because of this decision.

</comment></comment><comment><USER62> all part of the master plan to destroy unix and therefore steal control of computing from the people

</comment><comment><USER63> Speaking English as second language, which was a requirement to be a software engineer, i assumed i had some other 5years to learn Chinese before being left behind. Guess I am late already.

<comment><USER64> It's becoming more and more important, especially in the embedded world, because a lot of hardware vendors are based in China.

</comment></comment><comment><USER61> I'm confused, is this an OS for China? That alone doesn't inspire too much confidence, if it was "designed for China", because we all know what that could mean, especially with Google being so eager to please dictator Xi lately for a chance of a few search engine market points in China.

<comment><USER65> You couldn't have searched Fuchsia OS using a search engine before writing a comment shoehorning completely irrelevant polics?

</comment></comment><comment><USER66> > Zircon: microkernel, underlying service process (device manager, core device > driver, libc, interprocess communication interface library fidl) Garnet: > System-level system services: software installation, communication, media, > graphics, package management, update systems, etc. Peridot: The > infrastructure layer of the user experience: modules, users, storage > services, etc. Topaz: The basic application of the system, Web, Dart, > Flutter These names are from Steven Universe.

Nice!</comment>


Opera Logo with CSS - <AUTHOR> http://desandro.com/articles/opera-logo-css/ <comment><USER2> very cool, but I'm surprised that Opera didn't fair as well.</comment>


Why Cruise Ships Are My Favorite Remote Work Location (2013) - <AUTHOR> http://tynan.com/cruisework <comment><USER2> Previous discussion:

[https://news.ycombinator.com/item?id=6697416](https://news.ycombinator.com/item?id=6697416) (~3 yrs ago, 311 comments)

</comment><comment><USER3> Recently took a vacation on a cruise ship. I heard mixed reviews from everyone I talked to. Some loved it, some hated it.

I loved it and can't wait to do another one. We got a balcony, and I loved just sitting out on the balcony and watching the ocean. I kept thinking how I wish I had my laptop and could do work this way.

The free food, balcony, and exploring the ports were my favorite parts. I don't drink, or party, so that wasn't part of the fun for me -- but it seemed like most of the other people on the ship were there for that reason.

The only thing that I didn't like were the people on the ship, and I felt bad at how lowly paid the crew were.

<comment><USER4> >I don't drink, or party, so that wasn't part of the fun for me -- but it seemed like most of the other people on the ship were there for that reason. >The only thing that I didn't like were the people on the ship,

You were on the wrong ship. Let me guess, Carnival?

Different cruise lines cater to different crowds. To get the best cruise experience, it's important to realize this and select a cruise line that lines up well with your expectations and that you'll fit into well.

Carnival caters to the drunks and partiers. There's a reason that every time you hear about some drunk cruise-goer falling overboard, it's a Carnival ship. You never hear about this with, for instance, Disney Cruises, or Norwegian or Royal Caribbean.

I've only been on one cruise, Norwegian, about 9 years ago. It was pretty fun overall, though I'm not wild about doing it again for various reasons. But I did not see much drinking or partying, even in the casino. The crowd was pretty tame, so I can't say I disliked the people on the ship at all. A lot of them seemed to be Germans actually. The ports of call were fun (it was a Caribbean cruise) for the most part, and there was an interesting event on the ship one day where some artwork was being shown (maybe sold, I forget now), and they showed a video of a short film that was a collaboration between Disney and Salvador Dali which was really interesting to watch. At the time, it was supposedly only recently released IIRC.

The dining experience varies a lot between cruise lines too. Now remember a lot of my information is almost a decade old, but at the time, Norwegian had very open dining rules: basically you could go to the buffets whenever they were open (which were pretty generous hours) and grab free food, and sit anywhere you like. The dining rooms cost more and needed a reservation, but you could do the whole cruise at the buffets for nothing. By contrast, I was told that on Royal Caribbean, there was assigned seating and assigned eating times, so unless you were part of a group, you usually ended up stuck eating with strangers you didn't know. On Norwegian, alcohol was pretty expensive, so I didn't see people drinking much. I was told that on Carnival, alcohol was free or cheap, so that would explain drunkenness on those ships.

Anyway, do your research on cruise lines and their policies and pricing before you go, and look at what kind of crowds they cater to, and also what kind of on-board events they'll have. You're likely to have a much more pleasant experience if you pick carefully.

</comment></comment><comment><USER5> Blimey, how rich are all of you? If I scraped together enough money for a cruise I sure wouldn't want to waste the experience working.

<comment><USER6> You can cruise on good ships for less than $100 per day, if you shop carefully and wait for the right opportunity.

The advantage is the combination of extremely plesant, varied work environments, with no distrations from clients, coworkers, or the internet. The ability to sustain concentration lets do something hard in a week that might take you three months at home.

</comment></comment><comment><USER7> Serious question - is the mobile signal terrible if you're cruising on the Med? My data plan is £2 a day for about 500mb (or something like that) when out of the UK. That would probably suffice, assuming there was enough signal to bother tethering...

<comment><USER8> Related question: does someone know how expensive is a satellite phone plan? I've seen the terminals are about $1000 a piece and they're hellishly slow but considering this kind of use in a ship or maybe in a distant place, it could be an option if the plan is not terribly expensive.

<comment><USER9> Depends on location and provider, but I worked on a remote off grid monitoring station. We uploaded about 30 gigs a month over a satellite dish. The price was comparable to cell phone, but the ping was bad. 300 ms or so, occasionally much worse.

<comment><USER8> Wow! I don't think my ADSL land line would be much better than that. The A is for asymetric, downloading is not too bad. I'm surprised it's not specially expensive. Thank you for the info!

</comment></comment></comment></comment><comment><USER10> The internet on cruise ships are super slow and very expensive. So I don't know how to programming on the cruise ship would work if you are connecting to a server.

<comment><USER11> He writes about downloading all necessary docs beforehand. Also, it isn't hard to run servers in virtualbox or containers if you need them. That leaves slow internet for occasional searches of stack overflow, which is doable.

<comment><USER12> If you don't mind slightly outdated data, you can download and browse all the Stack Exchange sites offline:

[http://stackapps.com/questions/3610/stackdump-an-offline- bro...](http://stackapps.com/questions/3610/stackdump-an-offline-browser-for- stackexchange-sites)

[https://archive.org/details/stackexchange](https://archive.org/details/stackexchange)

</comment></comment></comment><comment><USER13> I keep thinking about that article, working on a cruise ship. Here's a search of his blog about cruises, it looks like he stopped two years ago[༆]

[༆] - [http://tynan.com/?search=cruise](http://tynan.com/?search=cruise)

<comment><USER14> He had a Syndey -> Seattle cruise in the works as of his post two months ago, so I'd wager he's still at it.

</comment></comment><comment><USER15> Why not an all inclusive hotel/resort? Same benefits + reasonable Internet.

<comment><USER16> Way cheaper on a crusie to get all meals included. Try and find a same price per day for a benefit by benefit equal land cruise. They don't exist. You are getting free meals because most people on ships make up for it with buying alcohol and other high margin vacation purchases.

<comment><USER15> I see. I have always associated cruises with expensive, but it looks like this is not the case anymore.

<comment><USER17> Yeah, cruises can be dirt-cheap these days.

Especially if you live near a big cruise ship port, you can get last minute deals on 7 day cruises for a couple hundred bucks. You have to be flexible, but it can be ridiculously inexpensive.

And note, that's food included.

</comment></comment></comment></comment><comment><USER18> This was discussed in DN community a lot. Cruise ships are useless for slow internet.

<comment><USER19> Cruise ships are slowly being outfitted with high speed spot beam internet access. A friend working on RCCL's Quantum Of The Seas can pull 50-60Mbps off hours.

<comment><USER18> Shared among hundreds of people... Not really reliable connection.

<comment><USER20> In my experience, these kinds of connections are QoS'd on a per-port/protocol level, so every client gets an equal amount of bandwidth on that port. If you can get a tunnel or vpn connection going on a less used port you'll generally get far more bandwidth. Being on a non-standard port also helps since the systems are often under provisioned for the size of the NAT table they have to hold.

That's all assuming you can get an open port between a remote server and you, but usually there's at least some way to get a connection on not 80/443.

That said my experience is pretty out of date so it could be different these days. Thinking back, since I figured out that I could tether my motorola v710 for free 10 or so years go, mobile internet has gotten faster and far more reliable, (though a lot more expensive once smart phones made data plans more than an underutilized $5/mo gimmick on feature phones,) I've rarely used public wifi.</comment></comment></comment></comment>


Ask HN: Recommend a book on Machine Learning and/or Graph Theory? - <AUTHOR>

Hey HN'ers.
A couple of us are part-way through developing our next app (http://pageradius.com/), and the more we get into it, the deeper we're getting into machine learning and graph theory (including frequent itemsets, association rules, bayesian classification, clustering, and so on).
We've scoured the web for as much info as we can and are making pretty good progress, but really want to get stuck into a solid, well-edited book that explains these concepts clearly - we're really loving these subjects.
Any recommendations?
Thanks! <comment><USER2> It isn't published yet, but you can get the early access (MEAP) of _Machine Learning in Action_ from Manning:

<http://www.manning.com/pharrington/>

A good basic graph theory book is:

[http://www.amazon.com/Introductory-Graph-Theory-Gary- Chartra...](http://www.amazon.com/Introductory-Graph-Theory-Gary- Chartrand/dp/0486247759/ref=sr_1_1?s=books&ie=UTF8&qid=1314381624&sr=1-1)

Depending on exactly what you're trying to do, you might also find some value in something like:

[http://www.amazon.com/Network-Science-Applications-Ted- Lewis...](http://www.amazon.com/Network-Science-Applications-Ted- Lewis/dp/0470331887/ref=sr_1_2?s=books&ie=UTF8&qid=1314381704&sr=1-2)

</comment><comment><USER3> Disclaimer: I'm a total n00b on this topic.

I'm trying to learn how to classify items as related within a dataset. I know <http://directedge.com> does this (funded by yc, run by #wheels) so I had a look at their articles which are a helpful beginners intro. <http://directededge.com/tech.html>

In one of the articles #wheels recommends <http://oreilly.com/catalog/9780596529321>

so I'm going to pick that one up but to be clear I really have no idea if this book addresses graph theory specifically; at this point anything and everything is helpful to me.

</comment><comment><USER4> Hilary Mason's machine learning video is good:

<http://oreilly.com/catalog/0636920017493>

It's more of a primer, but it seems like most of the other material assumes that you're already a practitioner. It does have enough depth to actually be somewhat proficient after watching it.

</comment><comment><USER5> The Elements of Statistical Learning is pretty good. It's also available for free.

<http://www-stat.stanford.edu/~tibs/ElemStatLearn/>

</comment><comment><AUTHOR> I realise somebody asked a similar question about Graph Theory books already - <http://news.ycombinator.com/item?id=865749> \- but that discussion is two years old, and I was hoping there'd be something newer by now!

Also, I've found this free online (downloadable) book on Graph Theory to be really useful: <http://code.google.com/p/graph-theory-algorithms-book/>

</comment><comment><USER6> For graph theory, I recommend Doug West's _Introduction to Graph Theory_. [http://www.amazon.com/Introduction-Graph-Theory-Douglas- West...](http://www.amazon.com/Introduction-Graph-Theory-Douglas- West/dp/0130144002) It's somewhat expensive, but worth the price. Also, Doug is a cool dude.

</comment><comment><USER7> Whats missing on the list is interesting works of Jon Kleinberg. Hes CS professor at CMU checkout this link <http://www.cs.cornell.edu/home/kleinber/networks-book/>

</comment><comment><USER8> I would suggest Pattern Recognition and Machine Learning by Bishop.</comment>


How would you promote a SW product to... you? - <AUTHOR>

I am an concept and UI-designer. I design features and UI for a SW product that is primarily targeted to you (Developers, Programmers, designers - people with skill and urge to create new).
Now the product starts to be ready. And it will be really good - it has excellent features, and with it you can do in hours what would take days or weeks without the product. Really, seen that.
But... this is not the first piece of SW that comes with similar claims.
So, my question: What makes You interested in investing time and effort to take look into a new SW product? - down-to-earth-list of features? - how-to-do-it -videos? - general, concept presentations? - Big Brand? - or..? <comment><USER2> What makes me look into a software product is seeing good reviews (especially SO answers) of it when googling the problem I'm trying to solve. This is how I found Beyond Compare, which I love. It's also somewhat how I found Sublime Text, except I wasn't specifically googling: I'm _always_ looking for better text editors (and programming languages, but that's another subject).

What makes me try and get to love a software product is generous free trials. Beyond Compare gives 30 days, counted only on days you actually use the program, officially, and if I recall correctly, 60 days in reality. Sublime Text gives an unlimited free trial with occasional nags. I also want excellent documentation and program manuals. While I'm learning the program, I'm going to have questions about what it can and can't do. If I can't find answers to these, I may just give it up. An active support forum is a definite plus.

As far as presentation of the product goes: screenshots. I don't really care about anything but screenshots. I _may_ watch a video if I'm feeling especially generous with my time, but usually I click around looking at screenshots, then either download or move on.

<comment><AUTHOR> I'll add my list \- Screenshots \- good quality text info to be found via Google \- Reviews

Thanks!</comment></comment>


Warning: Implicit Backdoor - <AUTHOR> https://flak.tedunangst.com/post/warning-implicit-backdoor <comment><USER2> For those wondering how this works:

In C, like most languages, all binary operators on numbers – including arithmetic as well as comparisons – 'natively' require two operands of the same type. When you pass operands of different types, the language usually converts one of the operands to the other's type. (Sometimes it converts both operands to a different type instead.)

In this case, without the cast, the comparison will be performed by converting the `int` to `size_t`. The dangerous case is when `num` is negative. Since `size_t` is unsigned, the conversion will turn negative numbers into very high positive numbers, so `num > limit` will be true, and the function will safely reject the allocation. On the other hand, with `num > (int)limit`, no conversion occurs; the comparison is performed between two signed integers, and `num > limit` will be false if `num` is negative.

It would be better to be more explicit. Perhaps use two comparisons (the compiler will optimize them into one if possible):

        if (num < 0 || num > limit)

Or, better yet, make `allocatebufs` take `size_t` instead of `int` in the first place. Taking `int` is risky even without the comparison bug: if someone calls the function with a `size_t` on a platform where `size_t` is larger than `int` (i.e. 64-bit platforms), the upper bits will be truncated. For instance, if the passed-in value is 0x100000001, it will be truncated to 0x1, causing allocatebufs to return a much smaller buffer than expected.

If you're wondering about the exact rules for what types get converted to what, they're very complicated, unnecessarily so. It mostly boils down to "larger type wins; in case of a tie, unsigned wins over signed". But there are exceptions. Here's the spec language:

\- [http://c0x.coding-guidelines.com/184.108.40.206.html](http://c0x.coding- guidelines.com/22.214.171.124.html)

\- [http://c0x.coding-guidelines.com/188.8.131.52.html](http://c0x.coding- guidelines.com/18.104.22.168.html)

<comment><USER3> I still don't understand what the security issue is. In case of num < 0, malloc will be called with a negative number, which will be converted to size_t, resulting in a huge number which will most likely fail to allocate, returning NULL. Even if it doesn't, I don't see any way to exploit this further. What am I missing?

<comment><USER4> The negative number is multiplied by 64, so it can then underflow and become positive again.

<comment><USER5> Ah interesting... but then what could happen? Is the risk that the program could try allocating too much memory and crash? Calling this a "backdoor" seems excessive, no? -- at worst it's just a denial of service.

<comment><USER4> If you take (1 << 63) + 1 as size (which is a large negative int64), multiply that by 64 and you get 64. So it will call malloc(64) which will succeed. If other parts do the correct unsigned comparison then you have a heap overflow.

<comment><USER6> This makes sense, but it also implies that there is no actual backdoor in TFA. The code as shown in the article is not exploitable without assuming more (actually exploitable) bugs somwhere else in the callsite (which the article doesn't mention). Or maybe we haven't figured out the actual vulnerability yet...

<comment><USER4> Well, the rest of the code is also correct on its own though. If I tell the function to allocate X bytes, it should either fail or return a buffer that has space for X bytes. If the function returns less than X bytes if X happens to be a large unsigned int (that is a negative value if interpreted signed) then that is a bug and is exploitable.

<comment><USER6> But that is not what happens in the code shown in TFA.

Passing a large value into the method shown in the article will do nothing nefarious (assuming sizeof(size_t) >= sizeof(int)). It will either return a large allocation, or, more likely, fail because the amount of requested memory is too large.

If you have a narrowing/casting bug _somewhere else_ in your program, which BTW would produce an obvious warning, that would of course cause trouble as you have described.

And while mixing signed and unsigned arithmetic for buffer sizes is, of course, a recipe for desaster, I think it's incorrect to claim that the allocatebufs method shown in TFA has a "backdoor" because of this. I feel that is a bit like saying memcpy has a backdoor because you might get your pointer arithmetic wrong when calling it.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER7> In my opinion, the interactions between unsigned integers and signed integers are too hard for a programmer like myself to handle correctly in practice, especially being consistently vigilant all the time.

I admit that I didn't understand how the code in the article worked (i.e. why the unsigned check was correct and why the signed check was incorrect) until I read the answer in this comment thread.

I like Java's design where all integer types (except char) are signed, and all arithmetic is done in signed mode. It simplifies the mental model and reduces the opportunities for logic errors.

Signed integers are definitely useful sometimes (e.g. difference of two unsigned indexes). A wide-enough signed type (e.g. int32) can hold all values of a narrower unsigned type (e.g. uint16). So it is possible to design a language without unsigned integer types without losing functionality.

<comment><USER8> My current position is that a high level language should have either explicit numeric conversions with very strong typing (like Haskell), or a single integral type (like Python). Anything else is unecesary complexity that won't even bring any sizeable gains. Strong types with implicit conversions (like SQL) isn't too bad, but Java's system is.

But C isn't a high level language, so none of the above applies.

<comment><USER9> > C isn't a high level language

Depends on your viewpoint, of course :)

</comment></comment></comment><comment> 5- This was potentially in response to this event, posted to HN earlier today: [https://news.ycombinator.com/item?id=20874470](https://news.ycombinator.com/item?id=20874470) (a Spectre Linux kernel patch rendered ineffective by LTS maintainers in an attempt to silence a compiler warning).

The scenario described in this submission was the first thing that came to my mind upon reading about that patch.

</comment><comment><USER10> To me, as someone that doesn't use C in their day to day life, C appears to be a security nightmare. I cannot imagine using it in a production environment that takes any amount of user input.

<comment><USER11> Yep. It's _insane_ to use tools/languages susceptible to problems like these in 2019.

<comment> chupa-chups To underscore your general point: You're totally right. But... a but:

Implicit type conversions in C are cumbersome. In javascript for example, they are _way_ more. If javascript had a similar role (i.e. bare metal code), the world would be _way_ messier than it already is.

Languages without strict type checking are in general open to problems like this, more or less depending on the leniency to check potential type error. C, being a bare-metal language is especially ugly since it allows to cast anything to anything else, granted - but is is spottable, reviewable and, for new code, you won't get away with ugly casts. In javascript you don't even see casts, they just happen.

Still, javascript doesn't have an unsigned integer, so _this_ attack vector would not work.

<comment><USER12> More to the point, memory-safe languages _cannot have_ these types of vulnerabilities regardless of other aspects of the type system.

<comment><USER9> That's assuming, of course, that the runtimes for those languages are correct: as numerous web browser exploits have taught us, this isn't always the case ;)

</comment></comment></comment></comment></comment><comment><USER13> I'm quite sure this is a response to [https://news.ycombinator.com/item?id=20874470](https://news.ycombinator.com/item?id=20874470) submitted earlier today. I don't believe there was any malicious intent there, but it's yet another safety issue in C that anybody tells me they are aware of, that it would never happen to them and that memory safety issues are things that only happen to other less experienced programmers.

I must only know the cream of the crop of C programmers /s

<comment><USER14> Thanks. I was wondering what he was ~pointing at.

</comment></comment><comment><USER15> As someone who doesn't understand the language's nuances - what does adding a cast to a value being assigned in the function open? Will it return NULL more often?

<comment><USER16> Sign confusion: malloc takes size_t, so negative numbers are just really large numbers to malloc. A negative int passes the check after adding the cast, because we're now comparing with signs and now a negative number is smaller than a positive one, so malloc will be called with the larger value. Since it gets multiplied you will also overflow and get pretty much any size. There's a DoS opportunity at least.

The correct fix is to cast the input to unsigned, I think.

<comment><USER17> That doesn't make sense -- how would a negative value of num be greater than the positive value that is (int)limit? It must be something else...

Edit: Oh, I see what I missed -- I was thinking of the danger as _directly_ passing too large a number to malloc, when actually the danger is passing a negative number, which then gets implicitly converged to a large positive number. Oops.

<comment><USER18> Because C's implicit integer promotion rules are horrible. If you are operating on two signed types, or two unsigned types, it does what you would expect and converts both to the type with greater rank (essentially more bits). Likewise, if you have one signed type and one unsigned type and the signed type has greater rank then it does the sensible thing and converts them both to the signed type.

However, if you have one signed type and one unsigned type, and the unsigned type has greater or equal rank, then it converts to the unsigned type, despite the fact that the unsigned type can't represent any of the negative values of the signed type, so they get wrapped!

This is the cause of so many bugs.

<comment><USER19> But the irony is that the [immediate] bug in this case was adding an explicit cast, which is _also_ _exactly_ what people would have done in languages that didn't implicitly promote to unsigned.

The cleverness of this implicit backdoor hypothetical is that it would have worked substantially the same way in most other low-level languages, including Rust. Modern C compilers literally complain in the same way as stricter languages, which had the effect of inducing a poorly considered cast.

<comment><USER18> Yeah, it frustrates me that both Go and Rust have decided to require casting for all numeric conversions, whether there is a chance of information loss or not. This causes casting to proliferate, and you grow numb to it. If lossless conversions were implicit, then you would only need casts in potentially lossy situations so they would stand out more, and hopefully make you think harder about correctness.

</comment></comment></comment></comment></comment></comment><comment><USER20> I feel that it says something about the problem area when over forty comments in the thread are dedicated to the discussion of how exactly the five lines of code work.

<comment><USER21> Half of the problem is programmers putting their head in the sand. Half of the problem is lack of real leadership from people that know better.

Computers are not securable. Not from these types of attacks, anyway. State intelligence agencies are working overtime trying to stop the fires from spreading, but at the end of the day we've had Petya, NotPetya, and WannaCry. We have Schneier with a book called "Click Here to Kill Everyone" and we still have computers running everything.

Ok fine. But one day we're going to get an event and people are going to say: "Oh the humanity, how did this happen? How could we have known?!" I don't know what it is going to be, but I know it's going to be just like 2008 all over again. Industry insiders know the score. If it does happen, my deepest hope is that it ends up being strictly financial, but my gut says that it will probably be cyberphysical. The financial sector has had decades to harden their systems.

<comment><USER22> > State intelligence agencies are working overtime trying to stop the fires > from spreading

I think you're mistaken. Intelligence agencies do the opposite by hoarding exploits and purposely weakening security standards.

</comment></comment></comment><comment><USER23> The code is 'totally safe and secure' in a nasty, obfuscated way. It takes too much language / system knowledge to tell that negative numbers are covered. Plus, here isn't an extra block whose purpose is confusing that is responsible for negative numbers. Instead the behavior is hidden as part of another block that has a simple face-value interpretation. This is (1) fragile but (2) not self-aware that it's fragile. If you don't refactor to avoid fragility at least leave a comment. Or how about unit tests? If you don't question the motives of the author you should at least question their coding ability.

</comment><comment><USER24> Obligatory mention of early attempt to really understand and address subversion as a threat plus a follow-up by pioneers that built on that:

[http://seclab.cs.ucdavis.edu/projects/history/papers/myer80....](http://seclab.cs.ucdavis.edu/projects/history/papers/myer80.pdf)

[https://apps.dtic.mil/dtic/tr/fulltext/u2/a435312.pdf](https://apps.dtic.mil/dtic/tr/fulltext/u2/a435312.pdf)

The current state-of-the-art in both formal methods, automated analyses, and test generators can get us pretty close to their goals with such designs, too. Way less cost-prohibitive than it used to be. Although, high-assurance security today has moved far away from security kernels they advocated to focus on securing hardware/software and distributed systems in ways that allow expressing more flexible and useful policies. The design and assurance methods of the past still work, though. Stuff like Rust, SPARK Ada, RV-Match, Why3, and CompCert handle more code-level problems than older methods, too.

</comment><comment><USER25> Or just introduce a format string vulnerability by removing the format specifier from printf et all functions ... or an off by one or double free bug if you want to get more genuine

</comment><comment><USER26> How about this in stdlib.h:

      void *malloc(signed long long int untrusted_size) {
          size_t size;
          if (untrusted_size < 0) {
              fprintf(stderr, "warning: exploit "
                  "detected. Click <ok> to cancel");
          }
          size = (size_t)untrusted_size;
          etc.
      }

Or better yet redefine malloc with a wrapper and include the __line__ and __file__ in the exploit error.

Edit: markdown

<comment><USER27> The hack depends on numeric overflow in the caller that flips negative number into positive, so malloc can't possibly know it got the wrong size.

It's even funnier that signed overflow is Undefined Behavior in C, so the compiler is allowed to assume it can never happen (and thus let it happen, and even remove non-kosher overflow checks).

<comment><USER26> > The hack depends on numeric overflow in the caller that flips negative > number into positive, so malloc can't possibly know it got the wrong size.

Look again at the hack-- Ted is sending a _negative_ number to malloc. If I change malloc's interface to accept signed numbers, then I can check inside the definition for negative numbers and report to the user that something bad has happened.

</comment></comment></comment><comment> munk-a Is this bug exposed only on systems with 1 byte words? I'm struggling a bit to understand the exposed bug and, while I understand the whole point is that there are lots of issues of this kind that can hide in code pretty innocently it'd be nice to actually comprehend this one.

<comment><USER28> You can pass a negative number such that num * 64 will underflow and result in a large positive number. (Technically it's UB, but in practice it will probably underflow).

Or as someone else mentions, even without underflow, it will be converted to unsigned since malloc takes a size_t.

</comment></comment><comment><USER29> I wonder if you could trick an auto linter git hook to do the malicious commit for you.

</comment><comment><USER30> I'd be interested to see such an example with a more secure language like Rust.

<comment><USER27> This specific case simply doesn't compile:

        if num > limit {}
                 ^^^^^ expected i32, found usize

The whole trick isn't really translatable to idiomatic Rust, because `malloc` is not used beyond specific C interoperability needs. If you want to store `num` elements, you use `Vec::with_capacity(num)` or such, instead of allocating the hard way.

</comment></comment><comment><USER31> The point is not really about the specific mechanism shown in the post, but more about plausible deniability and how a malicious actor might introduce a vulnerability like this in a way that makes their innocence seem unimpeachable.</comment>


Make any language "typed", by changing your project structure - <AUTHOR> https://github.com/harryvederci/nothing-to-see-here/blob/master/content/idea_make_any_language_typed.md <comment><USER2> It's very ugly, but not crazy. Unfortunately, it misses the point: typing is about having an automated tool report on type incompatibilities. No convention can fix that because you can easily not follow it (accidentally or otherwise).

I would guess that in JavaScript you can get to a point similar to Python of old with Zope3 Interfaces, without needing to resort to a precompiler (though Python's decorator syntax makes thing nicer).

</comment><comment><AUTHOR> I couldn't sleep. Let me know if this is crazy or beautiful.</comment>


Berkeley Computer Vision Class - <AUTHOR> http://www.vision-class.org/ <comment><USER2> I'm relatively young (25) and I still get goosebumps whenever I see online courses on cutting edge technologies offered by universities for free. What an amazing time to be alive.

<comment><USER3> In the interest of keeping you from making the mistake again, and possibly in company that wouldn't be forgiving, the term "ivy league" isn't a generic term for academically prestigious schools but refers to a specific group of schools in the northeast us. Brown University, Columbia University, Cornell University, Dartmouth College, Harvard University, Princeton University, the University of Pennsylvania, and Yale University.

[http://etcweb.princeton.edu/CampusWWW/Companion/ivy_league.h...](http://etcweb.princeton.edu/CampusWWW/Companion/ivy_league.html)

<comment><USER2> edited, thanks for the correction!

</comment></comment></comment><comment><USER4> Jitendra Malik, the instructor for this course, is a giant in the field of Computer Vision. I've heard he's also a fantastic teacher.

</comment><comment> brown9-2 I wonder if this Berkeley offering has anything to do with why the other Stanford/Coursera courses have all been delayed. The most recent emails claimed the delay was for "legal/administrative issues". I wonder how Stanford feels about Coursera working with Berkeley also.

<comment><USER5> Doubtful. Some of the already-scheduled course offerings feature Berkeley faculty:

<http://www.saas-class.org/> <http://www.security-class.org/>

</comment></comment><comment><USER6> I took CV in college and it completely changed how I looked at math/programming. Highly recommended!!

<comment><USER7> For me, it changed how I looked at statistics. It was irrelevant regarding programming in general.

</comment></comment><comment><USER8> Computer Vision is a very interesting domain. If you're considering taking this course, do.

<comment><USER9> It's one of the classes I regret not taking in college, so I signed up. But I remember hardly anything from my Linear Algebra -- and I never really developed an intuition for the grand significance of, say, eigenvalues.

<comment><USER10> Are other people in this "want to know more, but forgot most of the base material" level? I've been working on an education project that'll get you from probability and statistics through linear algebra up to machine intelligence and computer vision. It'll also have "normal people" tracks like nutrition/fitness and understanding happiness in our mad, mad world.

Think of it as those stanford courses, but more organized, better produced, less transient, and with in person office hours (weekly in palo alto and SF).

If you'd like details, or a trial, or if you're brilliant and want to help or make course materials, email me. The more people bug me about finishing it, the quicker it'll get finished.

</comment></comment></comment><comment><USER11> Isn't this what Vicarious is trying to do?</comment>


Dutch intelligence agency AIVD hacks internet forums - <AUTHOR> http://www.nrc.nl/nieuws/2013/11/30/dutch-intelligence-agency-aivd-hacks-internet-fora/ The Dutch intelligence service - AIVD - hacks internet web fora to collect the data of all users. The majority of these people are unknown to the intelligence services and are not specified as targets when the hacking and data-collection process starts.<p>Apparently what they do is get direct access to the mysql databases backing fora and then just download the entire thing. <comment><USER2> What upsets me most is that NRC is withholding information in name of "US national security". Having a crooked government is bad, but when journalists rather side with the man than stand up to him (as they're supposed to in a democratic society), all hope is lost. They don't admit doing this in the English version of this article, which reads:

      A spokesperson for the American government stated that
      the publication of classified information is a threat to
      US national security.

But the Dutch version does:

      De Amerikaanse overheid laat in een reactie weten dat
      publicatie van staatsgeheimen de nationale veiligheid
      schaadt. Om die reden publiceert deze krant belangrijke
      technische details niet.

Translation:

      A spokesperson for the American government stated that
      the publication of classified information is a threat to
      US national security. For this reason, the paper won't
      publish important technical details.

The Dutch government is conducting illegal activities and its citizens deserve to know exactly how their government is screwing them.

<comment><USER3> We can guess at the details.

A lot of forums like phpBB are installed via cPanel and may have default passwords and not be secured fully.

If you have a machine in the ISP, which just means renting 1 machine per ISP, then scan the local IP ranges for open MySQL ports... or more nefariously scan for Memcached as that is hardly ever secured.

Then use the default credentials or the credentials stolen from Memcached to access MySQL.

You're dealing with a known set of forum software, probably phpBB, Vanilla, vBulletin and Invision. So you only need to map out a few schema to be able to make sense of hundreds if not thousands of sites.

Forums are slow moving, even the big ones only have a few thousand to low tens of thousand of posts per day... and your rented machine could easily poll for differences and send it back to HQ.

This is all just speculation of course, but it wouldn't surprise me that this is how it was done.

<comment><USER4> You're making some pretty big assumptions there. I don't think there is any evidence that MySQL databases set up via cPanel (or any other control panel) have default passwords or are inherently insecure. If this was the case, we would be seeing websites being hacked left and right, and not just by intelligence services.

<comment><USER3> I didn't feel like my assumptions were that big.

From the original article:

> "They use sweeps to collect data from all users of web forums. The use of > these techniques could easily lead to mass surveillance by the government."

Which implies that they are not scanning traffic constantly but are instead performing a sweep across the fora and gathering all data. Which implies querying the databases on a schedule and pulling info as the full dataset nevers exists in the ephemeral traffic.

> "They acquire MySQL databases via CNE access"

Which states that they exploit something on the network to "acquire" the data from MySQL databases.

Those two things together suggest periodic access to the databases.

And given the previous behaviour from accessing networks and hardware without permission of the companies operating on those networks (the Google dark fibre intercept) it isn't too much of a stretch to imagine a similar scenario that could give them access to these databases without asking first.

And the easiest way to get access to a large volume of forums would be to use a common platform as the attack point: A common deployment (cPanel, Plesk, etc) or a common technology that could give up credentials (memcached).

Of course they could use a vulnerability in MySQL, but I bet that's harder work than just trying default passwords or pulling credentials from the unsecured memory cache.

</comment></comment></comment></comment><comment><USER5> If you all remember the fuss about the "terughackwet", a law that would allow the police to hack people, this is what I meant when I said that the AIVD (general intelligence agency) and MIVD (military intelligence agency) have had this power since the beginning of time. This merely proves that they're actively using their capabilities and that the police doesn't really need it; they can just ask another agency.

I would assume the same for forcing passwords out of people, something which is still supposed to be illegal in the Netherlands but isn't. The AIVD and MIVD have the right to do this.

I've got one question though: does anyone know what they mean with _" They acquire mySQL databases via CNE access."_ What is CNE?

<comment><USER6> Computer network exploitation.

<comment><USER5> So sniffing traffic?

<comment><USER7> As I understood it, it's insider-speak for 'hacking'. While theoretically possible, it's non-trivial to sniff a complete db dump.

<comment><USER5> Okay, thanks for the reply!

</comment></comment></comment></comment></comment><comment><USER8> This is the most important sentence I think:

According to the document the Dutch "are looking at marrying the forum data with other social network info, and trying to figure out good ways to mine the data that they have."

The posts for one individual on one forum are maybe not that interesting. But by connecting this data to the data of his/her other internet activities, you get the total information awareness idea. E.g. Facebook, Gmail, other forums accounts, Whatsapp messages, websites visited etc.

<comment><USER9> It definitely is a dragnet kinda approach; let's just collect all the data, chuck it into a big database and see if we find any connections with _insert random justification here_.

<comment><USER10> Also known as the "Big Data" approach. Hopefully, they at least understand that there should be differential costs to false positives and negatives.

</comment></comment></comment><comment><USER11> Everyone likes to think that the forum targeted are by _terrorists_ related to middle east, Syria, etc.

I think that gathering such large amounts of data, allows you to do very specific sentiment analysis on specific groups of the population, in addition to twitter and facebook having _fora_ access is a big deal.

All these are speculations of course. Our agencies are guided by people and more often than not inadequate people. They might be collecting data just because the NSA does it, with no specific purpose. Data just waiting to be abused by someone in a position of power.

</comment><comment><USER12> I just read that as 'regularly hacks Interflora' and was momentarily amazed at how seriously they take their tulips.

</comment><comment><USER13> To make a comment not regarding moral and civilizational impact, I'm wondering what kind of value targeting forums can have.

Does this really worth the cost, compared to something like making friending bots on social networks and weight analyzing content for keywords ?

I suppose their definition of forum should be considered, here. Do we speak of the canonical form of a forum, like a punBB powered website, or is any website aiming to allow people to chat a forum ?

<comment><USER14> Some extremist groups set up separate single issue groups to introduce people to extremist ideas.

An example would be the British National Front and BNP (both right wing extremist groups) setting up an animal rights group which mostly campaigns about slaughter methods, especially ritual slaughter.

Some animal rights groups are also extremist. (Digging up corpses; setting incendiary[1] devices which burnt down several large departments stores; setting fires to trucks and truck depots; etc.)

Monitoring these groups makes some kind of sense. So long as police keep that data secure, and it's only used for legitimate law enforcement and isn't used to tarnish reputations or stifle lawful campaigning.

[1] The intent was to cause water damage by triggering sprinkler systems. The fact the sprinkler systems didn't work, allowing the stores to burn down is worrying. This, and IRA bombing campaigns, is one reason that pockets come stitched shut now. The well dressed man / woman will have a stitch ripper to remove these closings, but it's surprising to see how many people have never heard of stitch rippers.

<comment><USER15> Do you have source to back up the claim that pockets come stitched because of bombing-threats? My wife is certified seamstress and swears that pockets on higher-range clothing has always been stitched close, because that keeps their model in better shape. But there might be more to it, so I am curious to what makes you say this.

</comment></comment></comment><comment><USER16> Not surprised - part of a university project for a class I took a few years back built a scraper for forums/Facebook/Twitter. The assumption there was that agencies would get access tokens from Twitter - but this is much easier...

</comment><comment><USER17> Recall that de-anonymization analysis is pretty effective these days. Even if you post under a made-up user name, there's a pretty good chance they can figure out who you are.

That's one reason I post under my own name; anonymity wouldn't buy me much anyway. Even in forums where I'm technically anonymous, I don't try hard to preserve any secrecy about my identity. It's more a matter of "There's a culture here of intemperate posts protected by anonymity, so if you notice me posting there, please also understand that I might be responding in kind."

<comment><USER18> Deanonymization that works well relies on:

(i) correlating social graphs (ii) correlating likes/dislikes/reviews etc. across different networks. (iii) Lots of data to do (i) and (ii)

And it's still difficult to do for random people on the internet (as opposed to the NSA or serious attackers such as those willing to put in the effort to crawl and analyze the entire linkedin graph.) I believe deanonymization based on just textual analysis is still a little bit of an academic effort.

Anonymity does buy quite a bit - especially on a forum like HN - where there isn't a social graph and the like/dislike information is private.

</comment></comment><comment><USER19> The main purpose of monitoring communicatins is to monitor public sentiment and guide it or sway it. It is not for security purposes, being able to manipulate the populace is the primary goal.

It is basically to subvert the effective functioning of the democratic system in a subtle but perfectly legal manner, by manipulating the information fed to the public and actively shaping the public mood in the desired manner

PS. A lot of it happens on HN and Reddit.

</comment><comment><USER20> Keep paying them to do that. Taxes are a good thing, after all: governments also build roads and help the poor - which no one else can do.

</comment><comment><USER21> ...wow. That's pretty creepy.

I'm Dutch myself and I knew that the AIVD tapped a lot, but mining data from forums?!

<comment><USER22> And yet strangely, I'm not surprised. There seems to be a race by intelligence agencies to collect as much data as possible in recent years (well, the past decade). And while in the West, the Americans is leading the pack, the others aren't shining away without a fight.

I wouldn't be surprised to learn that it has become more a sport than a national security measure by these agencies. They have gone cocky, so to speak, thinking that because they are government agencies they are above the law that regular hackers supposedly are not.

<comment><USER23> How do we quantify who is "leading the pack"? This would assume we have representative coverage of different countries' activities and that is certainly not true.

</comment></comment></comment><comment><USER24> [XXX] intelligence agency routinely hacks [YYY]; generally to make good with the NSA. From now on we can just report what XXX and YYY are and dispense with the details.

</comment><comment><USER25> fora is a plural form of forum

aka forums

<comment><USER22> True, in English it would be 'forums'. In fact it would be 'internet forums' in two words, but this is clearly written as it is in Dutch, where it would be «internetfora».

Although, only the title of this thread is 'internetfora', while the article has separated it into two words.

<comment><USER26> The article heading now says 'internet forums'.

</comment></comment></comment><comment><USER27> Are we talking about "internet fora" like HN?</comment>


Obesity Rate for Young Children Plummets 43% in a Decade - <AUTHOR> http://www.nytimes.com/2014/02/26/health/obesity-rate-for-young-children-plummets-43-in-a-decade.html?smid=tw-share&_r=0 <comment><USER2> Is this a success in health education; or a failure to put dinner on the table?</comment>


Getting started with LXD – the container lightervisor - <AUTHOR> https://www.stgraber.org/2015/04/21/lxd-getting-started/

<comment><USER2> Looks interesting, however this article needs to improve the section where it talks about how this compares with Docker, etc. The difference between "system" and "app" containers doesn't say much to me.

What is better here, the design? I like Docker, but find the command-line (and maintenance) a bit awkward, will this project improve on that?

<comment><USER3> An app container is pared down to run a single app. That's why you need a third party process managers like runit, supervisor or a script to run multiple apps in a single app container format like Docker.

A system container is similar to a VM, you can use it more or less as a VM environment, run multiple apps, ssh, schedule jobs, cron etc.

A system container gives you a more complete OS environment within the constraints of a container. I have a post that goes into some depth comparing LXC to Docker, it's not updated to include LXD but could help.

[http://www.flockport.com/lxc-vs-docker/](http://www.flockport.com/lxc-vs- docker/)

<comment><USER4> Nothing stops you from using Docker containers as what you describe as "system containers". The comparison you give to LXC is quite strange, given that Docker used to default to using LXC as it's backend.

My most frequently used Docker container is primarily used for me to ssh in to a development environment that I use "more or less as a VM environment" and run multiple apps in, including sshd, screen and a ton of editors.

Other differences you give such as "instances are ephemeral, persistent data is stored in bind mounts to host or data volume containers" is only true if that is how you decide to use it. Data persists in a Docker container as long as you don't destroy the container. E.g. there's nothing special about a "data volume container" other than that you decide to not destroy it. The only reason some people like to make this distinction about app and data is that it allows you to destroy the container containing the application code (e.g. to upgrade it) without destroying the data. Or, if you go the bind mount route, and set things up accordingly you can e.g. blow away the entire /var/lib/docker whenever you feel like it (just mkfs'd an entire partition containing /var/lib/docker on a server earlier to clean up some cruft - service files restarted everything again shortly after I started Docker back up).

You can do the exact same thing with LXC if you want (including using "data containers" which are nothing but bind mounting parts of one container on top of parts of another). Unsuprisingly since Docker used to do the exact same thing using LXC as the backend mechanism.

Most of what you write about LXC as a "system container" holds only if you choose to install a full OS image as an LXC container, but LXC containers can just as well be only a single application if you prefer. LXC, like Docker, _doesn 't care_ either way - it just sets up the environment and executes your specified application.

"Docker restricts the container to a single process only" is wrong, as you point out yourself, when you write that "there is no way to run php-fpm, apache and mysqld in the same container without a shell script or install a separate process manager like runit or supervisor." Running a "separate process manager" is also exactly how you run more than a single process with LXC.

<comment><USER5> This is known as the PID-1 issue, and ever since Docker first came out it's been a major source of frustration for many users who want to use Docker containers to run their existing workloads.

It's not possible to run a Docker container with systemd, upstart or sysvinit working without major workarounds. So while it is possible to use a custom and hacked environment to get a docker container that simulates a regular linux system, out of the box it's simply not possible.

I think it's entirely accurate to call Docker a system for managing application containers. LXC can be run with various options, but by reading the lxc docs (one example here: [https://wiki.debian.org/LXC](https://wiki.debian.org/LXC)) you can see that it supports various normal init systems and not just the process managers that can run under Docker.</comment></comment></comment></comment>


Why have there been so many new accounts created on HN lately? - <AUTHOR>

Maybe my perception is faulty, but there seem to be a lot more green accounts around lately.<p>Where are they all coming from? Are they legitimate people, or socks? Does anybody have a way to check and see if the account creation number actually has been abnormal, in order to confirm or reject my suspicion? (Obviously pg can...) <comment><USER2> You can maybe get some understanding from the data gathered by Hacker News Karma Tracker. This can only be done starting in February 2013, though, since it only includes accounts that have made comments since mid-January.

3326: [http://hn-karma-tracker.herokuapp.com/month/february-2013](http://hn- karma-tracker.herokuapp.com/month/february-2013)

2013: [http://hn-karma-tracker.herokuapp.com/month/march-2013](http://hn- karma-tracker.herokuapp.com/month/march-2013)

1115: [http://hn-karma-tracker.herokuapp.com/month/april-2013](http://hn- karma-tracker.herokuapp.com/month/april-2013)

1557: [http://hn-karma-tracker.herokuapp.com/month/may-2013](http://hn-karma- tracker.herokuapp.com/month/may-2013)

2717: [http://hn-karma-tracker.herokuapp.com/month/june-2013](http://hn-karma- tracker.herokuapp.com/month/june-2013)

973+: [http://hn-karma-tracker.herokuapp.com/month/july-2013](http://hn-karma- tracker.herokuapp.com/month/july-2013)

Perhaps it is a change-in-season thing? (biggest months above are February and June, although July looks like it will also be high.)

</comment><comment><USER3> I haven't personally noticed it in the short term. In the long term, I mean, we've had accounts for roughly the same amount of time on the site so we've both seen trends and the overall traffic is [http://www.archub.org/hntraffic-17oct12.png](http://www.archub.org/hntraffic-17oct12.png)

</comment><comment><USER4> Possibly the desire to comment on the NSA stories anonymously maybe? Do you have an approximate date when lots of new accounts were created?

</comment><comment><USER5> Why would it matter? Are you that bored?

<comment> luke-stanley It could mater if the system of ranking on HN is being gamed here, like how the US Military has IP addresses that change the ranking of Reddit posts.

<comment><USER6> _like how the US Military has IP addresses that change the ranking of Reddit posts_

Care to elaborate?

<comment><USER7> [http://blog.reddit.com/2013/05/get-ready-for-global- reddit-m...](http://blog.reddit.com/2013/05/get-ready-for-global-reddit- meetup-day.html) \- look at the "most addicted city".

<comment><USER6> Most addicted city is apparently Eglin Air Force Base. But then how did you conclude that they were changing the rankings of Reddit posts?

<comment><USER7> i didn't. i am just trying to explain what the original poster was referring to. i would guess that they're making some implication / assumption about organized voting. but that's just a guess.

i thought maybe it would help you, but i get the impression you're more interested in being pedantic for internet points... \me shrugs, walks away.</comment></comment></comment></comment></comment></comment>


Show HN: JSONv – JSON with variables - <AUTHOR> https://github.com/gatesn/jsonv <comment><USER2> Why not use string literal variables with special chars, like "{{foo}}"? That way you extend JSON instead of changing it, and you can continue to use super efficient parsers.</comment>


Ask HN: Any Christmas releases from the Ruby Community this year? - <AUTHOR>

Traditionally in the ruby community various new releases come on Christmas day for a bit of fun. Know of any releases this year? (May I suggest one link per post) <comment><USER2> I would to have a surprise release.

<comment><AUTHOR> Sorry I'm not sure I understand.</comment></comment>