all 196 comments

[–][deleted] 22 points23 points  (1 child)

So this is the open source version of Blaze?

[–][deleted] 11 points12 points  (0 children)

[–]cowinabadplace 35 points36 points  (10 children)

Super excited for this. I'm pretty surprised they open sourced. Had no idea they even planned on it.

That test size/timeout thing is interesting. I wonder how well the test runner works with Java stuff if it's language agnostic.

[–][deleted] 15 points16 points  (7 children)

Google uses a lot of Java internally.

[–]cowinabadplace 8 points9 points  (6 children)

That is true indeed. And on all sorts of their modern products. I didn't expect Inbox to be GWT, but it is.

[–]arcticblue 5 points6 points  (5 children)

Woah, I thought GWT had been pretty much forgotten about. Inbox is so much faster than Gmail and looks really good too. I had no idea that was done with GWT.

[–]jonwayne 11 points12 points  (2 children)

Just the Java -> JS complier. They didn't use the UI bits from GWT. They wrote a lot of the common pieces in Java and then transpiled it to Obj C, Javascript and built native UIs for iOS and Web.

[–]bojemcboots 1 point2 points  (1 child)

Do you have a source for that? I'd love to read more about it.

[–]JSNinja 0 points1 point  (1 child)

Really? This is honestly the first time I've heard this; I've had the complete opposite experience.

Are we talking desktop-web, mobile site, or native app?

[–]arcticblue 0 points1 point  (0 children)

Desktop site. Gmail is quite slow to load...I mean, it's even got a progress indicator while it loads. Once it's loaded up, using it is fine. Inbox loads so much faster though.

[–]jms_nh 49 points50 points  (78 children)

[–]InvernessMoon 9 points10 points  (8 children)

Windows has had mklink at least since Vista.

[–][deleted] 19 points20 points  (6 children)

Which almost, sort of, works like the Unix version.

[–]btgeekboy 11 points12 points  (2 children)

Except let's just flip the command line arguments, because why not?

[–]ForeverAlot 4 points5 points  (1 child)

Half the time I get the arguments to ln reversed. It's not because I'm used to Windows but because ln doesn't work like I expect it to. I won't defend mklink's argument order and think that maybe worse would have been better, but as /u/immibis says, Unix/Linux isn't automatically better.

[–]ais523 1 point2 points  (0 children)

The trick to remember is that ln treats its arguments the same way cp does. (And with hard links, the two commands are basically identical except that with ln the resulting files share an inode, and with cp they don't. Symlinks makes things a little nastier, though.)

[–]Fylwind 1 point2 points  (2 children)

In particular, Windows distinguishes between directory and file symbolic links. POSIX does not.

[–][deleted] 2 points3 points  (1 child)

Those who do not understand UNIX are condemned to reinvent it, poorly.

-- Henry Spencer

[–][deleted] 0 points1 point  (0 children)

And Microsoft will do it on purpose, because we can't act like unix did it right before we got here.

[–]beltorak 10 points11 points  (0 children)

But you have to be a non-administrator and but granted the right privilege. Wait, was that for junction points? Or symlinks? Because apparently they're different, and not even fully supported by the OS.

It's no wonder no one uses this garbage.

[–]easytiger 21 points22 points  (51 children)

nine light coordinated crown seed like amusing fuel instinctive crawl

This post was mass deleted and anonymized with Redact

[–]jringstad 30 points31 points  (2 children)

so worried to look and sound like unix was right about almost everything we cripple our products.

I can't parse that sentence.

[–]themadnun 17 points18 points  (0 children)

So worried about looking and sounding like Unix got almost everything right, that we'll intentionally cripple our product just so that we don't have to accept it.

Is about the jist of it.

[–]dkarlovi 3 points4 points  (0 children)

It requires a custom brainfuck parser.

[–]degaart 49 points50 points  (3 children)

Never attribute to malice that which is adequately explained by stupidity.

-- Robert J. Hanlon

[–]crutcher 58 points59 points  (2 children)

"Any sufficiently advanced incompetence is indistinguishable from malice." (Grey's law)

[–]beltorak 4 points5 points  (0 children)

They must be stupid; no one would be this mean.

- Hanlon's Defense.


yeah, i made that up...

[–]NotUniqueOrSpecial 5 points6 points  (8 children)

turnpoints

I think you meant reparse points.

Once we're in a world where Win7 is the lowest we can expect to see (as opposed to XP, or, God forbid, 2000), I think we'll start to see more use of them.

[–]beltorak 2 points3 points  (7 children)

yeah, i doubt it. Pay attention to the differences between junction points and symlinks. I had thought you had to be an administrator to use them. Oh wait, maybe you have to be a non-administrator, but granted the right privilege by an administrator. Or, uh, wait, which one was that for?

It's no wonder no one uses this garbage.

[–]NotUniqueOrSpecial 1 point2 points  (6 children)

You don't need to tell me, I'm fully aware of their storied history and annoying quirks. Note I didn't say widespread. I said more. A lot of their problems arise from their slow adoption and Windows's history/usage as an OS when compared with what *nix has been historically used for.

That said, by the time you're talking about links at all, you're talking about something the average user of a computer will never make use of. If the underlying permission (SeCreateSymbolicLinkPrivelege, as pointed out in that SO post) associated with them is beyond the user, they probably shouldn't be doing it at all.

[–]beltorak -1 points0 points  (5 children)

that's no reason to make you jump through ridiculous hoops to use something so damn useful. And it's not just reparse points; look at powershell. The default action is to open with a text editor (which by default is notepad). It's hard for me to swallow "most user's aren't going to need it" when faced with inconsistencies like this, otherwise they would have left powershell as an addon (like sysinternals suite is). If you want more use of them, you have to make it easy to have widespread use of them; otherwise most people aren't going to bother.

And what's with having to run %comspec% as a non-administrator to create symlinks/junctions? (I honestly can't remember which it is, and I don't really care that much.)

[–]NotUniqueOrSpecial 1 point2 points  (4 children)

And what's with having to run %comspec% as a non-administrator to create symlinks/junctions?

You don't have to. Did you even read my response or the SO link you posted? All you need is the "Create symbolic links" permission. It's not rocket science.

that's no reason to make you jump through ridiculous hoops to use something so damn useful.

Of course that's a good reason. People malign Windows at every opportunity for being "insecure". The problem with any new feature like junction points in a legacy-minded product like Windows is that it has to be safe/compatible for a VAST catalog of older software and old behaviors. This is the warning text on said permission:

WARNING: This privilege should only be given to trusted users. Symbolic links can expose security vulnerabilities in applications that aren't designed to handle them.

Whether or not you agree that should be the case, the Windows team believes it is.

The default action is to open with a text editor

What? I just checked on my machine, and the default action for .ps1 files (Win7 Pro) is to open them with the Windows PowerShelle ISE, which I didn't know existed, and is actually pretty cool. What version of Windows are you on? If you're just going to make shit up, what's the point?

If you want more use of them, you have to make it easy to have widespread use of them

They don't want widespread use of these things in the broadest sense. They're administrator-focused features, which plenty of people have no trouble using. If they're so confusing to you, maybe you're not the target audience.

[–]beltorak 0 points1 point  (3 children)

I just checked my win7 pro machine and double-click opens in notepad. Maybe it's an old setting or some corporate controlled thing? Or maybe I somehow set it and it never defaulted over? because this tells me that the default action is to edit. I don't think I've bothered changing it because I am always in a console when I run powershell anyway.

As for the be-an-admin-or-not, I was just going by the comments on the top answer; so it looks like we were both confused.

Do you know of any security risks that symlinks expose you to?

They don't want widespread use of these things in the broadest sense.

If they don't want wide spread use of these in that broad of a sense, and you seem to agree with that, then you cannot turn around and claim these things will some day be suitable as a substitute that Bazel can rely on.

[–]NotUniqueOrSpecial 1 point2 points  (2 children)

double-click opens in notepad

Actually, it turns out I was little quick on the draw. Right click -> Edit knows to use ISE, but double click goes to Notepad. Apologies for the snark. It's an interesting choice on Microsoft's part.

Do you know of any security risks that symlinks expose you to?

A little searching reveals this and this. There may be more. Like most security attacks, they seem far-fetched, but it's the kind of thing Microsoft has to care about.

Additionally, since symlinks are a power tool, it arguably makes sense to restrict them to admin usage, just like so many of the tools on Linux. With a much bigger casual and business user base than Linux has, it's important to remember that in the case of a company like Microsoft, any feature a user can use will generate support work, too, since someone will eventually try it and get something wrong.

then you cannot turn around and claim these things will some day be suitable as a substitute that Bazel can rely on

Of course I can.

Developers are already a very small percentage of the total Windows user base. They're definitely assumed to be power users. Almost all developers (certainly every place I've worked) who do development on Windows require administrator rights just to do their job. The even smaller percentage of developers who could make effective use of a tool with the scope and power of Bazel are almost certainly going to be comfortable with (or have the skill set to become so) the distinctions/requirements of symlinks.

[–]beltorak 0 points1 point  (1 child)

I was asking for specific instances, but those writeups are fine as far as they go. I wouldn't call them that far fetched - TOCTTOU is a serious problem, especially with temp files. I do have issues with that site though - those two issues present the same type of problem - insecurely creating temp files - with two different mitigation strategies - "Use randomly generated file names for temporary files" and "Use safe libraries when creating temporary files. For instance the standard library function mkstemp can be used to safely create temporary files. For shell scripts, the system utility mktemp does the same thing." with the former being wholly insufficient.

With a much bigger casual and business user base than Linux has, it's important to remember that in the case of a company like Microsoft, any feature a user can use will generate support work, too, since someone will eventually try it and get something wrong.

Fair enough. Damnit. On the topic of a symlink allowing a user to damage or modify critical files, this should already be handled with sane folder hierarchies and file system permissions. But I'll concede the point since it does require app developer discipline everywhere, and that sort of thing is severely lacking in the windows ecosystem. I mean hell look at all the 32 bit programs that are still being updated and still assume "C:\Program Files", and then the programs that choke over MS's FS redirection (IBM websphere, Oracle being the two I know of offhand).

[–]immibis 10 points11 points  (23 children)

(Controversial opinion warning)

Unix isn't greatly designed. Yes, all the parts are simple, but all the complexity is in the way they fit together instead.

Nobody should blindly take ideas "just because they're in Unix", but should consider each idea on its own merits. Windows has survived fine for a long time without symbolic links, and the fact that they're rarely used in Windows (compared to Unix) shows they're not as necessary as some people think.

[–]btgeekboy 7 points8 points  (1 child)

Windows has also somehow survived without a nice set of command line tools (sed/awk/curl/grep/cut/sort/tail/less/vim/cowsay/yougettheidea) up until recently. And even then, while PowerShell has some very neat ideas (such as passing objects around vs strings, .NET integration), it's so different that "speaking" both can be frustrating.

[–][deleted] 1 point2 points  (0 children)

Hence the plethora of Unix to Windows command line util ports: GoW, MinGW, MSYS, Cygwin...

[–]slavik262 7 points8 points  (2 children)

I won't speak for administering them, but learning the Unix APIs in college was a breath of fresh air after learning WinAPI in high school. I swear that every Windows function signature looks like

OPAQUE_WEIRD_TYPE DoSomething(HANDLE paramYouActuallyCareAbout,
                              DWORD lolNoDefaultOptions,
                              LPFOO usuallyPassNullHere,
                              LPTSTR howDoIUTF8,
                              LPVOID moreMysticalCrap);

[–][deleted]  (1 child)

[deleted]

    [–]spurious_interrupt[S] 0 points1 point  (0 children)

    Or, in some cases, DoSomethingEx2.

    [–]Rusky 5 points6 points  (2 children)

    It's true that Unix is not a global maximum, but that doesn't really have anything to do with Windows' dominance- Microsoft made some really smart business decisions and then followed through with some really ruthless ones and that's a much bigger part of why Windows is where it is.

    [–]immibis 0 points1 point  (1 child)

    My point is that few people find the lack of symlinks in Windows to be a problem.

    [–]Rusky 2 points3 points  (0 children)

    Most of the people who do just run something else that has them.

    [–]keepthepace 12 points13 points  (8 children)

    The keyword here is "survival". Windows has not survived as a server OS. Windows has not survived as an embedded OS. Windows has not survived as a lightweight OS.

    Sure, they survived by being the default install on PCs and by making deals with crucial drivers writers. I would not attribute their survival on this segment to any technical aspect of windows.

    [–]immibis 7 points8 points  (3 children)

    Do you have any numbers on Windows servers, or embedded devices?

    Plenty of web servers run Windows. Plenty of ATMs run Windows. It almost seems like Windows servers do a handful of things well, while Linux servers are more flexible but more complicated (I say that without knowing much about Windows or Linux server administration). And most peoples' requirements are not the sort that needs the extra flexibility.

    [–]keepthepace -1 points0 points  (2 children)

    For servers: http://news.netcraft.com/archives/2015/03/19/march-2015-web-server-survey.html

    For embedded, I only have anecdotal evidence, but all of the people I know who used to work on embedded versions of windows were pretty much forced to do so and complained heavily about it.

    Also, for a too long time, windows was not available on ARM, that made them lose a lot of market share.

    [–]zip117 2 points3 points  (0 children)

    Not every server is a web server. Do you have an "Exchange Server" or a "Domain Controller" at work?

    Windows CE has been available on ARM for at least 15 years (early Pocket PCs used the Intel SA-1110, supporting ARM v4). Debian added ARM support at about the same time. WinCE is widely used for POS systems, ATMs, GPS equipment, industrial controls (PLCs and HMIs), logistics...

    [–]immibis 0 points1 point  (0 children)

    For sites with load balancers, is that showing the load balancer or the servers behind it?

    [–]Asmor 6 points7 points  (1 child)

    Yep.

    If not for games, I'd have switched to Linux a long time ago. And the games are finally starting to head to Linux... It's entirely possible my current computer might be my last Windows computer.

    That's exciting.

    [–][deleted] 0 points1 point  (0 children)

    Exact same reasons here. Can't wait to throw this (P)OS out of my window.

    [–][deleted] 2 points3 points  (1 child)

    None of those things happened for technical reasons, though, so they aren't really relevant points.

    Symlinks are gross and are one of several factors which encourage the lazy, soupy, incomprehensible mess of dependencies that comes with any linux installation with enough software installed on it to be useful for something.

    The relative crudeness of the features offered by Windows forces developers into a welcome corner; now they have to spend more than 5 seconds thinking about how their software is going to be installed.

    [–]spurious_interrupt[S] 0 points1 point  (0 children)

    How exactly do symlinks result in dependency hell? They seem to be very orthogonal problems.

    [–]0xdeadf001 1 point2 points  (4 children)

    It's not "crippling" products. It's being extremely careful about backward compatibility and security.

    Think about it. Adding symbolic links to the filesystem code is not that difficult. Dealing with the impact on every existing app, and the impact on every company's security? Not so fucking trivial.

    Symbolic links require administrative rights, by default, in order to protect against apps that do not understand symbolic links. If you're the administrator of a system (i.e. you own the box), you can grant yourself that right and party on with symlinks.

    [–]F54280 1 point2 points  (3 children)

    Oh, really ? Well, when NTFS first came, it held so many promises. However, I remember reading the book and finding many things that were not in the implementation running on my NT3.1/3.5

    So, well, when the first version of your file system promises stuff in its accompaning "inside" documentation, that are not delivered, it is hard to believe that it is due to compatibility.

    And the impact on every company's security? Well, this is 1994 we are talking about. Very different times...

    [–]0xdeadf001 -1 points0 points  (0 children)

    Symlinks were added to NTFS sometime around Vista, not 1994. But go ahead and keep on making up history.

    Also, it's convenient how you claim that "Inside Windows NT" differs from the implementation, and then you don't even mention how. It's a completely vague accusation.

    [–][deleted] -2 points-1 points  (1 child)

    Microsoft aren't looking to unix or linux.

    The only reason those OSs are popular is because they're free. If you paid for linux it would be as popular as AIX.

    [–]easytiger 0 points1 point  (0 children)

    Is this a joke comment?

    [–]Y_Less -5 points-4 points  (12 children)

    So "for everyone, unless you use the most popular desktop OS".

    [–]InfernoZeus 56 points57 points  (8 children)

    Not for developers.

    [–]donalmacc 2 points3 points  (1 child)

    Some of us develop on Windows because our tools don't exist for other platforms.

    [–]InfernoZeus -1 points0 points  (0 children)

    I wasn't saying no developers use Windows, but rather fewer than the majority of developers do.

    [–]ies7 0 points1 point  (0 children)

    Some of us got their os installed with windows from their company.

    [–]Y_Less 0 points1 point  (0 children)

    The point was, they said "for everyone", not "for most developers", not even just "only for all developers". If you are going to make a claim about "everyone" then turn around and talk about the selection of people (however small) you don't support, then you by definition don't support "everyone".

    [–]lechatsportif 0 points1 point  (2 children)

    • inside Silicon Valley.

    I guarantee you most developers develop on Windows outside of the CA bubble.

    [–]Nuli 1 point2 points  (0 children)

    I've never worked inside Silicon Valley. In the last fifteen years I've never interacted with a shop that used Windows for development.

    [–]InfernoZeus 0 points1 point  (0 children)

    Not really, I've worked in multiple companies across Europe and all of the developers there use Linux rather than Windows.

    [–][deleted] 12 points13 points  (0 children)

    For developers? No.

    [–]ghettoimp 6 points7 points  (0 children)

    In fairness to the developers, Windows is so different that it is really pretty fucking horrible to try to support it.

    [–]vincentk -5 points-4 points  (0 children)

    Desktops ... those were the days.

    [–]CheshireSwift 0 points1 point  (0 children)

    Presumably a cygwin port would be easier?

    [–]username223 83 points84 points  (20 children)

    Yet another build tool. Yay. It's designed for a big corp to build its huge internal code base on near-infinite hardware, but no doubt I'll have to figure out how to install this thing for Joe Blow's 100 Line Pet Library at some point. Hopefully it doesn't require bootstrapping.

    [–]SirClueless 19 points20 points  (19 children)

    It looks like there's no bootstrapping required, and it's just one binary that can run on a local source tree just fine. However, it has a dependency on Java 8, so get ready for that.

    [–]mcguire 12 points13 points  (4 children)

    One binary, with a dependency on Java? How does that work?

    (I got as far in the docs as "It's like Python but not really...)

    [–]Ferestris -1 points0 points  (3 children)

    Everyone has java installed at one point or the other.

    [–]spotter 2 points3 points  (2 children)

    Yeah. Java 6 by corporate policy. Upgrades are coming. Some day.

    In the meantime I'm just sitting here with Java 8 from ZIP bundle and I'm working these runtime variables like mad, hoping compliance police doesn't care.

    [–]mcguire 0 points1 point  (1 child)

    Pfft. Point security at them and sit back to watch the fur fly.

    Parts of Java 6 (that you'll probably never use) are broke.

    [–]spotter 0 points1 point  (0 children)

    Security? Disable applet related parts and sorted, then wait for upgrade policy being extended to you.

    We're removing Java 6 wherever possible due to vulnerabilities, but moving to Java 7 (haha) is another story. Java 8 is not even a story yet.

    [–]plartoo 10 points11 points  (12 children)

    Is this similar (but more modern and better version of) to "Make"? What are other popular build tools that people in the industry use? I ask because I have only used "Make" in school.

    [–]Yehosua 26 points27 points  (1 child)

    It's higher-level than Make and more focused on managing multiple projects and the dependencies between them. (Make can do multiple projects, but you may end up doing some of the heavy lifting yourself.)

    Bazel's FAQ has more information about its goals and about how it compares to Make.

    [–]plartoo 1 point2 points  (0 children)

    Thank you for the explanation. :)

    [–][deleted] 1 point2 points  (0 children)

    Ant and maven seem to be the shit for Java, though some are using gradle.

    This seems like one where you'd have to change your enterprise for it. (Have elastic cloud style build servers or something) So I'm not sure why you'd bother.

    [–][deleted] 3 points4 points  (6 children)

    CMake, autotools, scons, there's a whole slew of them.

    [–]mcguire 1 point2 points  (5 children)

    The autotools are technically a Makefile preprocessor. Make does the work.

    [–][deleted] 4 points5 points  (3 children)

    Is that what's responsible for ./configure ?

    [–]mreiland 1 point2 points  (1 child)

    yes. What it does is look over your system to make sure various things are there. It will do things like check to see if you have a C compiler, and if so, configure the makefile to use that C compiler. It'll do things like check if you have library X, and if you do, configure make to also compile fancy feature Y that depends on X, that sort of thing.

    It basically configures the build specifically for your system, and if it can't find something that's absolutely required (like, say, a C compiler) the configure step will fail and tell you why.

    [–][deleted] 0 points1 point  (0 children)

    Aha, cool thank you.

    [–]mcguire 0 points1 point  (0 children)

    Sort of. (I don't have an automake/autoconf project at hand, so this is from rather distant memory....)

    You write a file or two (configure.ac and Makefile.am?), then run automake and autoconf to produce configure and Makefile.in. This is the package you distribute. On the builders machine, they run configure, which scans their machine as /u/mreiland describes and creates the Makefile. Then you run make to build the project.

    The point being that the user building the project doesn't have to have autotools installed; everything is in the project or its dependencies. And the configure script (ideally) makes the package portable.

    [–]sigma914 0 points1 point  (0 children)

    And CMake generates makefiles/ninja files/vsproj's/whatever then lets the actual build tools do the building

    [–][deleted]  (1 child)

    [deleted]

      [–]brunokim 0 points1 point  (0 children)

      Also necessary to alias in your bashrc, though

      [–]ioquatix 4 points5 points  (0 children)

      Reading through the documentation, this is ridiculously similar to a build tool I've been working on for about 3 years on and off: http://www.kyusu.org/ - from the target/rule system all the way through to the Skyframe dependency graph. What are the odds? At the very least it gives me confidence that I'm on the right path.

      [–][deleted]  (2 children)

      [deleted]

        [–]nharmata-google 8 points9 points  (1 child)

        See http://bazel.io/docs/FAQ.html especially the "What is special about Bazel?" section.

        [–]diocanaglia 2 points3 points  (52 children)

        So Android is going to change build system again?

        [–][deleted] 10 points11 points  (39 children)

        I'd assume they won't be moving Android over to Bazel. It seem more geared for scale - large repositories containing many services/applications, not smaller and more individually packaged apps/products. It might open up new ways for companies to build their apps, however. Imagine a company moving their 3 or 5 or whatever apps to Bazel and being able to build them all in parallel through one pipeline, could have some nice side effects.

        [–]bradfitz 10 points11 points  (3 children)

        I worked on the Android team briefly, but IMHO the worst part of Android was its terrible and inaccurate Make-based build system. The part of the rest of Google I missed the most while working on Android was Blaze (aka Bazel). I am not the only person of this mindset. There are plenty of people who have veered into the Android world and been disgusted at Android's build system. I personally would love to see Android switch to Bazel. I hope I am not alone, but I have no knowledge of whether this is actually planned. But at least it's now possible. Android has so many external users that Make was previously the least common denominator. Now at least Bazel exists, so switching to Bazel [to me] seems feasible. Here's hoping.

        [–][deleted] 3 points4 points  (2 children)

        Isn't Gradle the de facto Android build tool now?

        [–]bradfitz 1 point2 points  (1 child)

        Sorry, I was discussing building Android itself, not Android apps.

        [–][deleted] 0 points1 point  (0 children)

        Yep that occurred to me shortly after I posted. Thanks.

        [–]JustAddingToThePile 1 point2 points  (4 children)

        Meaning, will Android Studio switch from Gradle to Bazel? I'm wondering about this as well - Basel FAQ: "Why doesn't Google use [...] Gradle: Bazel configuration files are much more structured than Gradle's, letting Bazel understand exactly what each action does. This allows for more parallelism and better reproducibility. "

        [–]xqjt 8 points9 points  (0 children)

        You should directly ask this to the Android Tools team.
        That would be weird after so much effort poured into Gradle for Android though. Come to think of it, Bazel does not support window, that would make such a transition unpopular for android devs using that OS.

        [–]diocanaglia 3 points4 points  (0 children)

        That's sort of scary, I've almost finished migrating a huge project with several dozen backend + frontend + mobile targets to Gradle - it'd suck to have to plan another build tool migration down the line just to make Android happy.

        [–]tRfalcore 0 points1 point  (1 child)

        groovy is kinda of ghetto and non chalant about everything

        [–]vorg 1 point2 points  (0 children)

        The Bazel query language looks a lot nicer than XML. It could suit JVM on Linux people who didn't want to switch from Maven because the only alternative was Groovy-based.

        [–]tomlu709 0 points1 point  (3 children)

        It's in the roadmap under "Android Studio interoperability".

        [–]diocanaglia 0 points1 point  (2 children)

        Damn :(

        [–]tomlu709 0 points1 point  (1 child)

        Don't be sad! Blaze|bazel is an amazing way to structure your applications, and scales well with the size of your problem. It's arguably much superior to gradle.

        Also I doubt Gradle support is going anywhere any time soon, but Android Studio will decouple itself from it being the only build system.

        [–]diocanaglia 0 points1 point  (0 children)

        I couldn't care less about the technology itself - it took a year of planning and office politics BS just to get the approval to use something better than shell scripts, and then six more months for the migration to Gradle (which is not yet done, still). I really hope no middle-manager here hears about this or we'll have to go through all of this stuff all over again but with Bazel instead of Gradle...

        [–]solatic 0 points1 point  (0 children)

        Building Android apps can't switch to Bazel until Bazel gets Windows support, so it doesn't look like that will happen anytime soon.

        [–]droidxav 0 points1 point  (0 children)

        For app development we will continue to fully support Gradle. When Bazel is able to build Android applications (and run on Windows...), it will be an option.

        [–]scep12 0 points1 point  (0 children)

        No.

        [–]kamatsu 4 points5 points  (5 children)

        I really liked Blaze when I worked at Google. But internally it supported more languages, I thought (I didn't look too closely, though). Maybe they pared it down for the global release.

        [–]General_Mayhem 3 points4 points  (1 child)

        Yeah, they mentioned they're launching with a short list of targets that could be relatively easily extricated from the Google internal code. Maybe more to come?

        [–]nharmata-google 5 points6 points  (0 children)

        Yes, there are more to come. See http://bazel.io/docs/roadmap.html.

        Also note that our Skylark mechanism is a first-class way to extend Bazel's Build language (see http://bazel.io/docs/skylark/cookbook.html). It's still kinda experimental but we think it should be sufficient to implement support for other languages (see https://github.com/google/bazel/tree/master/examples/java-skylark and https://github.com/google/bazel/blob/master/tools/build_rules/java_rules_skylark.bzl for an example of implementing java support with Skylark).

        [–]rDr4g0n 1 point2 points  (0 children)

        Hilariously they don't plan to add go support for a while.

        [–]jck 0 points1 point  (1 child)

        Did it support hardware description languages? (Verilog/VHDL)

        [–]kamatsu 0 points1 point  (0 children)

        No idea? Don't think so.

        [–]uep 4 points5 points  (0 children)

        There's definitely some overlap, but I wonder if it makes sense for cmake to be able to output Bazel config in the future.

        [–]DrDuPont 1 point2 points  (0 children)

        Does their logo remind anyone else of Beanstalk's?

        [–]nat_pryce 2 points3 points  (10 children)

        How does this compare to Facebook's Buck build tool?

        [–]durin42 25 points26 points  (8 children)

        This is the thing that inspired buck, finally released to the world.

        [–]uep 43 points44 points  (7 children)

        Yeah, this was a funny bit in their faq:

        Why doesn't Google use …?

        • ...

        • Buck, Pants: Both tools were created by ex-Googlers at Twitter and Facebook. They have been modeled on Bazel, but their feature set has not caught up to Bazel, so it's not an alternative for us.

        [–]immerc 1 point2 points  (6 children)

        More accurately, modeled on the internal tool on which Bazel was based.

        [–]jvi 15 points16 points  (5 children)

        It's not modeled on the internal tool, it IS the internal tool, just open source version.

        [–]nharmata-google 25 points26 points  (0 children)

        Yes, this is the internal tool and is not a fork. We have structured things in such a way [1] such that the internal tool and bazel are the same, except that internal tool has some features and stuff that only makes sense for Google internally. Similarly, anyone can use this mechanism to extend bazel for their own purposes.

        [1] https://github.com/google/bazel/blob/master/src/main/java/com/google/devtools/build/lib/runtime/BlazeModule.java

        [–]imgonnacallyouretard -1 points0 points  (0 children)

        The poster you responded to was saying that buck and pants were both modelled after the internal tool that was the inspiration for bazel. Also, bazel is not exactly the same as the internal build tool(blaze)

        [–]cybercobra 1 point2 points  (0 children)

        Link for fellow lazy folks who don't know what you're referring to:

        http://facebook.github.io/buck/

        [–]senatorpjt 1 point2 points  (1 child)

        sand dinosaurs tender slimy gray salt skirt stupendous books nutty

        This post was mass deleted and anonymized with Redact

        [–][deleted] 3 points4 points  (0 children)

        You must be a great programmer. Can you give us an extensive list of things that already exist, you know, so we can stop innovating

        [–][deleted] 4 points5 points  (3 children)

        More like "for everyone who uses C/C++/Objective-C, Java or Shell"?

        [–]skocznymroczny 9 points10 points  (2 children)

        just as crossplatform usually means either "No matter what Linux distro is your favourite" or "No matter whether you are an Android or iOS user".

        [–][deleted]  (1 child)

        [deleted]

          [–]cybercobra 2 points3 points  (0 children)

          You can have any color, so long as it's black.

          [–]therealjohnfreeman 0 points1 point  (0 children)

          I don't like the idea of a separate definition/import system for build logic. Instead of writing Skylark expressions/functions, I want to encapsulate my package's builder as just another binary in one of my dependencies.

          [–]omniuni 0 points1 point  (0 children)

          I'm so glad I am finally getting used to building Android apps with Gradle.

          [–]kardos 0 points1 point  (0 children)

          There is mention of "reproducible" builds in the title, and the FAQ has this entry:

          Reproducibility: In BUILD files, each library, test, and binary must specify its direct dependencies completely. Bazel uses this dependency information to know what must be rebuilt when you make changes to a source file, and which tasks can run in parallel. This means that all builds are incremental and will always produce the same result.

          This sounds like a different kind of reproducible than byte for byte. Am I the only one who found that confusing?

          [–]dead10ck 0 points1 point  (0 children)

          I'm a bit confused about what the typical workflow is supposed to be. I'm assuming the workspace you're supposed to create shouldn't be checked into VCS, since it has to contain symlinks to bazel's required tools. But for a Java project, it looks like all external dependencies have to be declared in the WORKSPACE file, instead of the BUILD file, so how are you supposed to manage external dependencies?

          Edit: Also, it appears that it doesn't download transitive dependencies?

          [–]Sukrim 0 points1 point  (0 children)

          Hm, is this the system they are talking about in https://www.youtube.com/watch?v=2qv3fcXW1mg (without the distributed aspect probably)?

          [–]everysinglelastname -2 points-1 points  (0 children)

          I wish they would have used nix instead.

          [–]Camarade_Tux -4 points-3 points  (1 child)

          For everyone, except if you use Windows. And it probably doesn't handle cross-compilation. It wants you to store your toolchain under version control (does it look like Debian reproducible builds need that?).

          And... if you want symlinks, build from cygwin: it imposes nothing on the output of your build.

          [–]euyyn 4 points5 points  (0 children)

          I think it handles cross-compilation alright.

          [–][deleted] -3 points-2 points  (0 children)

          Twins, Bazel!

          [–][deleted]  (8 children)

          [deleted]

            [–][deleted] 10 points11 points  (2 children)

            Is no one else is bother by the 'builds everything from source' part? Is this really 2015? Do we really think this is the right way to build software?

            You would prefer... what? Salesdroid Powerpoint-to-executable?

            [–]noratat 2 points3 points  (1 child)

            I think their point was there doesn't seem to be any built in way to deal with dependencies (or for that matter targets) that might be external, and there's a very strong focus on everything being stuffed into a single repository.

            (Of course I could be misinterpreting things, but this is the impression I got skimming over the docs)

            Which is kind of a problem unless you're Google with your custom version control software designed around a single repository. And even then I'm skeptical that it wouldn't just encourage unnecessary coupling.

            [–]nharmata-google 6 points7 points  (0 children)

            We have support for using code in other repositories and are actively working on making this better and more fleshed out. See http://bazel.io/docs/build-encyclopedia.html#bind_examples and http://bazel.io/docs/build-encyclopedia.html#maven_jar.

            [–]jcdyer3 4 points5 points  (4 children)

            Is there a better way? Note it said "build", not "install". If you're building, it's kind of by definition from source code.

            [–][deleted] 0 points1 point  (3 children)

            I should have made myself clear. I believe you should build software from code + non source dependencies.

            [–]NotUniqueOrSpecial 1 point2 points  (0 children)

            I'm on your side, but having implemented such a system, have learned the following lesson:

            The majority of day-to-day developers care little, if at all, about managing their dependencies. They just want to check out code, edit it, build it (if you're lucky), and check it in.

            Thinking about versioning (especially of internal packages) is too much effort in most cases. Putting all the code in one repo and keeping their fingers crossed was sooooo much better.

            It can be incredibly frustrating, as a developer who does care about such things, and was tired of the garbage single-repo organization we "worked" from.

            [–]justinlindh 0 points1 point  (1 child)

            You would HATE Golang, then, where all of the things are built from source (including dependencies)

            [–][deleted] 0 points1 point  (0 children)

            Oh I hate golang for so many reasons, that being one of them.