# OCaml Users Survey: 2023 vs 2026 Question Differences **2023: 57 questions | 2026: 59 questions** ## Summary of Changes - **New sections:** AI/LLM Usage (4 questions), Debugging & Profiling (3 questions) - **New standalone questions:** Community size preference (Q17), CPU architectures (Q25), Documentation tools (Q37), Tooling feedback (Q38), Package repository feedback (Q47) - **Removed questions:** 10 questions removed - **Net change:** +2 questions --- ## New Sections ### Community Growth (Q17) New question about community size preferences. ``` Q17. Regarding the size of the OCaml community, I wish the community was... - Smaller - The current size is about right - Bigger - A lot bigger - I have no opinion ``` *Justification: Understanding whether the community wants growth helps inform outreach and adoption strategies.* ### AI/LLM Usage (Q18-Q21) Four new questions about AI/LLM tool usage for OCaml development. ``` Q18. Do you use AI/LLM tools for OCaml development? Q19. Which AI/LLM tools do you use with OCaml? Q20. What do you use AI/LLM tools for in OCaml development? Q21. Anything else you want to say on AI/LLM tools or use for OCaml development? ``` *Justification: AI tools have become prevalent in software development since 2023; understanding adoption patterns helps prioritize tooling investments.* *Implementation note: This section can be made conditional in Google Forms. If Q18 = "No, ..." options, questions Q19-Q21 can be skipped.* ### CPU Architectures (Q25) New question about target CPU architectures. ``` Q25. Which CPU architectures do you target? - x86_64 - ARM64 (aarch64) - ARM32 - RISC-V - POWER - S390 - I don't know - Other ``` *Justification: Provides data for compiler team resource allocation, especially for RISC-V demand and ARM32 relevance (Android Wearables/TV).* ### Debugging & Profiling (Q39-Q41) Three new questions focused specifically on debugging approaches and profiling tools. ``` Q39. What debugging approach do you primarily use? Q40. Which debugging and profiling tools do you use? Q41. What are your biggest challenges with debugging/profiling? ``` Q40 includes: ocamldebug, earlybird, gdb/lldb, ppx_minidebug, Logs library, perf, eBPF (Linux), DTrace (FreeBSD/macOS), memtrace, Landmarks, magic-trace. *Justification: 2023 free-text responses frequently cited debugging difficulties as a pain point, particularly lack of good debugging for native executables.* ### Documentation Tools (Q37) New question about documentation tooling. ``` Q37. Which documentation tools do you use? - odoc - ocamldoc - None - Other ``` *Justification: Understanding documentation tool adoption helps prioritize ecosystem investments.* --- ## Removed Questions | 2023 Q# | Question | Reason for Removal | |---------|----------|-------------------| | Q18 | How large was the largest OCaml project you contributed to? | Low actionability; project size data didn't yield actionable insights | | Q27 | How do you feel about the compiler's every-six-month release schedule? | Low actionability; responses consistently skewed to "just right" | | Q31 | Where do you host your software sources? | Not OCaml-specific; GitHub dominance (87%) made this uninformative | | Q35 | If you deploy on the web, what platform(s) are you using? | Low response rate; most respondents don't deploy web applications | | Q38 | OCaml tooling provides a comfortable workflow for me | Consolidated—Q45 (tooling confusing to newcomers) captures the key insight | | Q40 | What would you change? [about tooling] | Replaced with specific text field Q38 ("What would you change about OCaml tooling?") | | Q42 | What would you change? [about package repos] | Replaced with specific text field Q47 ("What would you change about OCaml's package repositories?") | | Q46 | OCaml libraries are stable enough for my needs | 69% satisfaction in 2023; stability is not a priority concern | | Q48 | Software written in OCaml is easy to maintain | 74% agreement in 2023; maintainability is a known strength, not a concern | | Q51 | If I was granted up to three new language features... | Effect handlers shipped in OCaml 5; question is outdated | --- ## Modified Questions ### Q3. Usage context - **Added options:** "For teaching", "For work, in open source" - *Justification: 2023 responses showed ~10 teaching-related "Other" entries; open-source work (e.g. funded maintainers) is distinct from industry or hobby* ### Q4. OCaml usage at workplace - **Added option:** "I don't use OCaml at work" - *Justification: Respondents who are employed but only use OCaml for personal projects had no appropriate option* ### Q8. Other programming languages - **Added:** Zig - *Justification: Growing language in the systems/FP space* ### Q9. Software types developed - **Added:** "Command-line tools/utilities", "Games", "Mobile applications (Android/iOS)" - *Justification: 2023 "Other" responses showed CLI tools and Games as common categories; mobile development is present in Q10 domains but was missing here* ### Q11. How did you first hear about OCaml? - **Changed:** From select dropdown to text field - *Justification: 2023 showed diverse discovery paths; free text captures nuance better* ### Q15. Community interaction platforms - **Added:** Bluesky, Telegram, "Local meetups / user groups" - **Changed:** "X (formerly Twitter)" → "X / Twitter" - *Justification: Platform evolution since 2023; IRL meetups were missing from options* ### Q23. Development platforms - **Added:** WebAssembly - **Added clarification:** "(Your development machine, not cross-compilation targets.)" - *Justification: 2023 "Other" responses included WebAssembly; clarification avoids confusion with cross-compilation targets* ### Q24. Target platforms - **Added:** "Web/Browser (via js_of_ocaml or Melange)", WebAssembly, "Unikernels (MirageOS)" - *Justification: 2023 "Other" responses included these; WebAssembly support has improved; Melange is now a major web compilation target alongside js_of_ocaml* ### Q26. Language implementations - **Added:** OxCaml - *Justification: OxCaml (Jane Street's OCaml fork) is publicly available and gaining visibility* ### Q27-Q28. Compiler versions - **Changed:** Collapsed old versions (4.02-4.06 into "≤4.07") - **Added:** 5.2, 5.3, 5.4, 5.5 - *Justification: Only 2% used versions older than 4.08 in 2023; OCaml 5.x adoption is now mainstream* ### Q29. Installation methods - **Added:** "dune package management" - **Changed:** "Npm" → "npm/yarn/pnpm" - *Justification: Dune package management is new since 2023; npm alternatives are common* ### Q31. Upgrade pain points - **Split:** "Breaking changes" into "Breaking changes in the type system" and "Breaking changes in the standard library" - **Added:** "Reliance on a compatible ppxlib version" - *Justification: More specific breakage data helps compiler team; ppxlib compatibility is a known bottleneck distinct from general dependency issues* ### Q32. Build tools - **Added:** "Nix-based builds" - *Justification: Nix usage for builds is distinct from Nix for package management* ### Q33. Preprocessors - **Clarified:** "cpp-style conditional-compilation directives" → "cpp-style conditional-compilation directives (e.g. cppo)" - *Justification: The original wording was vague; cppo is the most common tool in this category* ### Q34. Editors - **Added:** Helix, Kakoune, Zed - **Changed:** Split "Vim (or vim-based such as Neovim)" into separate "Neovim" and "Vim" options - *Justification: Emerging editors with OCaml/LSP support; Neovim has a distinct plugin/LSP ecosystem from Vim* ### Q36. Benchmarking tools - **Changed:** From generic categories to specific tool names - **2023:** "Microbenchmarking library (core_bench, benchmark, bench...)", "Performance-monitoring libraries (landmark...)", etc. - **2026:** core_bench, benchmark, bechamel, perf, Landmarks, memtrace, magic-trace, "Whole-program timing (time, hyperfine)", "Custom project-specific tools", None - *Justification: Specific tools enable better ecosystem understanding* ### Q42. Deployment methods - **Added:** "As WebAssembly modules", "As a unikernel" - *Justification: WebAssembly deployment is increasingly relevant; unikernel deployment (MirageOS) was listed as a target platform but missing from deployment options* ### Q54. State-of-the-art ecosystem wish - **Added options:** "AI/LLM tooling for OCaml", "I don't know" - *Justification: Reflects current ecosystem priorities; "I don't know" was missing for respondents without a strong preference* ### Q55. Adoption pain points - **Added option:** "Poor AI/LLM tool support compared to other languages" - *Justification: AI tooling quality increasingly affects language adoption decisions* ### Q56. Final comments - **Changed:** Removed 255 character limit - *Justification: Character limit was unnecessarily restrictive* --- ## Unchanged Questions (Preserved for Comparability) The following questions are identical or functionally equivalent to enable year-over-year comparison: | Topic | 2023 | 2026 | Notes | |-------|------|------|-------| | OCaml experience duration | Q1 | Q1 | Identical | | Proficiency self-assessment | Q2 | Q2 | Identical | | Workplace OCaml trend | Q5 | Q5 | Identical | | How learned OCaml | Q6 | Q6 | Identical | | School/University name | Q7 | Q7 | Identical | | Domains of software | Q10 | Q10 | Identical | | Learning pain points | Q12 | Q12 | Identical | | OCSF awareness | Q13 | Q13 | Identical | | OCSF priorities | Q14 | Q14 | Identical | | Content topics wanted | Q16 | Q16 | Identical | | Project contribution count | Q17 | Q22 | Identical | | Testing approaches | Q32 | Q35 | Identical | | Feel welcome in community | Q36 | Q43 | Identical | | Satisfied with language | Q37 | Q44 | Identical | | Tooling confusing to newcomers | Q39 | Q45 | Identical | | Satisfied with package repos | Q41 | Q46 | Identical | | Can find libraries | Q43 | Q48 | Identical | | Missing libraries | Q44 | Q49 | Identical | | Libraries well documented | Q45 | Q50 | Identical | | Understand best practices | Q47 | Q51 | Identical | | Can find OCaml jobs | Q49 | Q52 | Identical | | Can find OCaml candidates | Q50 | Q53 | Identical | | Country | Q55 | Q57 | Identical | | Underrepresented group | Q56 | Q58 | Identical | | Difficulty participating | Q57 | Q59 | Identical | --- ## Question Number Mapping | Section | 2023 | 2026 | |---------|------|------| | OCaml Usage | Q1-Q12 | Q1-Q12 | | OCSF | Q13-Q14 | Q13-Q14 | | Community | Q15-Q16 | Q15-Q17 | | AI/LLM Usage | — | Q18-Q21 | | Projects & Contributions | Q17-Q20 | Q22-Q25 | | Compiler | Q21-Q27 | Q26-Q31 | | Tooling | Q28-Q33 | Q32-Q38 | | Debugging & Profiling | — | Q39-Q41 | | Infrastructure | Q34-Q35 | Q42 | | Feelings | Q36-Q50 | Q43-Q53 | | Burning Desires | Q51-Q54 | Q54-Q56 | | Demographics | Q55-Q57 | Q57-Q59 | --- ## Detailed Question Mapping (2023 → 2026) | 2023 | 2026 | Status | |------|------|--------| | Q1 | Q1 | Unchanged | | Q2 | Q2 | Unchanged | | Q3 | Q3 | Modified (added "For teaching", "For work, in open source") | | Q4 | Q4 | Modified (added "I don't use OCaml at work") | | Q5 | Q5 | Unchanged | | Q6 | Q6 | Unchanged | | Q7 | Q7 | Unchanged | | Q8 | Q8 | Modified (added Zig) | | Q9 | Q9 | Modified (added CLI tools, Games, Mobile) | | Q10 | Q10 | Unchanged | | Q11 | Q11 | Modified (select → text field) | | Q12 | Q12 | Unchanged | | Q13 | Q13 | Unchanged | | Q14 | Q14 | Unchanged | | Q15 | Q15 | Modified (added platforms) | | Q16 | Q16 | Unchanged | | — | Q17 | **New** (community size) | | — | Q18-Q21 | **New** (AI/LLM section) | | Q17 | Q22 | Unchanged | | Q18 | — | **Removed** | | Q19 | Q23 | Modified (added WebAssembly, clarification) | | Q20 | Q24 | Modified (added targets, Melange) | | — | Q25 | **New** (CPU architectures) | | Q21 | Q26 | Modified (added OxCaml) | | Q22 | Q27 | Modified (collapsed old versions) | | Q23 | Q28 | Modified (collapsed old versions) | | Q24 | Q29 | Modified (added dune pkg mgmt) | | Q25 | Q30 | Unchanged | | Q26 | Q31 | Modified (split breaking changes, added ppxlib) | | Q27 | — | **Removed** | | Q28 | Q32 | Modified (added Nix-based builds) | | Q29 | Q33 | Modified (clarified cppo) | | Q30 | Q34 | Modified (added editors, split Vim/Neovim) | | Q31 | — | **Removed** | | Q32 | Q35 | Unchanged | | Q33 | Q36 | Modified (specific tools) | | — | Q37 | **New** (documentation tools) | | — | Q38 | **New** (tooling feedback text) | | — | Q39-Q41 | **New** (debugging section) | | Q34 | Q42 | Modified (added WebAssembly, unikernel) | | Q35 | — | **Removed** | | Q36 | Q43 | Unchanged | | Q37 | Q44 | Unchanged | | Q38 | — | **Removed** | | Q39 | Q45 | Unchanged | | Q40 | — | **Removed** (replaced by Q38) | | Q41 | Q46 | Unchanged | | Q42 | — | **Removed** (replaced by Q47) | | — | Q47 | **New** (package repo feedback text) | | Q43 | Q48 | Unchanged | | Q44 | Q49 | Unchanged | | Q45 | Q50 | Unchanged | | Q46 | — | **Removed** | | Q47 | Q51 | Unchanged | | Q48 | — | **Removed** | | Q49 | Q52 | Unchanged | | Q50 | Q53 | Unchanged | | Q51 | — | **Removed** | | Q52 | Q54 | Modified (added AI/LLM option, I don't know) | | Q53 | Q55 | Modified (added AI/LLM option) | | Q54 | Q56 | Modified (removed char limit) | | Q55 | Q57 | Unchanged | | Q56 | Q58 | Unchanged | | Q57 | Q59 | Unchanged |