How many man hours would FreeCAD need to reach feature parity with SolidWorks/SolidEdge?

Here's the place for discussion related to coding in FreeCAD, C++ or Python. Design, interfaces and structures.
abdullah
Posts: 3583
Joined: Sun May 04, 2014 3:16 pm

Re: How many man hours would FreeCAD need to reach feature parity with SolidWorks/SolidEdge?

Postby abdullah » Sat Aug 22, 2020 7:03 am

mumbricht wrote:
Fri Aug 14, 2020 11:49 am
I'm a startup CEO and we need CAD for our part and assembly designs. I'm a Linux and FOSS fanatic, but in its current state, FreeCAD is insufficient for our needs. I've bitten the bullet and decided to have our server Linux based, and our clients Windows based.

I would really like to go back to a full Linux engineering stack, but the only way for that to happen is for an enterprise level parametric CAD system to be made for Linux. FreeCAD works, it's fully parametric, but the interface is too clunky for us to use effectively. I think it also lacks a couple critical features (double-curve filets for wing fairings) that we need. (Full disclosure: my CAD skills are pretty rudimentary and I'm going off of what my staff is saying)

The question I have is, how much money would we have to dump on the FreeCAD team to make something that compares favorably to SolidEdge/SolidWorks?

As stated in the wiki, this is a completely volunteer project. My intuition would say that it's about .75 Million/yr to get the core design team to work fulltime + the admin staff required. That's the equivalent of ~40 Catia/NX licences. That makes it more than most companies spend on their CAD suite, but about a dozen companies pitching in their CAD budget would more than cover the costs. That said, I design aircraft, not software so I'm not familiar with the scope of this kind of project, or the particular difficulties of a parametric CAD software.

Anyone have a guess as to how realistic this idea is?
With the multiple replies to this topic, you may probably already have come to the conclusion that we have very diverse community (and I meant this positively). Diversity in interests and specialisation. Probably relating to this diversity, is the fact that FreeCAD was designed for flexibility, making it relatively easy to extend to cover virtually any technology supported by physical entities (mechanics, architecture, RF simulations, FEM, ...). This is the main tangible asset of FreeCAD which makes FreeCAD an integrated solution which can be easily leveraged given that it is also designed for automation (mainly using Python). Extensibility, Integration and Automation.

While I have extreme sympathy for people being determined to support FOSS out of pure philanthropic reasons (and I wish I had a couple of millions per year for such philanthropic activities), companies are there to make money. In the good sense (as opposed to questionable financial mechanisms), this is by creating value. Creating value many times, and as far as I understand this is your case, means developing technology further. With this in mind, rather than "how to make FreeCAD be AAA brand", a simpler first question I think you should ask yourself is: will my project benefit from the flexibility in extensibility/automation that (only) FreeCAD can afford me?

This is the "million dollar question", because if you can actually benefit from this, you need at least one "people" preferably employed by yourself and integrated in your core aircraft developing team that can actually understand what each of your multidisciplinary highly skilled professionals needs and can extend FreeCAD to make them more productive and/or help them find solutions for the individual challenges they face. I believe that this is the most misunderstood competitive advantage of FreeCAD. It allows you to extend and automate within a single integrated environment.

Now, if you can leverage this, your main new problem is: how do I manage to hire appropriate people for this task? Hiring appropriate people is difficult. What profile you hire depends too on how many people you are hiring. If you are hiring a single person, you need somebody with experience in Python, a good understanding of software architecture design and a marked ability to problem solving. Knowledge of c++ is a plus.

If you cannot reasonably leverage extensibility, integration and automation in your project (you replied "no" to the question), then the rationale for the decision making gets much more complicated. I think it is not reasonable to plan to use FreeCAD with the features that FreeCAD might have in the future if other alternative software packages do have these features today (unless they have other drawbacks that outweigh these advantages). You may decide to continue using your current proprietary software while getting a developer to code your needs and defer our decision to the future FC is there.

If you decide to do this, you may hire a developer or contact current developers that might work as contractors. I know Yorik has done paid work before. While he is an architect and that may sound a little far away from aircraft designing, he is a highly competent programmer (not only but specially when it comes to Python) with a wide general knowledge in science and very familiar with FreeCAD architecture (he is one of the 3 guys whose name is listed when FreeCAD starts). He is the kind of person that finds solutions for problems. FWIW, he has my full endorsement (if that has any value to you). Another option is Realthunder. While he is not a core developer of FreeCAD as of now, he has a good knowledge of c++ and is able to tackle complex problems. He contributes a quite a lot of code to FreeCAD and even maintains its own fork at the same time. For what I see he is hard working. I am not aware of other developers that are or might be for hire, but if you are interested you may post in the jobs subforum and see if somebody else replies there.

Left for the end is the idea of several companies funding FreeCAD. I do like this idea, but there is no FreeCAD entity today to fund. Being FreeCAD a Community, I am not sure of the growth model that it could follow. It is not as easy as putting a couple of millions on the table of a "FreeCAD CEO", but may also not require a couple of millions. From my experience, as a simplified model, I think that "core" Developers of FreeCAD are created by a combination of merits (code contributions) and values (love for FreeCAD, attitude towards helping others, integration in the Community). I have several times held the view that "money tends to spoil the latter", but I admit that it is easy to say that with a full stomach (people do need money to live). If some core developers could make a living out of working for FreeCAD and this were known, it is reasonable to expect that more new developers would be willing to contribute, which would reasonably lead to more future core developers, thereby increasing the ability to review PRs and have contributions merged and at the same time increasing the visibility of whom to hire by companies (it is basically delegating part of the candidate selection process to the Community while keeping the direct funding). I think this could work, but take it with a grain of salt as it is just an idea.

One last thing, if you finally decide to pay for development, no matter who you hire, or pay as a contractor in whatever country or via Patreon, or what you are paying him/her for exactly, there is one single thing that he or she should do to support both FreeCAD and the future of your investment: Interact with this Community.

You might have realised I underlined tanglible in "tanglible asset" above. This is because the most valuable asset of FreeCAD is intangible, it is its community.

Early involvement with the Community in the development of new features is the best way to arrive to mergeable contributions and generally improves the end product in the process. Merged contributions bring value to you as they would be extensively tested and debugged and will be integrated with all other contributions coming from elsewhere.

Now good luck arriving to a right decision!! :)
User avatar
fosselius
Posts: 365
Joined: Sat Apr 23, 2016 10:03 am

Re: How many man hours would FreeCAD need to reach feature parity with SolidWorks/SolidEdge?

Postby fosselius » Tue Aug 25, 2020 11:00 am

First off, great post Abdullah! you got my vote for FreeCAD president ;)

It would be good if active developers started a "pro support" spinoff company that is easier for companies to interact with, Like Seth & Wayne did for KiCAD with https://www.kipro-pcb.com/ , this removes some of the potential problems with foundation/non profit/community control kind of organization.

In a corperate perspective its probably mutch better than supporting individuals through liberpay/patreon etc.

"KiPro brings additional developer resources to the KiCad project. Our time is driven by the features most requested by our active subscriber base. A KiPro subscription adds your needs and priorities to our list.

We don’t direct the KiCad development. We make it happen faster"
yorik wrote:
wmayer wrote:
kkremitzki wrote:
realthunder
Posts: 1810
Joined: Tue Jan 03, 2017 10:55 am

Re: How many man hours would FreeCAD need to reach feature parity with SolidWorks/SolidEdge?

Postby realthunder » Wed Aug 26, 2020 1:28 pm

fosselius wrote:
Tue Aug 25, 2020 11:00 am
It would be good if active developers started a "pro support" spinoff company that is easier for companies to interact with, Like Seth & Wayne did for KiCAD with https://www.kipro-pcb.com/ , this removes some of the potential problems with foundation/non profit/community control kind of organization.
Thanks for pinging. Just gone through this thread. Lots of @, but you're the first to ping. And yeah, 'pro support' idea sounds good. I actually wanted to make a living like that, once FreeCAD is matured and popular enough for 'pro use'. Maybe it can happen earlier, too.

mumbricht wrote:
Fri Aug 14, 2020 11:49 am
I'm a startup CEO and we need CAD for our part and assembly designs. I'm a Linux and FOSS fanatic, but in its current state, FreeCAD is insufficient for our needs. I've bitten the bullet and decided to have our server Linux based, and our clients Windows based.
Hello mumbricht, like many have already pointed out, you'll have to be more specific about what you (or your staff engineers) think is lacking in FreeCAD. Since you mentioned you are designing airplanes, I guess maybe you want better Curve/Surface workbench? I have worked on assembly quite a bit. Granted that at the current state, it's just a proof of concept, and is definitely not up to the task for assembling a plane. But I consider that the concept has been proven (more or less), and by converting the Python code to C++, it is not entirely impossible.

I have many other new features implemented in my branch. You can download from here and give it a try. You'll feel like you've never used FreeCAD before. Some highlight of the features,

Link
Assembly workbench
Topological naming
Expression/Spreadsheet improvement
Configuration table
Sketch new features, turn on subscripts when watching.
Overlay UI
Pie menu
PartDesign improvement
Hidden draw style, and hidden face selection,
Shadow rendering

And there are many more features and improvements scattered around. Some are not so obvious to an end user, but yet significant, such as document recomputation optimization, so that, for example, Spreadsheet editing does not trigger unnecessary recompute even if the same sheet is referenced by every geometry feature for parameterization. On top of everything I have added or changed, I still keep my branch of FreeCAD as much compatible as possible with the upstream.

I work as a software contractor, so yes, I am open for hire. But I prefer much more of a sponsorship type of thing, so that I can have more freedom of choosing what to work on. I usually don't list out road map and stuff. I do make plans in my mind, but it is always changing. And since I work alone (at least for now), there is no practical need to lay it out in details. But to (sort of) answer your questions, and maybe for future fund raising, a proper road map is inevitable. So, here is my 'current' road map for future development.

Rework on 3D rendering

3D rendering in FreeCAD is arguably the most limiting factor of handling large scale assembly. Because it is using an aging Coin3D library that has effectively stopped development since 2007. Just think about how AAA games 15 years ago looked like and compare to, say, games 3 years ago, and you'll get some idea on how big the limiting factor is.

This is what I am working on right now. I'll keep using Coin3D library for scene building and interaction, which ensures backward compatibility, and rewrite only the OpenGL rendering part. I will be using new features from OpenGL 3 and 4 for more efficient multi-instance drawing, which is particularly suitable for my Link feature. That would be the first stage. And because the instance drawing requires the use of custom shader, as a bonus, I will take the opportunity to start adding support for more realistic material rendering and various graphics effects, like shadow, ambient occlusion, reflection, etc.

For the second stage, which may or may not directly follow stage one in terms of development time, I plan to implement more GPU based techniques for large scene rendering, such as GPU culling, and GPU LOD.

I take render engine design from other software for references, such as Blender and Godot. I will probably add support for user shader scripts as well in later stages, but the priority will be to improve rendering performance for large scene.

PartDesign multi body support

This is the part that I should be working on right now, according to my 'previous' road map. But then I got hooked to 3D graphics lately, so it is pushed back.

Animation core support

Extending the current ExpressionEngine to provide functions for animating other properties. A dedicated workbench with timeline editor and shape caching is planned for later stages.

3D editing, push and pull style

I plan to implement a 3D label that can be easily attached to various geometry elements, can be manipulated in 3D view, and drive (or be driven by) feature properties/parameters. And I'll use that as the base tool to enable 3D editing for most of the Part/PartDesign features.

GD&T

Using the same 3D label above, implement GD&T support in Part workbench, with STEP import/export.

TechDraw next gen

I know there are a lot going on in current TechDraw development, so the plan for a next gen TechDraw of mine is not settled yet.

Nevertheless, here is my idea, which is quite different from what the current TechDraw is doing. I plan to reuse the 3D rendering for 2D purpose, coupled with the new 3D label I planned. The user can simply attach labels in 3D view, and then create one or more dynamic viewport in the draw sheet with proper drawing style (such as my hidden line style), and use it as 2D view. This is not only a workaround of the problematic OCC projection API, but is also much faster. My rendering rework will make it easy and efficient to render the same scene in different views and use the result as texture/image for various purpose. You can easily achieve effects in those SolidWorks TechDraw video, such as color rendering, live rotate/slice and drag to create a new view, etc. Plus, there is no need to create yet another geometry object system, like what the current TechDraw is doing.

But of course, projection will be used eventually, in various other places too, not limiting to TechDraw. I plan to work on that as well, at least make it work with my topo naming scheme.

Physics/Simulation engine

Create a new workbench for Physics/Simulation purpose, by wrapping some existing open source engine, such as Chrono.

Integrated assembly workbench

That would be to translate my current Python asm3 workbench to C++. The main obstacle is to find a license compatible constraint solver, as the current SolveSpace solver I used is under GPL. Maybe there is some solver usable from Chrono. I can write my own if I have to. And of couse, hook my assembly workbench with the physics engine.

Direct editing support

I like SolidEdge's idea of synchronous feature very much, and I certainly want to try to emulate it in FreeCAD somehow. I guess they implement it using a rule based system to identify design intents, such as symmetric, coplanar, etc. Then apply the rules to the editing geometry and sibling parts, translate the intents to constraints and feed to a solver (can probably reuse the assembly solver) to guide face movements. At the same time, the face movement will feed back to the rule base system to identify new intents. And based on the final positioning of the face, use the CAD kernel to modify the shape. The key part is to come up with a good rule based system. Similar rules can be applied to assembly as well, just like SolidEdge can infer constraints from imported 'dumb' assembly. I expect this to be a highly complex feature and only have plan for feasibility study.

Web support

SolidWorks has this function to export the project to web format so that it can be viewed using a web browser. FreeCAD can export to VRML, but we all know that it's not quite the same thing, especially if you have watched any of the SolidWorks demo. I was quite amazed as to how they have done it. Now I know, because Godot, the game engine, can do this. It's entire engine can be compiled to WebAssembly (wasm), and ran from a web browser.

In fact, I've been paying attention to wasm for quite some time now. I know that both Qt and OCCT can be complied to wasm, but didn't know how to do it with Coin3D. And now that there is a reference implementation out there, I feel more confident that this can be done, that one day it will be possible to run the entire FreeCAD inside a browser. But for starter, let's make a web viewer first.

Product data management

I don't have anything concrete planned for PDM yet. I just know that it is a must for 'pro' use. I have already done some core work to better prepare FreeCAD for some external version control/project management system. Will see what I can do in the future.


There is really no way I can put out a time frame for all these plans. A 'very' rough estimate would be 2 to 3 years if I work alone in full time. The estimation varies depending on lots of factors, like my commitment, if I can get help from others, or maybe some other interesting ideas/feature requests popping up along the way.
Try Assembly3 (latest version 0.11) along with my custom build of FreeCAD at here.
And if you'd like to show your support, you can donate through patreon, liberapay, or paypal
ezzieyguywuf
Posts: 656
Joined: Tue May 19, 2015 1:11 am

Re: How many man hours would FreeCAD need to reach feature parity with SolidWorks/SolidEdge?

Postby ezzieyguywuf » Wed Aug 26, 2020 1:42 pm

realthunder wrote:
Wed Aug 26, 2020 1:28 pm
But then I got hooked to 3D graphics lately
This same thing happened to me recently 😂

Anywho, not sure how far along your OpenGL journey you are, but if you're just getting started I can recommend some resources.
User avatar
Kunda1
Posts: 8772
Joined: Thu Jan 05, 2017 9:03 pm

Re: How many man hours would FreeCAD need to reach feature parity with SolidWorks/SolidEdge?

Postby Kunda1 » Thu Aug 27, 2020 3:23 am

ezzieyguywuf wrote:
Wed Aug 26, 2020 1:42 pm
This same thing happened to me recently 😂

Anywho, not sure how far along your OpenGL journey you are, but if you're just getting started I can recommend some resources.
Please keep the thread on topic. Feel free to start a new thread.
Want to contribute back to FC? Checkout:
#lowhangingfruit | Use the Source, Luke. | How to Help FreeCAD | How to report FC bugs and features
keithsloan52
Posts: 1450
Joined: Mon Feb 27, 2012 5:31 pm

Re: How many man hours would FreeCAD need to reach feature parity with SolidWorks/SolidEdge?

Postby keithsloan52 » Thu Aug 27, 2020 4:29 am

Rework on 3D rendering

3D rendering in FreeCAD is arguably the most limiting factor of handling large scale assembly. Because it is using an aging Coin3D library that has effectively stopped development since 2007. Just think about how AAA games 15 years ago looked like and compare to, say, games 3 years ago, and you'll get some idea on how big the limiting factor is.

This is what I am working on right now. I'll keep using Coin3D library for scene building and interaction, which ensures backward compatibility, and rewrite only the OpenGL rendering part. I will be using new features from OpenGL 3 and 4 for more efficient multi-instance drawing, which is particularly suitable for my Link feature. That would be the first stage. And because the instance drawing requires the use of custom shader, as a bonus, I will take the opportunity to start adding support for more realistic material rendering and various graphics effects, like shadow, ambient occlusion, reflection, etc.

For the second stage, which may or may not directly follow stage one in terms of development time, I plan to implement more GPU based techniques for large scene rendering, such as GPU culling, and GPU LOD.

I take render engine design from other software for references, such as Blender and Godot. I will probably add support for user shader scripts as well in later stages, but the priority will be to improve rendering performance for large scene.
Have been following with some interest NVIDIA's possible purchase of ARM and came across this
CUDA-VMD.png
CUDA-VMD.png (156.16 KiB) Viewed 566 times
Wonder what Graphics kernel if any VMD uses https://www.ks.uiuc.edu/Research/vmd/
User avatar
mfasano
Posts: 102
Joined: Wed Apr 11, 2018 12:31 pm

Re: How many man hours would FreeCAD need to reach feature parity with SolidWorks/SolidEdge?

Postby mfasano » Thu Aug 27, 2020 3:03 pm

realthunder wrote:
Wed Aug 26, 2020 1:28 pm
Physics/Simulation engine

Create a new workbench for Physics/Simulation purpose, by wrapping some existing open source engine, such as Chrono.
I do not mean to Highjack this thread, but I have been working on a workbench using MBDyn. The discussion of the project is below.
https://forum.freecadweb.org/viewtopic. ... &start=110

I thought about Chrono. They have python bindings for their code.
User avatar
Kunda1
Posts: 8772
Joined: Thu Jan 05, 2017 9:03 pm

Re: How many man hours would FreeCAD need to reach feature parity with SolidWorks/SolidEdge?

Postby Kunda1 » Thu Aug 27, 2020 3:09 pm

mumbricht wrote:
Fri Aug 14, 2020 11:49 am
I'm a startup CEO and we need CAD for our part and assembly designs. I'm a Linux and FOSS fanatic, but in its current state, FreeCAD is insufficient for our needs....

The question I have is, how much money would we have to dump on the FreeCAD team to make something that compares favorably to SolidEdge/SolidWorks?

As stated in the wiki, this is a completely volunteer project. My intuition would say that it's about .75 Million/yr to get the core design team to work fulltime + the admin staff required. That's the equivalent of ~40 Catia/NX licences. That makes it more than most companies spend on their CAD suite, but about a dozen companies pitching in their CAD budget would more than cover the costs. That said, I design aircraft, not software so I'm not familiar with the scope of this kind of project, or the particular difficulties of a parametric CAD software.

Anyone have a guess as to how realistic this idea is?
After reading some of the responses, care to share what your thoughts/impressions are?
Want to contribute back to FC? Checkout:
#lowhangingfruit | Use the Source, Luke. | How to Help FreeCAD | How to report FC bugs and features
mumbricht
Posts: 5
Joined: Fri Aug 14, 2020 11:39 am

Re: How many man hours would FreeCAD need to reach feature parity with SolidWorks/SolidEdge?

Postby mumbricht » Wed Sep 02, 2020 10:17 am

Kunda1 wrote:
Thu Aug 27, 2020 3:09 pm
After reading some of the responses, care to share what your thoughts/impressions are?
So reading Realthunder's roadmap looks quite compelling. But I still think that fixing the kernel issues is the best first step. When we have the resources to start doing this project seriously, we will reach out to open CCD directly to fix the issues there.
Quaoar wrote:
Wed Aug 19, 2020 2:15 pm
mumbricht wrote:
Wed Aug 19, 2020 11:52 am
... the best place to start would be at the kernel, which currently lacks thread protection, making multi-threading difficult or impossible.
Do not trust people speculating on parallelism and/or GPU magic. That's bullshit. Parasolid outcompetes any other kernel in a single-threaded mode. Lack of parallelism is definitely not the main problem (I'd say it's not a problem at all) in OpenCascade.
I am sceptical of this claim. Unless there is some aspect of NRUBS that makes it difficult to parellelize that I'm unaware of, I think that multi-threading is easier than getting openCCD to the same performance benchmarks as Parasolid. The resources just aren't there. But I'm not a software engineer so I probably shouldn't be talking.

Anyway, on our end we will start having a lot more time and resources to dedicate to this in March. But my overall impression is that this is a realistic project.
chrisb
Posts: 29060
Joined: Tue Mar 17, 2015 9:14 am

Re: How many man hours would FreeCAD need to reach feature parity with SolidWorks/SolidEdge?

Postby chrisb » Wed Sep 02, 2020 10:26 am

Thanks for reporting back.
A Sketcher Lecture with in-depth information is available in English, auf deutsch, en français, en español.