• Revamping the FreeCAD Project Association’s grant program

    TL;DR: the FreeCAD Project Asso­ci­a­tion stud­ied best prac­tices of oth­er orga­ni­za­tions that have grant pro­grams and is now work­ing towards improv­ing its own program.

    In 2022, the FreeCAD Project Asso­ci­a­tion announced a grant pro­gram and issued sev­er­al grants to peo­ple active­ly con­tribut­ing to the well-being of FreeCAD and its ecosys­tem: to RealThun­der for his work on the topon­am­ing prob­lem mit­i­ga­tion, to Ajinkya Dahale for his work on Sketch­er, and to Adrián Insaur­ralde Ava­l­os for man­ag­ing FreeCAD releas­es. Sev­er­al more grants are in process or are cur­rent­ly being discussed.

    How­ev­er, the orga­ni­za­tion would like to expand the pro­gram and is unsure how to go about it. Here are the key pain points.

    Small pay­outs. The FPA doesn’t have expe­ri­ence man­ag­ing grants, thus so far, we’ve been stick­ing most­ly to “hon­orary” sin­­gle-time $1,000 pay­outs. The orga­ni­za­tion has a much larg­er bud­get than that, but we want to spend mon­ey respon­si­bly and with max­i­mum effi­cien­cy, so we feel that we need a bet­ter plan for man­ag­ing the program.

    Lit­tle inter­est from the com­mu­ni­ty. There have been very few pro­pos­als for grants com­ing from the com­mu­ni­ty. The FPA admin board is not sure why that is the case.

    Lack of clar­i­ty on pro­gram super­vi­sion. On one hand, the FPA would rather issue grants to devel­op­ers who know their way around FreeCAD code, can come up with a sen­si­ble plan, and will exe­cute on it. On the oth­er hand, it’s unclear how many poten­tial con­trib­u­tors match that descrip­tion, plus either way, this would put extra bur­den on main­tain­ers doing code review.

    Thus anoth­er grant was issued to Alexan­dre Prok­ou­dine to study the expe­ri­ence of oth­er orga­ni­za­tions that issue grants to free and open-source soft­ware devel­op­ers. The objec­tive was to find answers to the fol­low­ing questions:

    • What to do to start increas­ing engagement?
    • How to find tal­ent and bring them to the project?
    • If peo­ple think this looks too much like work, do we want to change how it looks or do we find devs who don’t think like that?
    • How do oth­er orga­ni­za­tions and appli­cants struc­ture grants? Too spe­cif­ic or too open in scope? How much speci­fici­ty to do? Is it like GSoC project ideas?
    • Do we do small/medium/large projects?

    To do that Alexan­dre stud­ied what the FPA has done so far with its grant pro­gram and how the pro­gram was com­mu­ni­cat­ed to the FreeCAD community.,He then iden­ti­fied orga­ni­za­tions whose expe­ri­ence could be applic­a­ble, con­duct­ed inter­views and stud­ied what they’ve been doing and why, then sum­ma­rized main take­aways and came up with a list of action­able recommendations.

    You can read the full report on the research here. Let’s briefly dis­cuss its key findings.

    FPA’s activity

    So far, most grants have been more like gifts to peo­ple who were already doing great work for FreeCAD. There was nei­ther plan­ning, nor bud­get esti­ma­tion, and no super­vi­sion was done.

    All pay­outs were $1,000 sin­­gle-time ones, done 100% upfront, no strings attached. Mean­while the FPA accu­mu­lates close to $8K a month and is pre­pared to spend between $50K and $75K a year on devel­op­ment grants and supervision.

    The pro­gram com­mu­ni­ca­tion has been rather scarce so far: very few posts in this blog and on social media, not much dis­cus­sion on the forum. The devel­op­ment fund page has a num­ber of ambi­gu­i­ties that are easy to fix.

    Over­all, the research finds that the FPA “hes­i­tates to go big on its grant pro­gram while hav­ing suf­fi­cient funds to do so”.

    What other organizations do

    The research focused on QGIS, GRASS GIS, Cesium, Blender, Godot, and Open Tool­chain Foun­da­tion, with hon­orary men­tions of Google Sum­mer of Code, Kri­ta Foun­da­tion, Epic Mega­Grants, Python Foun­da­tion, NLnet Foun­da­tion, and Pro­to­type Fund.

    Gen­er­al approach to acquir­ing tal­ent. Most orga­ni­za­tions grav­i­tate towards giv­ing grants to devel­op­ers who have already proven their worth in the com­mu­ni­ty — either by active­ly con­tribut­ing as vol­un­teers or by suc­cess­ful­ly com­plet­ing a GSoC project.

    Rolling sched­ule vs batch­ing sub­mis­sions. There is a strong bias towards batch­ing pro­pos­al sub­mis­sions and mak­ing annu­al runs of the grant program.

    Project ideas. Just one orga­ni­za­tion, GRASS GIS, pro­vides a list of top­ics for poten­tial grant appli­cants. Orga­ni­za­tions most­ly expect appli­cants to be peo­ple with hands-on expe­ri­ence, capa­ble of com­ing up with a sen­si­ble pro­pos­al of their own.

    Paper­work. Pro­pos­als are gen­er­al­ly expect­ed to have a gen­er­al project descrip­tion, expect­ed com­ple­tion time, timeline/milestones, a list of deliv­er­ables, and a bud­get esti­ma­tion. Inter­im reports are encour­aged. A final report is com­mon­ly expect­ed as the last pay­out usu­al­ly depends on it.

    Project super­vi­sion. Orga­ni­za­tions most­ly expect appli­cants to be expe­ri­enced enough to not require much super­vi­sion. Except for GRASS, men­tor­ship is not pro­vid­ed except for the usu­al code review pro­ce­dures or com­mu­ni­ca­tion in chat rooms for developers.

    Scope and size of projects. Orga­ni­za­tions typ­i­cal­ly allow small, medi­um, and large projects even if it only shows through project descrip­tions and allo­cat­ed budgets.

    Pay­out sched­ule. Orga­ni­za­tions most­ly pay 50% before the project and 50% after suc­cess­ful com­ple­tion of the project.

    Pub­lic com­mu­ni­ca­tion. This is one aspect where orga­ni­za­tions dif­fer the most. Some active­ly post about the pro­gram on social media and pub­lish announce­ments and recaps in their respec­tive blogs, oth­ers don’t even have a sin­gle place of entry for peo­ple will­ing to learn more about the program.

    One ques­tion that the research was unable to answer direct­ly based on study­ing oth­er orga­ni­za­tions was how to increase the amount of grant appli­ca­tions. This is in part due to a rel­a­tive­ly small sam­pling in the study, but also because FreeCAD has very spe­cif­ic chal­lenges. How­ev­er, Alexan­dre point­ed out that, so far, there hasn’t been a lot of pub­lic com­mu­ni­ca­tion about the pro­gram. And while this blog posts updates on dona­tions, it’s pos­si­ble that poten­tial appli­cants are most­ly unaware that the FPA does have a sub­stan­tial bud­get for grants.

    What’s next

    Based on action­able rec­om­men­da­tions pro­vid­ed at the end of the report, Alexan­dre will design an updat­ed grant pro­gram and revamp the approach to pub­lic com­mu­ni­ca­tion about it.

    One of the main chal­lenges here is that the FPA is a non-gov­­ern­ing body that can­not direct­ly med­dle into devel­op­ment affairs. There­fore the FPA is inter­est­ed to work with a group of active con­trib­u­tors who are will­ing to spend time review­ing grant appli­ca­tions and doing code review. We’ve just made a post about that to the ‘Devel­op­ers cor­ner’ sec­tion of the forum. If you are inter­est­ed and you think you qual­i­fy, please respond to that post.

  • WIP Wednesday: 27 Sept 2023

    WIP Wednesday: 27 Sept 2023

    This week in FreeCAD development:

    • @yorik con­tin­ues to work on the NativeIFC new doc­u­ment sys­tem (one FreeCAD doc­u­ment = one IFC doc­u­ment), which is almost ready.
    • @obelisk79 has com­plet­ed and is pub­lish­ing his pref­er­ence pack “Open­Dark” to the addon man­ag­er. He’ll then be resum­ing work on his icon theme “Flat Dark” for dark styles to expand beyond Part/PartDesign and Sketch­er WB’s.
    • @paddle is work­ing most­ly on the assem­bly solv­ing sys­tem. He’s also work­ing on some side projects. 
    • I (@chennes) con­tin­ued work on the Topon­am­ing mit­i­ga­tion merge and the new Win­dows LibPack.

    PR stats: In the week from Wednes­day, 20 Sept to Wednes­day, 27 Sept there were 48 pull requests merged, with a total code­base change of +33,938 / ‑24,934 lines — how­ev­er, +20,100/−15,934 of that was an auto for­mat change of the Mesh Work­bench. Not count­ing that for­mat change we had an aver­age merged PR size of +294 / ‑191. We closed 35 Issues, and 22 new Issues were opened.

  • WIP Wednesday: 20 Sept 2023

    WIP Wednesday: 20 Sept 2023

    This week in FreeCAD development:

    PR stats: In the week from Wednes­day, 13 Sept to Wednes­day, 20 Sept there were 47 pull requests merged, with a total code­base change of +10,046 / ‑1,648 lines (not count­ing trans­la­tion changes). That’s an aver­age merged PR size of +214 / ‑35. We closed 17 Issues, and 41 new Issues were opened.

  • WIP Wednesday: 13 Sept 2023

    WIP Wednesday: 13 Sept 2023

    This week in FreeCAD development:

    • @PaddleStroke is work­ing on an assem­bly con­strain­ing sys­tem. He post­ed a draft PR to share advance­ment if any­one wants to fol­low along: https://github.com/FreeCAD/FreeCAD/pull/10611.
    • @yorik is work­ing on NativeIFC, try­ing to make the FreeCAD doc­u­ment a 1:1 alter ego of an IFC document.
    • @kaktus is con­tin­u­ing to clean up Crowdin: This time strings from FreeCAD’s home page are under the micro­scope. The sub­ject of the research is unnec­es­sary end-of-line char­ac­ters in strings to be translated.
    • @wandererfan is wrap­ping up Part Scale imple­men­ta­tion, work­ing on Google Sum­mer of Code UMF test­ing, and work­ing on the cos­met­ic cir­cle command.
    • I (@chennes) am start­ing in on the next phase of the Topo­log­i­cal Nam­ing Prob­lem mit­i­ga­tion project.

    PR stats: In the week from Wednes­day, 6 Sept to Wednes­day, 13 Sept there were 55 pull requests merged, with a total code­base change of +44,100 / ‑33,089 lines (not count­ing trans­la­tion changes). That’s an aver­age merged PR size of +817 / ‑613 (this is a lit­tle mis­lead­ing because sev­er­al of these PRs were large-scale code refor­mat­ting actions, not actu­al code changes). We closed 16 Issues, and 26 new Issues were opened.

  • WIP Wednesday: 6 Sept 2023

    WIP Wednesday: 6 Sept 2023

    This week in FreeCAD development:

    PR stats: In the week from Wednes­day, 30 Aug to Wednes­day, 6 Sept there were 63 pull requests merged, with a total code­base change of +22,244 / ‑15,922 lines (not count­ing trans­la­tion changes). That’s an aver­age merged PR size of +353 / ‑253. We closed 26 Issues, and 30 new Issues were opened.

  • WIP Wednesday: 30 August 2023

    WIP Wednesday: 30 August 2023

    As the new devel­op­ment cycle begins in earnest, there are many projects going on in the FreeCAD world that will soon be mak­ing their way into the devel­op­ment builds:

    • @FlachyJoe final­ly saw the merge of PR 9559 — Sketch­er: Point to Cir­cle Dis­tance Constraints
    • @kaktus is learn­ing about the mech­a­nism to pro­vide trans­la­tion sup­port in code, and has sub­mit­ted sev­er­al PRs to address trans­la­tion bugs
    • @wandererfan is con­tin­u­ing his ongo­ing refac­tor­ing effort, plus adding adjustable sec­tion line length and inves­ti­gat­ing reports of zoom­ing anomalies
    • @mlampert is con­tin­u­ing to work on Cav­a­lier Con­tours POC and its use for Path generation
    • @PaddleStroke is putting the fin­ish­ing touch­es on the first of many PRs relat­ed to the new core Assem­bly work­bench, and also saw the merge of PR 9810 — Sketch­er: Con­strain Contextual
    • @qewer33 con­tin­ues to refine the new Start Page
    • I (@chennes) am (still) build­ing a new Lib­Pack with Qt6 and Python 3.11

    PR stats: In the week from Wednes­day, 23 Aug to Wednes­day, 30 Aug there were 59 pull requests merged, with a total code­base change of +12,713 / ‑6,667 lines (not count­ing trans­la­tion changes). That’s an aver­age merged PR size of +219 / ‑114. We closed 21 Issues, and 42 new Issues were opened.

  • WIP Wednesday: 23 August 2023

    WIP Wednesday: 23 August 2023

    The UI and code cleanup con­tin­ued this week, but the real excite­ment is that work has begun on an inte­grat­ed Assem­bly workbench.

    • @obelisk has pub­lished a pro­posed col­or palette that improves the con­trast of the default theme through­out FreeCAD
    • @sliptonic and the team at Ond­sel are begin­ning their work on an inte­grat­ed Assem­bly workbench
    • @wandererfan is plow­ing through the back­log of PRs and Issues
    • I (@chennes) am build­ing a new Lib­Pack with Qt6 and Python 3.11, and improv­ing the process we use for cre­at­ing new LibPacks

    PR stats: In the week from Wednes­day, 14 Aug to Wednes­day, 23 Aug there were 65 pull requests merged, with a total code­base change of +10,275 / ‑48,812 lines (not count­ing trans­la­tion changes). That’s an aver­age merged PR size of +161 / ‑762 (yeah, that ‑762 is a bit of an out­lier!). We closed 24 Issues, and 26 new Issues were opened.

  • WIP Wednesday: 16 August 2023

    WIP Wednesday: 16 August 2023

    The past week saw devel­op­ers work­ing on a large num­ber of UI improve­ment projects, as well as quite a bit of behind-the-scenes code updat­ing and cleanup.

    • @wwmayer has been work­ing on mod­ern­iz­ing our C++ code­base, bring­ing var­i­ous things up to the C++17 stan­dard (which is our cur­rent target)
    • @obelisk is hom­ing in on an updat­ed default col­or scheme that retains the feel of “clas­sic” FreeCAD, but is bet­ter suit­ed to vision-impaired users
    • @qewer33 has cre­at­ed an improved Start page that is in the PR approval queue now
    • I (@chennes) am work­ing on some trans­la­tion issues, as well as fix­ing some issues with the 0.21 installers.

    PR stats: In the week from Wednes­day, 9 Aug to Wednes­day, 16 Aug there were 52 pull requests merged, with a total code­base change of +6,680 / ‑5,960 lines (not count­ing trans­la­tion changes). That’s an aver­age merged PR size of +128 / ‑115. We closed 43 Issues, and 21 new Issues were opened.

  • Vancouver Hackathon Wrap-up

    Vancouver Hackathon Wrap-up

    As I write this we are just wrap­ping up the FreeCAD Hackathon 2023 in Van­cou­ver, BC. The cof­fee is gone, the lap­top bat­ter­ies are drained, and every­one present (phys­i­cal­ly and vir­tu­al­ly) is wind­ing up their week­end projects. 

    The week­end fea­tured a vari­ety of dif­fer­ent activ­i­ties, rang­ing from pre­sen­ta­tions from Dr. Aik-Siong Koh about his recent work on a new LGPL’ed 3D con­straints solver for assem­blies and from Ajinkya Dahale on his work towards a cus­tom prop­er­ties sys­tem, to audio con­fer­ences via the Dis­cord chan­nel with FreeCAD users and devel­op­ers from across the world, to just a bunch of devs sit­ting around hack­ing on FreeCAD and occa­sion­al­ly ask­ing each oth­er for help or input.

    Major Topics

    Ver­sion 1.0 Release Roadmap. The first order of busi­ness was to dis­cuss the Roadmap to v1.0. The gen­er­al con­sen­sus was that there are four main focus areas that must be addressed before a 1.0 release:

    1. Mit­i­gat­ing the topo­log­i­cal nam­ing problem
    2. Inte­grat­ing a default Assem­bly workbench
    3. Cre­at­ing a uni­fied Mate­r­i­al-han­dling system
    4. Improv­ing the basic user experience

    We also dis­cussed a need to improve ter­mi­nol­o­gy as a sub-focus area for v1.0, which is close­ly tied to item 4. In fact, near­ly all remain­ing dis­cus­sion for the week­end focused on one or more of those four items.

    Assem­bly Work­bench. It came up at FreeCAD Day 2023, it comes up in the forums on a reg­u­lar basis, and it comes up in dis­cus­sions with end users: FreeCAD needs a default, built-in Assem­bly work­bench. It does not nec­es­sar­i­ly have to have every pos­si­ble sort of work­flow, or solve all assem­bly-relat­ed prob­lems, but it should at the least address basic assem­bly tasks. Ond­sel pub­lished a series of blog posts detail­ing that com­pa­ny’s analy­sis of the sit­u­a­tion, and in recent months they have been active­ly work­ing to devel­op one of the core tech­nolo­gies antic­i­pat­ed for that work­bench: a ful­ly 3D con­straint solver with a com­pat­i­ble license. The next order of busi­ness was to decide which of the var­i­ous avail­able paths we intend to follow:

    1. Inte­grate the new solver into @realthunder’s Assem­bly 3 Work­bench, and then inte­grate that exter­nal work­bench direct­ly into FreeCAD. @realthunder seems very enthu­si­as­tic about the new solver, so it seems like­ly that at least the first part of this will hap­pen in very short order.
    2. Inte­grate @zolko’s Assem­bly 4 Work­bench into FreeCAD and extend it to include the solver.
    3. Devel­op a new Assem­bly user inter­face direct­ly in FreeCAD, tak­ing inspi­ra­tion from Asm3 and Asm4 and com­bin­ing those ideas into a sim­pli­fied, stream­lined workbench.

    In gen­er­al it was felt that Assem­bly 3’s user inter­face was too com­plex to be inte­grat­ed on its own, and that Assem­bly 4’s lack of solver pre­sent­ed a sig­nif­i­cant chal­lenge to direct adop­tion. There­fore the planned approach is to cre­ate a new solver user inter­face in FreeCAD that pro­vides sim­pli­fied access to the most com­mon assem­bly tools, and that pro­vides a stan­dard API for assem­blies that exter­nal work­bench authors can use to be com­pat­i­ble with both that work­bench and each other.

    User Inter­face Col­ors. FreeCAD’s default back­ground gra­di­ent and the col­or scheme of var­i­ous UI ele­ments present a near­ly unus­able inter­face for those with col­or vision defi­cien­cy, and the low con­trast inher­ent in the cur­rent design presents some visu­al chal­lenges even for those with­out vision impair­ment. A group of devel­op­ers and users met (vir­tu­al­ly) to dis­cuss the ongo­ing research project of theme devel­op­er @Obelisk, who is attempt­ing to cre­ate both a set of new light and dark themes based on exist­ing work from a num­ber of oth­er theme authors, as well as to adapt the col­or scheme of the “clas­sic” FreeCAD expe­ri­ence to be more friend­ly to every­one. While we don’t expect this work to be with­out con­tro­ver­sy, hav­ing a sol­id tech­ni­cal basis for mak­ing these sorts of deci­sions will help us to move for­ward with the project.

    Inte­grat­ing a Rust Library. A very appeal­ing project from the Rust world led to a dis­cus­sion about the fea­si­bil­i­ty of inte­grat­ing a Rust library into our code­base for use in the Path work­bench. There are a vari­ety of pros and cons relat­ed most­ly to pack­ag­ing issues (and no, we did not dis­cuss rewrit­ing FreeCAD in Rust!) but the over­all con­sen­sus was that the upside of the advanced library out­weighed the down­side of pack­ag­ing com­plex­i­ty, and that it is worth attempt­ing in this lim­it­ed appli­ca­tion to see how it goes.

    Topon­am­ing Next Steps. @JohnAD, Ond­sel Devel­op­er and team lead for the TNP mit­i­ga­tion project worked with var­i­ous devel­op­ers to work out what the next phase of that project looks like, and pub­lished the next set of steps we need to under­take. Things get excit­ing right about now, as we actu­al­ly begin using the sys­tem to track ele­ment his­to­ry. Help want­ed! If you are inter­est­ed in learn­ing what this TNP thing is all about, and want to assist in the project, drop me a line and I’ll get you an invite to the group Telegram chat.

    Task pan­el, tree view, and steal­ing focus (oh my!). At the FreeCAD Day meet­up at FOSDEM in Brus­sels ear­li­er this year, a con­sis­tent user com­plaint had to do with inter­ac­tions between the Task Pan­el, the Tree View, and var­i­ous ways that things could go awry when using them. That con­tin­ued to be an active area of dis­cus­sion at the event this week­end, with var­i­ous pro­pos­als for help­ing to mit­i­gate these sorts of prob­lems. There were a num­ber of pro­posed solu­tions, but be on the look­out in the com­ing months for PR’s relat­ed to a “Speed Bar.”

    And more! Dozens of oth­er small­er dis­cus­sions cropped up dur­ing the event: switch­ing from tool­bars to a rib­bon, improv­ing the doc­u­men­ta­tion, clean­ing up the track­er, not mov­ing our tool­bars around(!!), and improv­ing the nam­ing of things, just to name a few. 

    Thanks to every­one who attend­ed, in per­son and vir­tu­al­ly. I hope that we can have more of these mee­tups, across the globe, as FreeCAD devel­op­ment moves for­ward. We don’t have any offi­cial dates yet for FOSDEM 2024 (like­ly ear­ly Feb­ru­ary), but you can be assured that FreeCAD devel­op­ers and users will cer­tain­ly coor­di­nate a meet­ing around that event. I have heard of a cou­ple of oth­er groups look­ing to plan events: if you are inter­est­ed, please reach out to the FreeCAD Project Asso­ci­a­tion — fund­ing is available!

  • WIP Wednesday: 9 August 2023

    WIP Wednesday: 9 August 2023

    Wel­come back to WIP Wednes­day! After a short hia­tus while we pre­pared for the 0.21.0 release, we’re back out of the fea­ture freeze, and FreeCAD devel­op­ment con­tin­ues apace. Actu­al­ly, it’s accel­er­at­ing, and fast! We’re still work­ing through the PR back­log that built up over the freeze, but expect to make major progress dur­ing the FreeCAD Hackathon this Fri­­day-Sun­­day.

    Please note that we expect the mas­ter devel­op­ment branch to expe­ri­ence some slow­downs, increased mem­o­ry con­sump­tion, and prob­a­bly some oth­er tem­po­rary regres­sions going for­ward. This is due in part to the plans for inte­grat­ing the Topo­log­i­cal Nam­ing Prob­lem (TNP) mit­i­ga­tion strat­e­gy into mas­ter, but also in part to the accel­er­at­ed pace of devel­op­ment. If you choose to use a dai­ly or week­ly devel­op­ment build, please back up your data reg­u­lar­ly.

    Over the past weeks:

    • wwmay­er has been work­ing on some C++ code modernization
    • Pad­dle­Stroke reor­ga­nized the pref­er­ence page fold­er structure
    • Con­nor­War­rell opti­mized the Quan­ti­tySpin­Box reg­u­lar expressions
    • I (chennes) worked on get­ting the Snap updat­ed to Ubun­tu 22.04, and devel­op­ing a new Lib­Pack for Win­dows based on Qt6.5 and Python 3.11.
    • Plus hun­dreds of oth­er items: check the Pulse for details!

    PR stats: In the week from Wednes­day, 2 Aug to Wednes­day, 9 Aug there were 55 pull requests merged, with a total code­base change of +14,550 / ‑13,172 lines (not count­ing trans­la­tion changes). That’s an aver­age merged PR size of +269 / ‑244. We closed 16 Issues, and 47 new Issues were opened.